shell学习笔记(四)shell控制流结构目录:
=======================================================
条件语句 if语法结构 循环语句 for语法结构 1.for … in 语句 2.for((赋值;条件;运算语句)) while语法结构 until语法结构 break和continue控制 选择语句 case语法结构
========================================================
--------------------------------------------------------------
[root@viong_app1 soft]#
cat if.sh if [ $scores -gt 90 ]; then #[ ]中的值必须是[空格expression空格]
elif [ $scores -gt 80 ]; then
elif [ $scores -gt 60 ]; then
[root@viong_app1 soft]#
chmod 755 if.sh [root@viong_app1 soft]#
./if.sh --------------------------------------------------------------
[root@viong_app1 soft]#
cat if1.sh echo -n "Enter you name:"
if [ -z $NAME ] || [ "$NAME" = "" ];then
echo "You don't enter a name"
elif [ "$NAME" = root ];then
[root@viong_app1 soft]# ./if1.sh 输入为root则打印echo hello root
[root@viong_app1 soft]# ./if1.sh 输入为任意字符未匹配1 2 条件则echo hello $NAME
[root@viong_app1 soft]# ./if1.sh 输入为空字符或者空格则打印echo You don't enter a name
[root@viong_app1 soft]#
if [ 10 -lt 21 ];then echo "YES";fi; 条件测试有:[[]],[],test 这几种,注意:if与[ ]用空格分开,[ ]与变量之间用空格分开
shell命令,可以按照分号分割,也可以按照换行符分割。如果想一行写入多个命令,可以通过“';”分割
当变量值在列表里,for循环即执行一次所有命令,使用变量名访问列表中取值
只要用
空格字符分割,每次for…in 读取时候,就会
按顺序将读到值,给前面的变量 in列表用法是可选,如果不用它,for循环使用命令行的位置参数
[root@viong_app1 soft]#
cat for.sh [root@viong_app1 soft]#
./for.sh [root@viong_app1 soft]# seq 5
------------------------------------------------------
[root@viong_app1 soft]#
cat for.sh for abc in “lin hong viong” 注意:如果把双引号去掉就变成三个字符换行打印出来
[root@viong_app1 soft]# ./for.sh
[root@viong_app1 soft]#
cat for2.sh [root@viong_app1 soft]#
./for2.sh 注:在while 和do 之间虽然通常只使用一个命令,但可以放几个命令,命令通常用作测试条件 [root@viong_app1 soft]#
cat ./while.sh [root@viong_app1 soft]#
./while.sh ------------------------------------------------------
[root@viong_app1 soft]#
cat while2.sh while echo -n "输入你最喜欢的电影:";read FILM
[root@viong_app1 soft]#
./while2.sh 输入你最喜欢的电影:[root@viong_app1 soft]#
[root@viong_app1 soft]# cat name
[root@viong_app1 soft]# cat while1.sh
[root@viong_app1 soft]# ./while1.sh
如果把name放在 while read LINE<name只会无次数地循环显示第一行,即1
注意:条件可为任意测试条件,测试发生在循环末尾,因此循环至少执行一次
until提供循环执行,它与while循环相反,
until 循环将反复执行直到条件为真就结束循环,而while循环条件为假就结束循环。until并没有等价的while那么好用,而且许多shell版本不支持,BASH支持,所以很多程序员不喜欢用
[root@viong_app1 soft]# cat until.sh
[root@viong_app1 soft]# ./until.sh
如果是在一个嵌入循环里,可以指定n来跳出的循环个数
[root@viong_app1 soft]#
cat break.sh echo -n "Enter any Nun[1..5]:"
echo "You enter a number between 1 and 5"
[root@viong_app1 soft]#
./break.sh You enter a number between 1 and 5
You enter a number between 1 and 5
-----------------------------------------
注:continue命令类似于break命令,只有一点重要差别,它不会跳出循环,只是跳出这个循环步
[root@viong_app1 soft]#
cat continue.sh echo -n "Enter any Nun[1..5]:"
echo "You enter a number between 1 and 5"
echo "Wrong number,continue(y/n)?:"
[root@viong_app1 soft]#
./continue.sh You enter a number between 1 and 5
Wrong number,continue(y/n)?:
Wrong number,continue(y/n)?:
case语句为多选择语句,可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令
case取值后面必须为单词in,每一模式必须以右括号”)”结束,取值可以为变量或常数,匹配发现取值符合某一模式后,其间所有命令开始执行直至两个分号 ;; .模式匹配符*表示任意字符,?表示任意单字符,[.. ]表示类或范围中任意字符
[root@viong_app1 soft]# cat case.sh
apple|APPLE) echo "THE FRUIT is apple";;
banana|BANANA) echo "THE FRULT is banana";;
*) echo "输入的是不是我要的水果啊?";;
[root@viong_app1 soft]# ./case.sh
[root@viong_app1 soft]# ./case.sh apple
[root@viong_app1 soft]# ./case.sh app
$1是外部传参的值,通过这个例子就能想到平时类似server httpd restart命令,就是利用case调用
本文转自viong 51CTO博客,原文链接:http://blog.51cto.com/viong/894438,如需转载请自行联系原作者