Shell里面的流程控制不能为空,因此如果else里面没有语句就不要写else,貌似也可以在else里面写一个":"表示什么都不做。源自实验楼的高级 bash 脚本编程指南课程。
1. if else 语句
1.1 if
if语句的语法格式为:
if condition
then
command 1
command 2
...
command N
fi
1.2 if-else
if else语句的语法格式为:
if condition
then
command 1
command 2
...
command N
else
command 1
command 2
...
command M
fi
1.3 if-elif-else
if elif else语句的语法格式为,else语句如果没有就不要写:
if condition1
then
command 1
command 2
...
command N
elif condition2
then
command 1
command 2
...
command M
else
command 1
command 2
...
command P
fi
1.4 例子
一个简单的例子
a=10
b=20
if [ $a -eq $b ]
then
echo "a == b"
elif [ $a -gt $b ]
then
echo "a > b"
elif [ $a -lt $b ]
then
echo "a < b"
else
echo "Ineligible"
fi
2. for 语句
2.1 for的一般格式
for循环一般格式为:
for var in item1 item2 ... itemN
do
command 1
command 2
...
command N
done
2.2 例子1
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
输出结果为:
The value is: 1
The value is: 2
The value is: 3
The value is: 4
2.3 例子2
for str in This is a string
do
echo $str
done
输出结果为:
This
is
a
string
3. while 语句
3.1 基本格式
while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。其格式为:
while condition
do
command 1
command 2
...
command N
done
3.2 例子1
a=1
while[ $a -lt 6 ]
do
echo $a
let "a++" #用于指定算数运算符,即 let expretion,let只能执行整数的相关操作,也可以写为 let a=$a+1
done
输出结果为:
1
2
3
4
5
3.3 例子2
echo 'press <CTRL-D> exit'
echo -n 'Who do you think is the most handsome: '
while read MAN
do
echo "Yes!$MAN is really handsome"
done
该实验中,输入的字符串存在MAN中,按回车表示输入结束,按<CTRL-C>
或者<CTRL-D>
可以结束程序的等待输入状态。
4. 无限循环
4.1 语法格式1
无限循环的语法格式为:
while : # ":"在shell中表示空命令,也可以视为true。
do
command 1
command 2
...
command N
done
或者
while true
do
command 1
command 2
...
command N
done
或者
for (( ; ; ))
5. until 语句
5.1 简介
until循环执行一系列命令直至条件为真时停止。until循环与while循环在处理方式上正好相反。一般while循环由于until循环, 但是在某些特殊情况下,until循环更加有用。until循环的语法格式为:
until conditon
do
command 1
command 2
...
command N
done
5.1 例子
a=1
until[ $a -gt 6 ]
do
echo $a
let "a++" #用于指定算数运算符,即 let expretion,let只能执行整数的相关操作,也可以写为 let a=$a+1
done
输出结果为:
1
2
3
4
5
6
6 case 语句
6.1 简介
shell中case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句的格式如下:
case var in
item 1)
command 1
command 2
...
command N
;;
item 2)
command 1
command 2
...
command M
;;
esac
- var后面的单词必须为in,每一个item必须以右括号结束,取值可以为变量或者常数或者字符串。匹配发现取值符合某一个item之后,其间所有命令开始执行直至
";;"
. - 取值将检测匹配的每一个item,一旦匹配成功,则执行相匹配的命令并且不再继续匹配。如果没有一个item匹配,使用星号
"*"
捕获该值,再执行后面的命令。 - case语句需要一个esac作为结束语句,
";;"
表示break。
6.2 例子
c="ccc"
read MAN
case $MAN in
"aaa") echo "aaa";;
"bbb") echo "bbb";;
$c) echo "ccc";;
*) echo "else";;
esac
7. 跳出循环
7.1 简介
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,shell中有两个命令来实现这个功能:break和continue。
7.2 break
break命令允许跳出所有循环(终止执行后面的所有循环)。
例如:
while :
do
echo -n "Enter a number between 1 and 5: "
read aNum
case $aNum in
1|2|3|4|5) echo "The number you entered is $aNum!";;
*) echo "The number you entered is not between 1 and 5! game over!!!"
break;;
esac
done
结果输出为:
Enter a number between 1 and 5: 5
The number you entered is 5!
Enter a number between 1 and 5: 6
The number you entered is not between 1 and 5! game over!!!
7.3 continue 语句
与c++中类似,continue不会跳出整个循环体,只是会跳出当前循环。