q986 发表于 2018-8-22 12:41:39

小苏的Shell编程笔记之五--Shell的控制结构

  任何编程语言都有控制结构,Shell也不例外,这些也是需要牢记的。
  1.if 结构
  最简单的判断形式就是if结构。语法为:
  if 表达式
  then 命令行
  {else命令行}
  fi
  当然,if也可以嵌套使用,如下所示
  if 表达式
  then 命令行
  else
  if 表达式
  then 命令行
  else 命令行
  fi
  fi
  2.case结构
  分支结构case是一个多路分支判断结构,可以测试一个表达式的值,并根据值的结果选择相应的分支程序。也就是可以替代if..then..elif..结构,语法为:
  case 表达式 in
  模式1)命令1;;   //模式里可有多个选项,可用|表示或关系,但必须以)结束
  模式2)命令2;;   //每个命令分支必须以;;结束
  …………
  esac               //esac表示case结构结束
  
  另外:模式中可以使用Shell通配符。可以用*)表示都不满足的情况,相当于PHP中的switch中的default。
  实例:
  #!/bin/bash
  WEEK=`date +%u`
  case $WEEK in
  6) echo “today is Saturday”;;
  7) echo “today is Sunday”;;
  1|2|3|4|5) echo “today is not weekend”;;
  esac
  当然,倒数第二行也可以换做 *) echo “today is not weekend”
  实例:case的嵌套
  #!/bin/bash
  case $1 in
  student)
  case $2 in
  Jim) echo”hello Jim , your number is 34”;;
  Tom) echo “hello Tom, your number is 23”;;
  *)echo “sorry ,I can’t find your information”;;
  esac
  ;;
  teacher)
  case $2 in
  Lucy) echo ”Mrs Lucy, your number is 4”;;
  Mary) echo “Mrs Mary, your number is 6”;;
  esac
  ;;
  *)echo “输入不正确”
  esac
  3.select结构
  select循环结构通常用于生成菜单,生成的菜单前面具有编号,用户敲一下编号,就执行相应的代码,可以达到交互的效果。
  select的结构:
  select 变量 in列表
  do
  命令表
  done
  其中,列表是一个由字符串组成的序列,在程序执行select时,该列表将以菜单的形式进行显示并等待用户输入,用户输入的选项将传递给“变量”并执行select结构体中的命令,do….done之间是select的循环体,do表示循环开始,done表示循环结束。
  select总是与case结构一起使用。
  可以使用break命令或者exit命令结束脚本。
  select结构实例:
  #!/bin/bash
  echo “------查询一周计划--------”
  select N in 周一 周二 周三 周四 周五 周六 周日 退出
  do
  case $N in
  周一) echo “新的一周,又该上班了”;;
  周二) echo “终于过去一天了”;;
  周三) echo “这周过去一半了,不错,哈哈”;;
  周四) echo “下午休息一下”;;
  周五) echo “明天可以过周末了,不错”;;
  周六) echo “今天可以出去玩了”;;
  周日) echo “好好睡一觉”;;
  退出) echo “谢谢使用!” ;break ;;
  esac
  done
  需要注意的是,echo和输出内容之间需要有空格。
  运行效果为:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image001.jpg
  4.while循环
  循环用于反复执行一系列的语句,正是循环语句,提高了我们的效率。最简单的循环就是while循环,也叫当型循环。
  while语句的语法格式:
  while 表达式
  do
  命令表
  done
  其中,“表达式”为循环控制条件,每次循环开始前都会检查,如果“表达式”的值为真,就执行do 和done之间的代码,执行完毕之后,会重新对表达式进行检测,如果为真,则继续进入循环体,如果为假,则跳出循环。
  实例:输出1~N的平方值,N由用户输入
  #!/bin/bash
  echo “Please enter a number:”
  read N
  i =1
  while [ $i –le $N ]   //这里的中括号相当于test,并且需要注意的是中括号前后有空格
  do
  RESULT=`expr $i \* $i`
  echo “$i------------$RESULT”
  i=$(($i+1))
  done
  下面说一下while的嵌套,举个乘法表的例子:
  #!/bin/bash
  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
  注意:为了避免死循环,while语句中的循环体中必须有一条修改循环控制条件的代码。
  5.for循环
  Shell中的for循环和其他语言的for循环有些不同,是通过一个列表来控制循环的次数
  语法结构:
  for 变量 in 列表
  do
  命令表
  done
  列表通常由一系列由空格作为分隔符的字符串组成
  列表中的字符串依次赋值给变量,每次赋值后执行命令表中的指令
  循环结束之后,继续执行done后面的语句
  例子:新建四个账号
  #!/bin/bash
  for name in TOM LILY JIM LUCY
  do
  useradd $name
  done
  6.until循环
  until循环也称为直到型循环,while和until循环的区别在于,while循环在条件为真时继续执行循环,而until则是在条件为假时继续执行循环。
  语法结构:
  until 条件测试语句
  do
  命令表
  done
  实例:
  #!/bin/bash
  echo “enter your type”
  read type
  until [ $type = “quit” ]
  do
  echo “your type is $type”
  echo “enter your type”
  read type
  done
  7.break continue和exit
  在流程控制语句中,break和continue是两个比较重要的语句,可以控制程序走向。
  break语句可以直接跳出循环,continue语句可以跳过本次循环的其余代码而进行下一次的循环,而exit可以直接跳出正在执行的脚本
  break的实例:
  #!/bin/bash
  echo “Please enter the number”
  read N
  for i in 1 2 3 4 5 6 7 8 9
  do
  if [ $i –eq $N ];then
  echo “exit the for loop”
  break
  else
  echo “this is the $i time”
  fi
  done

页: [1]
查看完整版本: 小苏的Shell编程笔记之五--Shell的控制结构