控制语句
if
1
| if list; then list; [elif list ; then list; ] ... [ else list; ] fi
|
if 后面的list执行,如果返回值为0,则执行then后面的list,否则会执行elif后面的list,直到有一个list的执行结果为0,则执行对应的then后面的list,如果所有elif的执行结果都是非0,则会执行else的后面的list。
这里需要说明一下if后面并不是只能接条件语句,可以接任何的命令,最终是判断这一串语句的返回值是不是0
for
for 有两种格式
1
| for name [ [ in [ word ... ] ] ; ] do list ; done
|
name的值会遍历word列表,并执行list
用法举例1:
1
2
3
4
| for i in {1..3}
do
echo $i
done
|
output:
1
2
3
说明{1..3}会生成”1 2 3”的一个列表
用法举例2:
1
2
3
4
| for host in 70 72 110
do
ssh 192.168.10.$host "grep 'xxx' /data/logs/xxxx"
done
|
分别从三台机器上查看日志
1
| for (( expr1 ; expr2 ; expr3 )) ; do list ; done
|
语法和c语言的一样只是是两个括号
1
2
3
4
| for (( i = 1; i < 10; i += 2 ))
do
echo $i
done
|
output:
1
3
5
7
9
while
1
2
| while list; do list; done
until list; do list; done
|
while 只要 while后面的list执行返回值为0,则会执行do后面的list, until与while相反
用法举例:
1
2
3
4
| while read line
do
echo $line
done
|
从标准输入依次读取一行直到标准输入结束
case
1
| case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
|
word匹配到对应的正则会执行对应的list语句
举例:
1
2
3
4
5
6
7
8
9
10
11
| case $1 in
start | begin )
echo "start"
;;
stop | end )
echo "stop"
;;
*)
echo "default"
;;
esac
|
处理脚本的参数
select
1
| select name [ in word ] ; do list ; done
|
多用于用户交互,给一个列表参数供选择,select是循环选择,需要在list里面写break退出循环,多与case配合使用
1
2
3
4
5
6
7
8
9
10
11
| select word in start stop exit
do
case $word in
exit)
exit 0
;;
*)
echo $word
;;
esac
done
|
执行过程:
