Shell的控制结构l列表

来源:互联网 发布:slam 单片机 编辑:程序博客网 时间:2024/05/21 11:26

Shell的控制结构

1.if结构

if结构的简写的语法格式

if 表达式 ; then 命令表

[else 命令表 ]

fi

其中:表达式是判断条件,为真时执行then的命令表,else可以省略,fi表示if结构结束。

多层嵌套时建议使用缩进格式。

if嵌套示例yesno:

chen@chen-PC /cygdrive/d/test
$ cat yesno
#!/bin/bash
#filename:yesno
a=$1
if [ $a = "yes" -o $a = "YES" ] ; then
  echo "your argument is YES !"
else
 if [ $a = "NO" -o $a = "no" ] ; then
    echo "your argument is no !"
 else
    echo "error argument!"
  fi
fi

2.case结构

分支结构case是一个多路分支判断结构。

语法结构:

case 表达式 in

  模式11 [|模式12]...) 命令表1;;

  模式21 [|模式22]...) 命令表1;;

  ...

                              *) 命令表n;;

esac

其中:

  • “表达式”是判断条件,通常是一个变量名称。
  • 每一分支的模式,可以有多个,但必须以)结尾。
  • 命令表可以是一个或多个命令。
  • 每一分支以;;表示该分支结束
  • 分支*)表示前面所有可能的匹配都不满足时的处理方式。
  • esac表示case结构结束。
  • 模式中使用|,表示各个模式之间是“或”关系
  • 模式中可以使用通配符

score示例:

chen@chen-PC /cygdrive/d/test
$ cat score.sh
#!/bin/bash
#filename:score
echo "请输入您的成绩:"
read SCORE
CONVERT=` expr $SCORE / 10 `
echo "-----------------"
case $CONVERT in
9)echo "恭喜!优秀";;
8)echo "良好";;
7)echo "中等";;
6)echo "几个";;
1|2|3|4|5)echo "不及▒";;
*)echo "输入错误";;
esac

3.select结构

select结构将在屏幕上生成一个数字化的菜单,并提示用户进行选择,默认的提示符为#。

select结构是一种循环,需要使用break退出循环,或者exit结束脚本。

select语法格式:

select 变量 in 列表

do 

  命令表

done

显示一周的日程安排示例:

chen@chen-IdeaPad-Y430:~/test$ cat selects 
#!/bin/bash
#filename:selects
echo "----查询一周计划---------"
select N in 周一 周二 周三 周四 周五 周六 周日
do
 case $N in
周一) echo "工作日";;
周二) echo "下午休息";;
周三) echo "工作日";;
周四) echo "晚上还要加班";;
周五) echo "晚上有party";;
周六) echo "加半天班";;
周日) echo "休息日";;
*) echo "选择有误!"
 break;;
 esac
done

4.while循环

在无法确定循环的具体次数时,使用while循环语句;当确切知道循环需要执行的次数时,一般采用for循环。

while的基本结构:

while  表达式

do

  命令表

done

为了避免死循环,循环体中至少要有一行修改while循环控制条件的代码。

while嵌套的示例99:

chen@chen-IdeaPad-Y430:~/test$ cat 99
#!/bin/bash
#filename:99
i=1
while [ $i -le 9 ]
do
 j=1
 while [ $j -le $i ]
 do
  RESULT=` expr $j \* $i `
  echo -n "$j*$i=$RESULT "
  j=$(($j+1))
 done
 echo " "
 i=$(($i+1))
done

输出99乘法表

5.for循环

语法格式:

for 变量 [ in 列表 ]

do

   命令表

done

其中:

  • 列表由以空格为分隔的字符串组成
  • “列表”中的字符串依次赋值给“变量”,每次赋值后将执行“命令表”中的命令。
  • 如果省略了“in 列表”,则for会将当前执行脚本的每个位置参数作为“列表”即“for 变量”隐含表示“for 变量 $@“。

读入一组数字计算乘积的示例:

chen@chen-IdeaPad-Y430:~/test$ cat multi 
#!/bin/bash
#filename:multi
echo "请输入计算乘积的数字: "
read VAL
RESULT=1
for I in $VAL
do
 RESULT=` expr $RESULT \* $I `
done
echo "计算的结果为:$RESULT "

6.until下

until具有特殊的执行顺序,适合编写菜单程序。语法结构如下:

until

    命令表1

test 表达式

do

    命令表2

done

其中:命令表1在循环开始前执行,且在每次循环结束后,再次执行。

读入N值,计算1~N的平方值untilN:

chen@chen-IdeaPad-Y430:~/test$ cat untilN 
#!/bin/bash
#filename:untilN
i=1
echo "请输入N值: "
read N
until
test $i -gt $N
do
 RESULT=` expr $i \* $i `
 echo "$i-------$RESULT"
 i=$(($i+1))
done

7.break和continue语句

使用break语句可以退出循环,使用continue语句可以跳过本次循环中剩余的代码,继续下一次的循环。

两个语句都接受一个数字来决定跳出几层循环。

chen@chen-IdeaPad-Y430:~/test$ cat break2 
#!/bin/bash
#filename:break
i=1
while [ $i -lt 10 ]
do
  echo "---外层第$i次循环---"
  j=1
  while [ $j -lt 10 ]
  do
    if [ $j -eq 5 ]; then
    break 2   #跳出2层循环
    fi
    echo "---内层第$j次循环---"
    j=$(($j+1))
  done
  if [ $i -eq 2 ]; then
    break
  fi
  i=$(($i+1))
done

输入N,输出小于N的奇数:

chen@chen-IdeaPad-Y430:~/test$ cat continues 
#!/bin/bash
#filename:continues
echo "输入N值,显示小于N的奇数:"
read N
echo "-------------------------------"
i=0
while [ $i -lt $N ]
do
 RESULT=` expr $i \% 2 `
 i=$(($i+1))
 if [ $RESULT -ne 0 ]; then
  continue
 fi
 echo "$i"
done












0 0