Shell流程控制语句
- 条件判断if
if 语句语法格式:
if condition
then
command1
elif condition
command2
else
commandN
fi
if语句以fi结束, 中间elif ,else 为条件分支,是可选的。
也写成一行时,以分号;分隔语句,如:
if [ $x -gt 3 ]; then echo "true"; fi
条件语句可以是多种形式,与具体运算符有关
比较运算:
if [ "$x" -lt "$y" ]; then
# statements
fi
if (( $x > $y )); then
# statements
fi
i=3
j=4
if [ $i == $j ]
then
echo "$i 等于 $j"
elif [ $i -gt $j ]
then
echo "$i 大于 $j"
else
echo "$i 小于 $j"
fi
使用test命令作为条件:
num1=$[12/4]
num2=$[1+2]
if test $[num1] -eq $[num2]
then
echo 'num1=num2'
else
echo 'num1!=num2'
fi
- for循环语句
for循环语法格式:
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
写成一行:
for var in item1 item2 ... itemN; do command1; command2… done;
in列表是可选的,如果不用它,for循环使用命令行的位置参数。
示例:
# 遍历数组
arr=(1 2 3 4)
for item in ${arr[*]}
do
echo "$item"
done
for item in a b cd ef
do
echo "$item"
done
输出结果:
1
2
3
4
a
b
cd
ef
当条件不存在时表示无限循环,如:for (( ; ; ))
- while循环语句
语法格式:
while condition
do
command
done
示例:
#!/bin/bash
i=1
while (( $i<=3 ))
do
echo $i
let i++ #i=i+1
done
输出:
1
2
3
while循环可用于读取键盘输入
示例:
echo '请输入保密问题: '
while read ask
do
echo "你的问题是:$ask"
done
上面代码会循环读取键盘输入并设置给变量ask,按ctrl+D或ctrl+c 可结束循环
- until循环
until循环执行语句直到条件为true时结束循环,即条件表达式如果返回值为false,则继续执行循环体内的语句,否则跳出循环
语法格式:
until condition
do
command
done
示例:
#!/bin/bash
h=0
until (( $h>4 ))
do
echo $h
let h++
done
echo "结束循环后h值:$h"
运行结果:
0
1
2
3
4
结束循环后h值:5
- 多分支语句case ... esac
case ... esac与其他语言中的 switch语句类似,是一种多分支选择结构
语法格式如下:
case expression in
pattern1)
command
...
;;
pattern2)
command2
...
;;
...
*)
statements
esac
expression表达式与每一分支pattern逐个进行匹配,如果匹配成功则执行分支下语句直到遇到;;后停止并跳出case。如果没有匹配的分支会跳转到*)分支,这相当于if语句里的else,*)可省略。
1.expression必须是一个可计算出值的语句,可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果 2.每个分支应以;;结束,最后个分支可省略
示例:
case $1 in
start) echo '程序启动中...'
;;
restart) echo '重启中...'
;;
stop) echo '停止运行'
;;
\*) echo 'usage:start | restart | stop'
esac
同其他语言一样在循环过程中强制跳出循环可使用break 和 continue关键字
break 用于跳出整个循环
continue 用于跳出本次循环