首页 > 代码库 > SHELL笔记8
SHELL笔记8
shell的控制结构:条件结构、分支结构、循环结构
if,条件结构
if 表达式 then 命令表 [else 命令表] fi 可以使用分号将多个命令在一行内进行组合。因此,处于美观和节省空间的考虑,上述格式简写为: if 表达式; then 命令表 [else 命令表] fi
if语句可以无限嵌套
if 表达式 then 命令表 [elif 表达式 then 命令表] ... ... [else 命令表] fi
可以直接命令表换成一个if条件语句
case结构
case 表达式 in 模式11[|模式12]...) 命令表1;; 模式21[|模式22]...) 命令表2;; ... *) 命令表n;; esac
示例
1 #! /bin/bash 2 #filename:a.sh 3 case $1 in 4 dir | path) echo "Current path is `pwd`";; 5 date | time) echo "Today is `date`";; 6 *) echo "Invalid argument!!" 7 echo "Enter argument: dir/path/date/time";; 8 esac
case和if语句一样,可以嵌套
select结构
select循环结构,可以以一种更简便的方式生成菜单。生成的菜单有编号,在用户输入选择的编号后,可根据用户的选择执行相应的代码。
select 变量 in 列表 do 命令表 done
列表,是一个由字符串组成的序列。
使用select结构将会在屏幕上生成一个数字化的菜单,并提示用户进行选择,默认的提示符为#。用户只需要在提示符下输入对应的数字,即可完成选择。
通常,select总是与case结构一起使用,允许用户在菜单中选择,并基于选择执行相应的命令。
select结构是一种循环,需要使用break命令退出循环,也可以使用exit命令结束脚本。
示例
1 #! /bin/bash 2 #filename:a.sh 3 echo "---------select one week plan---------" 4 select N in Mon Tue Wed Thu Fri Sat Sun 5 do 6 case $N in 7 Mon) echo "Monday";; 8 Tue) echo "Tuesday";; 9 Wed) echo "Wednesday";; 10 Thu) echo "Thursday";; 11 Fri) echo "Friday";; 12 Sat) echo "Saturday";; 13 Sun) echo "Sunday";; 14 *) echo "wrong" 15 break;; 16 esac 17 done
使用sh a.sh运行脚本时,显示select: not found。 需要使用bash a.sh来运行脚本
# bash a.sh ---------select one week plan--------- 1) Mon 2) Tue 3) Wed 4) Thu 5) Fri 6) Sat 7) Sun #? 1 Monday #?
while循环
while 表达式 do 命令表 done
while循环可嵌套
示例
1 #! /bin/bash 2 #filename:a.sh 3 i=1 4 while [ $i -le 10 ] 5 do 6 echo "i=$i" 7 i=$(($i+1)) 8 done
注,while后面的[],[后面有空格,]前面有空格,不然会出错。
for循环
for 变量 [ in 列表 ] do 命令表 done
示例
1 #! /bin/bash 2 #filename:a.sh 3 for i in 1 2 3 4 5 6 4 do 5 echo "i=$i" 6 i=$(($i+1)) 7 done
如果省略了“in 列表”,则for会将当前执行脚本中的每个位置参数作为“列表”,一次执行列表中的一个。即“for 变量”隐含表示“for 变量$@”。
示例(arg,可以是任何名字,不是固定的)
1 #! /bin/bash 2 #filename:a.sh 3 i=1 4 for arg 5 do 6 echo "i=$i,parameters: $arg" 7 i=$(($i+1)) 8 done
until循环
until是在条件为假时继续执行循环,在条件为真时,停止执行。
until 命令表1 test 表达式 do 命令表2 done
示例
1 #! /bin/bash 2 #filename:a.sh 3 i=1 4 echo "Please enter the number N:" 5 read N 6 until 7 test $i -ge $N 8 do 9 echo "i=$i" 10 i=$(($i+1)) 11 done
break语句
break语句,可以结束while、for、until或者select等结构的执行,即从结构中跳出。退出循环后,将转到done语句后继续执行。
如果有多层结构嵌套,还可以在break关键字后面加上数字,指明要跳出的结构的层数。例如,break 2
示例
1 #! /bin/bash 2 #filename:a.sh 3 i=1 4 echo "Please enter the number N:" 5 read N 6 until 7 test $i -ge $N 8 do 9 if [ $i -le 4 ];then 10 echo "hello" 11 i=$(($i+1)) 12 else 13 echo "i=$i" 14 echo "world" 15 break 16 fi 17 done
continue语句
continue语句和break用法相同,用来跳过本次循环中剩余的代码。
SHELL笔记8