判断语句
if [ condition ];then
语句1
语句2
...
fi
# or
if [ condition ]
then
...
if
e.g.
#! /bin/bash
a=3
b=4
if [ $a -lt $b ];then
echo "a < b"
fi
单层if-else
if [ condition ]
then
语句1
语句2
...
else
语句1
语句2
...
fi
e.g
#! /bin/bash
a=3
if [ $a -gt 1 ];
then
echo "a > 1"
else
echo "a < 1"
fi
多层if-else-elif-else
if [ condition ]
then
语句1
语句2
...
elif [ condition ]
then
语句1
语句2
...
elif [ condition ]
then
语句1
语句2
else
语句1
语句2
...
fi
e.g.
#! /bin/bash
if [ $1 -gt 10 ];then
echo "$1 > 10"
elif [ $1 -gt 5 ];then
echo "$1 > 5"
elif [ $1 -gt 0 ];then
echo "$1 > 0"
else
echo "$1 <= 0"
fi
注意事项:
- [ condition ] 中括号和条件判断式之间必须有空格
- if后要有空格
case … esac形式
case $变量名称 in
值1)
语句1
语句2
...
;; # 类似于C/C++中的break
值2)
语句1
语句2
...
;;
*) # 类似于C/C++中的default
语句1
语句2
...
;;
esac
e.g.
#! /bin/bash
a=10
case $a in
1)
echo '$a is 1'
;;
2)
echo '$a is 2'
;;
3)
echo '$a is 3'
;;
*)
echo '$a is *'
;;
esac
注意事项:
- case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
- 双分号“;;“表示命令序列结束。
- 最后的”*)”表示默认模式。
for…in…do…done
for var in val1 val2 val3
do
语句1
语句2
...
done
e.g.
#! /bin/bash
for i in 1 2 3 4;
do
echo $i
done
# input: 1\n2\n3\n4\n
for ((…;…;…)) do…done
for ((expression; condition; expression))
do
语句1
语句2
done
e.g.
#! /bin/bash
for((i=1; i < 10; ++i));do
echo "$i"
done
while…do…done循环
while condition
do
语句1
语句2
...
done
e.g.
#! /bin/bash
while read i;
do
if (( $i == 1));then
break;
else
echo "no"
fi
done
until…do…done循环
until condition
do
语句1
语句2
...
done
e.g.
#! /bin/bash
i=0
until (( i == 1));
do
read i
done
break命令
- 跳出当前一层循环,注意与C/C++不同的是:break不能跳出case语句。
continue命令
- 跳出当前循环。