[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.csdn.net/jesson20121020]
今天开始学一些同其他高级语言一样的shell流控制结构
流控制语句:
1. if语句
语句格式:
if condition1
then
command1
else condition2
then
command2
else
command3
fi
注:if语句必须以fi终止。
如果没有condition2,则if语句可以简化为如下:
if condition
then
command1
else
command2
fi
或:
if condition
then
command1
fi
例子:
if_test.sh
#!/bin/bash
#if_test
echo -n "please input two number(a and b):"
read a b
if [ $a -lt $b ]
then
echo "$a is less than $b"
elif [ $a -gt $b ]
then
echo "$a is greater than $b"
else
echo "$a ia equal to $b"
fi
给予可执行权限,执行该脚本:
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ chmod a+rx if_test.sh
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./if_test.sh
please input two number(a and b):10 10
10 ia equal to 10
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./if_test.sh
please input two number(a and b):10 12
10 is less than 12
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./if_test.sh
please input two number(a and b):8 2
8 is greater than 2
注意,其中用于了比较运算符,更加详细的比较运算符,请参考man test。
2. case语句
语句格式:
case value in
模式1)
command1
;;
模式2)
command2
;;
esac
注意:
1case取值后面必须为单词in,每一模式必须以右括号结束,取值可以为变量或者常数。
2 模式匹配符*表示任意字符;?表示任意单字符;[...]表示类或范围中任意字符。
例子:
case_test.sh
#!/bin/bash
#case_test
echo -n "Enter a number from 1 to 3:"
read n
case $n in
1)
echo "You select 1"
;;
2)
echo "You select 2"
;;
3)
echo "You select 3"
;;
*) echo "You select *"
;;
esac
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ chmod a+rx case_test.sh
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./case_test.sh
Enter a number from 1 to 3:1
You select 1
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./case_test.sh
Enter a number from 1 to 3:2
You select 2
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./case_test.sh
Enter a number from 1 to 3:3
You select 3
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./case_test.sh
Enter a number from 1 to 3:*
You select *
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./case_test.sh
Enter a number from 1 to 3:20
You select *
3. for循环
格式:
for 变量名 in 列表
do
命令1
命令2
done
例子:
for_test1.sh
#!/bin/bash
#for_test
for loop in 1 2 3 4 5
do
echo $loop
done
运行结果:
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./for_test1.sh
1
2
3
4
5
for_test2.sh
#!/bin/bash
#for_test2
for loop in orange red blue gray
do
echo $loop
done
运行结果:
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./for_test2.sh
orange
red
blue
gray
for_test3.sh
#!/bin/bash
#for_test3
for loop in `cat name.txt`
do
echo $loop
done
运行结果:
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ cat name.txt
jesson
cherry
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./for_test3.sh
jesson
cherry
4. until循环
格式:
until 条件
do
命令
done
until_test.sh
#!/bin/bash
#until_test
i=10
until [ $i -lt 0 ]
do
echo $i
let i=i-1
# ((i=$i-1))
#i=$[i-1]
done
给予权限,执行结果如下:
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ chmod a+rx until_test.sh
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./until_test.sh
10
9
8
7
6
5
4
3
2
1
0
5. while循环
格式:
while 命令
do
命令
.......
done
例子:
while_test1.sh
#!/bin/bash
#while_test1
while echo -n "输入你喜欢的明星:";read Mingxing
do
echo "$Mingxing 是你喜欢的明星"
done
给予权限,执行:
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ chmod a+rx while_test1.sh
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./while_test1.sh
输入你喜欢的明星:周杰
周杰 是你喜欢的明星
输入你喜欢的明星:孙楠
孙楠 是你喜欢的明星
while_test2.sh
#!/bin/bash
#while_test
while read NAME
do
echo $NAME
done <name.txt
给予权限,执行:
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ chmod a+rx while_test2.sh
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./while_test2.sh
jesson
cherry
6. break和continue
break [n]
-退出循环
-如果是在一个嵌入循环里,可以指定n来跳出的循环个数。
continue
-跳过循环步
注意,这和其他高级语言中的一样,continue命令类似于break,只有一点差别,它不会跳出循环,而是路过当前循环步。
例子:
break_test.sh
#!/bin/bash
#break_test.sh
while :
do
echo -n "Enter any number(1,...,5):"
read ANS
case $ANS in
1|2|3|4|5)
echo "You enter anumber between 1 and 5"
;;
*)
echo "Wrong number,Bye"
break;
;;
esac
done
给予权限,执行如下:
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ chmod a+rx break_test.sh
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./break_test.sh
Enter any number(1,...,5):1
You enter anumber between 1 and 5
Enter any number(1,...,5):2
You enter anumber between 1 and 5
Enter any number(1,...,5):3
You enter anumber between 1 and 5
Enter any number(1,...,5):4
You enter anumber between 1 and 5
Enter any number(1,...,5):5
You enter anumber between 1 and 5
Enter any number(1,...,5):6
Wrong number,Bye
continue_test.sh
#!/bin/bash
#continue_break_test
while :
do
echo -n "Enter any number(1,...,5):"
read ANS
case $ANS in
1|2|3|4|5)
echo "You enter a number between 1 and 5"
;;
*)
echo -n "Wrong number,continue(y/n)?:"
read IS_CONTINUE
case $IS_CONTINUE in
y|yes|Y|Yes)
continue
;;
*)
break
;;
esac
esac
done
同样,给予可执行权限,执行
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ chmod a+rx continue_test.sh
jesson@jesson-K43SV:~/develop/worksapce/shell_workspace$ ./continue_test.sh
Enter any number(1,...,5):2
You enter a number between 1 and 5
Enter any number(1,...,5):3
You enter a number between 1 and 5
Enter any number(1,...,5):4
You enter a number between 1 and 5
Enter any number(1,...,5):5
You enter a number between 1 and 5
Enter any number(1,...,5):8
Wrong number,continue(y/n)?:y
Enter any number(1,...,5):1
You enter a number between 1 and 5
Enter any number(1,...,5):79
Wrong number,continue(y/n)?:n