您的位置:首页 > 运维架构 > Shell

Shell 循环语句:if,case esac,for,while

2016-06-28 21:22 344 查看
1:if 语句

if 语句通过关系运算符判断表达式的真假来决定执行哪个分支。Shell 有三种 if … else 语句:

if ... fi 语句;
if ... else ... fi 语句;
if ... elif ... else ... fi 语句


例如:

a=10
b=20
if [ $a == $b ]
then
echo "a is equal to b"
fi


if [ $a == $b ]
then
echo "a is equal to b"
elif [ $a -gt $b ]
then
echo "a is greater than b"
elif [ $a -lt $b ]
then
echo "a is less than b"
else
echo "None of the condition met"
fi


注:if,elif后均有then.

if … else 语句也经常与 test 命令结合使用,如下所示:

num1=$[2*3]
num2=$[1+5]
if test $[num1] -eq $[num2]
then
echo 'The two numbers are equal!'
else
echo 'The two numbers are not equal!'
fi


test 命令用于检查某个条件是否成立,与方括号([ ])类似。

2:case esac语句

case … esac 与其他语言中的 switch … case 语句类似,是一种多分枝选择结构。

case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:

case 值 in
模式1)
command1
command2
command3
;;
模式2)
command1
command2
command3
;;
*)
command1
command2
command3
;;
esac


case工作方式如上所示。取值后面必须为关键字 in,每一模式必须以右括号结束。取值可以为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至 ;;。;; 与其他语言中的 break 类似,意思是跳到整个 case 语句的最后。

取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。

echo 'Input a number between 1 to 4'
echo 'Your number is:\c'
read aNum
case $aNum in
1)  echo 'You select 1'
;;
2)  echo 'You select 2'
;;
3)  echo 'You select 3'
;;
4)  echo 'You select 4'
;;
*)  echo 'You do not select a number between 1 to 4'
;;
esac


Input a number between 1 to 4
Your number is:3
You select 3


3:for

列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。

for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done


4:while

如下:

COUNTER=0
while [ $COUNTER -lt 5 ]
do
COUNTER='expr $COUNTER+1'
echo $COUNTER
done


输出:

1
2
3
4
5


while循环可用于读取键盘信息。下面的例子中,输入信息被设置为变量FILM,按结束循环。

echo 'type <CTRL-D> to terminate'
echo -n 'enter your most liked film: '
while read FILM
do
echo "Yeah! great film the $FILM"
done


5:until循环

循环执行一系列命令直至条件为 true 时停止。until 循环与 while 循环在处理方式上刚好相反。一般while循环优于until循环,但在某些时候,也只是极少数情况下,until 循环更加有用。

如:

a=0
until [ ! $a -lt 10 ]
do
echo $a
a=`expr $a + 1`
done


6:跳出循环

break命令允许跳出所有循环(终止执行后面的所有循环)。

continue命令与break命令类似,只有一点差别,它不会跳出所有循环,仅仅跳出当前循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell