摘要:
控制结构,if then else语句,case语句,for循环,until循环,while循环,break控制,continue控制
4.1流控制结构
流控制是什么?
#!/bin/bash
#创建一个目录
make /home/moocos/sh/txt
#复制所有txt文件到/home/moocos/sh/txt/
cp *.txt /home/moocos/sh/txt
rm -f *.txt
如果上述脚本创建目录失败或文件拷贝失败怎么处理?
这些都是流控制需要解决的
4.2if语句
语句格式:
if 条件1
then
命令1
elif 条件2
then
命令2
else
命令3
fi
注意:if语句必须以单词fi终止
if 条件
then 命令
fi
例子:
#!/bin/bash
#iftest
#this is a comment line
if [ "10" -lt "12" ]
then
echo "yes,10 is less than 12"
fi
可以通过man test了解更多关于表达式的信息
if、then、else语句
例子:
#!/bin/bash
#if test2
echo -n "enter your name:"
read NAME
if [ "$NAME" = "" ];then
echo "you did not enter any information"
fi
#!/bin/bash
#ifcp
if cp myfile.bak myfile;then
echo "good copy"
else
echo "`basename $0`:error could not copy the files">&2
fi
例子:
#!/bin/bash
#ifelif
echo -n "enter your name:"
read NAME
if [ -z $NAME ] || [ "$NAME" = "" ];then
echo "you did not enter a name"
elif [ "$NAME" = "root" ];then
echo "hello root"
elif [ "$NAME" = "cyf" ];then
echo "hello cyf"
else
echo "you are not root or cyf,but hi $NAME"
fi
4.2case语句
case语句为多选择语句。可以用case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。
case语句格式:
case 值 in
模式1)
命令1
;;
模式1)
命令2
;;
esaccase取值后面必须为单词in,每一模式必须以右括号结束取值可以为变量或常数。匹配发现取值复核某一模式后,期间所有命令开始执行直至;;。模式匹配符*表示任意字符,?表示任意单字符,[..]表示类或范围中任意字符。
例子:
#!/bin/bash
#case select
echo -n "enter a number from 1to 3:"
read ANS
case $ANS in
1)
echo "you select 1"
;;
2)
echo "you select 2"
;;
3)
echo "you select 3"
;;
*)
echo "`basename $0`:this is not between 1 and 3">&2
exit;
;;
esac
4.3for循环
for循环一般格式为:
for 变量名 in 列表
do
命令1
命令2
done
当变量在列表里,for循环及执行一次所有命令,使用变量名访问列表中取值。命令可为任何有效的shell命令和语句。变量名为任何单词。in列表用法是可选的,如果不用他,for循环使用命令行的位置参数。in列表可以包含替换、字符串和文件名。
例子:
1 #!/bin/bash
2 #for1
3 for loop in 1 2 3 4 5
4 do
5 echo $loop
6 done
1 #!/bin/bash
2 #for2
3 for loop in orange red blue grey
4 do
5 echo $loop
6 done
1 #!/bin/bash
2 #for2
3 for loop in "orange red blue grey"
4 do
5 echo $loop
6 done
1 #!/bin/bash
2 #for2
3 for loop in `cat myfile`
4 do
5 echo $loop
6 done
4.4until循环
until循环一般格式为:
until 条件
do
命令1
命令2
。。。
done
注意:条件可为任意测试条件,测试发生在循环末尾,因此循环至少执行一次。
例子:
1 #!/bin/bash
2 part="/dev/sda1"
3 LOOK_OUT=`df |grep $part |awk '{print $5}' |sed 's/%//g'`
4 echo $LOOK_OUT
5 until [ "$LOOK_OUT" -gt "90" ]
6 do
7 echo "Filesystem /backup is nearly full" |mail root
8 done
while循环的一般 格式为:
while 命令
do
命令1
命令2
。。。
done
注意:在while和do之间虽然通常只使用一个命令,但可以放几个命令,命令通常用作测试条件。
例子:
1 #!/bin/bash
2 echo "ctrl +d exit"
3 while echo -n "please input the movie:";read FILM
4 do
5 echo "yeah.that is a good movie!"
6 done
1 #!/bin/bash
2 while read LINE
3 do
4 echo $LINE
5 done < names.txt
4.6break和continue控制
break [n]
-退出循环
-如果是在一个嵌入循环里,可以指定n来跳出的循环个数
continue
-跳出循环步
注意:continue命令类似于break命令,只是一点重要差别,他不会跳出循环,只是跳过这个循环步。
例子:
1 #!/bin/bash
2 #breakout
3 while :
4 do
5 echo -n "enter any number[1-5]:"
6 read ANS
7 case $ANS in
8 1|2|3|4|5)
9 echo "you enter a number betweent 1 to 5"
10 ;;
11 *)
12 echo "wrong number,byb"
13 break
14 ;;
15 esac
16 done
1 #!/bin/bash
2 #breakout
3 while :
4 do
5 echo -n "Enter any number [1-5]:"
6 read ANS
7 case $ANS in
8 1|2|3|4|5)
9 echo "you enter a true number"
10 ;;
11 *)
12 echo -n "wrong number,continue(y/n)?"
13 read IS_C
14 case $IS_C in
15 y|Y)
16 continue
17 ;;
18 *)
19 break
20 ;;
21 esac
22 esac