注意,变量赋值号=的周围不能有空格,这可能和你熟悉的大部分编程语言都不一样。
双引号""之间,以及单斜号``之间的变量会被替换,单引号''之间则不会
函数调用不加括号,参数用空格隔开
| 变量 | 含义 |
|---|---|
| $0 | 当前脚本的文件名。 |
| $n(n≥1) | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。 |
| $# | 传递给脚本或函数的参数个数。 |
| $* | 传递给脚本或函数的所有参数。 |
| $@ | 传递给脚本或函数的所有参数。当被双引号" "包含时,$@ 与 $* 稍有不同,我们将在《Shell $*和$@的区别》一节中详细讲解。 |
| $? | 上个命令的退出状态,或函数的返回值,我们将在《Shell $?》一节中详细讲解。 |
| $$ | 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。 |
while循环
i = 0 while ((i<100)) do ((i++)) echo "$i" done
shell数组访问
#!/bin/bash
str="a b --n d"
array=($str)#字符分割,默认分割符是' '
length=${#array[@]}
echo $length
for ((i=0; i<$length; i++))
do
echo ${array[$i]}
done 一定时间内监控状态
remain_time=5 while (( 1 == 1 )) do a=`top -n 1 | sed -n '3,4p'` echo "$a">>cpu_mem.txt sleep 1 ((remain_time=$remain_time-1)) if (($remain_time == 0)) then break fi done
shell函数中参数(从$1开始)
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73 if语句
if (( 1 == 1 )) then echo 'if' elif (( 2 == 2 )) then echo 'elif' else echo 'else' fi
生成1~100的序列
seq 1 100
抑制命令输出
#后台进程 # &1 表示文件描述符。不加&的话会,输出到一个名字为1的文件 command > /dev/null 2>&1 &
删除所有子shell
kill `ps |grep bash|grep -v $$|awk '{print $1}'` >/dev/null 2>&1 小数计算
cpu_idle="99.9" cpu_use=`echo "scale=2;100.0 - $cpu_idle" | bc` echo $cpu_use
持续x秒,每隔1秒查询一次cpu和mem(如果有变化就写入日志)
top -b -d 1 -n $x|grep -E "%Cpu|KiB Mem">> $output_file
getopts用法
字符串截取
异步编程
#!/bin/bash
#
# 异步执行(wait)使用样例-父脚本
#
echo "父脚本:启动子脚本.."
./async-child &
# 通过将shell参数 $! 赋给pid变量,以记录子进程的进程ID
pid=$!
echo "父脚本:子脚本(PID=${pid})已启动"
echo "父脚本:继续执行中.."
sleep 2
echo "父脚本:暂停执行,等待子脚本执行完毕.."
wait ${pid}
echo "父脚本:子脚本已结束,父脚本继续.."
echo "父脚本:父脚本执行结束。脚本退出!" 


京公网安备 11010502036488号