一。case语句适用于需要进行多重分支的应用情况。
case分支语句的格式如下:
case 变量名 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默认执行的命令序列
esac
case语句结构特点如下:
case行尾必须为单词“in”,每一个模式必须以右括号“)”结束。
双分号“;;”表示命令序列结束。
匹配模式中可是使用方括号表示一个连续的范围,如[0-9];使用竖杠符号“|”表示或。
最后的“*)”表示默认模式,当使用前面的各种模式均无法匹配该变量时,将执行“*)”后
的命令序列。
case语句实例:由用户从键盘输入一个字符,并判断该字符是否为字母、数字或者其他字符,
并输出相应的提示信息。
#!/bin/bash
read -p "press some key ,then press return :" KEY
case $KEY in
[a-z]|[A-Z])
echo "It's a letter."
;;
[0-9])
echo "It's a digit."
;;
*)
echo "It's function keys、Spacebar or other ksys."
esac**重点内容**
二。f o r循环一般格式为:
for 变量名 i n 列表
d o
命令1
命令2⋯
d o n e
当变量值在列表里, f o r循环即执行一次所有命令,使用变量名访问列表中取值。命令可为任何有效的s h e l l命令和语句。变量名为任何单词。
i n列表用法是可选的,如果不用它, f o r循环使用命令行的位置参数。
i n列表可以包含替换、字符串和文件名,下面看一些例子。
输入一百以内的和
#!/bin/bash
#注意变量赋值的时候,=两边绝对不能有空格
sum=0
for (( i=1; i<=100; i++ ))
do
sum=$(( $sum + $i ))
done
echo "1+2+3+...+100=$sum"
输出三次uptime的值
#!/bin/bash
for i in 1 2 3 4 5
do
echo "$i-->$(uptime)"
done
批量解压缩当前文件夹下所有的.tar.gz 文件
#!/bin/bash
for i in `ls ./*.tar.gz`
do
tar -zxvf $i >/dev/null
done
w h i l e循环用于不断执行一系列命令,也用于从输入文件中读取数据,其格式为:
while 命令
d o
命令1
命令2
…
d o n e
计数器控制的while循环
主要用于已经准确知道要输入的数据和字符串的数目。
举例
#!/bin/sh
2 int=1
3 while(( $int<=5 ))
4 do
5 echo $int
6 let "int++"
7 done
2、结束标记控制的while循环
主要用于不知道读入数据的个数,但是可以设置一个特殊的数据值来结束循环,该特殊值称为结束标 记,通过提示用户输入进行操作。
举例
1 #用脚本演示使用结束标记控制while循环实现猜1~10内的数
2 #!/bin/sh
3
4 echo "Please input the num (1~~10): "
5 read num
6 while [[ $num != 4 ]]
7 do
8 if [ $num -lt 4 ]
9 then
10 echo "Too small ,Try again.."
11 read num
12 elif [ $num -gt 4 ]
13 then
14 echo "Too big ,Try again.. "
15 read num
16 else
17 exit 0
18 fi
19 done
20 echo "Yes ,you are right !!"
3、标致控制的while循环
用户输入标志值来控制循环结束
举例
1 #!/bin/sh
2 echo "Please input the num:"
3 read num
4 sum=0
5 i=1
6 signal=0
7 while [[ $signal != 1 ]]
8 do
9 if [ $i -eq $num ]
10 then
11 let "signal=1"
12 let "sum+=i"
13 echo "1+2、、、+$num=$sum"
14 else
15 let "sum=sum+i"
16 let "i++"
17 fi
18 done
4、命令行控制的while循环
举例
1 #!/bin/sh
2
3 echo "Please input arguements is $# "
4 echo "What you input : "
5 while [[ $* != "" ]]
6 do
7 echo $1
8 shift
9 done