设为首页 收藏本站
查看: 874|回复: 0

shell控制结构

[复制链接]

尚未签到

发表于 2018-8-26 08:52:43 | 显示全部楼层 |阅读模式
  1.if语句
  if语句用于条件控制结构中,其一般格式为:
  if 测试条件
  then 命令1
  else 命令2
  fi
  其中,if、then、else和fi是关键字。例如:
  if test -f "$1"
  then echo "$1 is an ordinary file . "
  else echo "$1 is not an ordinary file . "
  fi
  应该注意,if语句中else部分可以缺省。另外,if 语句的else部分还可以是else—if结构,此时可以用关键字“elif”代替“else if”。
  通常,if的测试部分是利用test命令实现的。其实,条件测试可以利用一般命令执行成功与否来作判断。如果命令正常结束,则表示执行成功,其返回值为0,条件测试为真;如果命令执行不成功,其返回值不等于0,条件测试就为假。所以if的语句的更一般形式是:
  if 命令表1
  then 命令表2
  else 命令表3
  2.条件测试
  条件测试有三种常用形式:一种是用test命令,如上所示。另一种是用一对方括号将测试条件括起来。这两种形式是完全等价的。例如,测试位置参数$1是否 是已存在的普通文件,可写为test -f "$1"。也可写成[ -f "$1"  ]。利用一对方括号表示条件测试时,在左方括号“[”之后、右方括号“]”之前各应有一个空格。
  第三种形式是:
  [[条件表达式]]
  test命令可以和多种系统运算符一起使用。这些运算符可以分为四类:文件测试运算符(文件的属性及权限等)、字符串测试运算符(两个串是否相同及是否为空)、数值测试运算符(大小关系)和逻辑运算符(逻辑与、或、非)。
  3.case语句
  case语句允许进行多重条件选择。其一般语法形式是:
  case 字符串 in
  模式字符串1) 命令
  …
  命令;;
  模式字符串2) 命令
  …
  命令;;
  …
  模式字符串n) 命令
  …
  命令;;
  esac
  其执行过程是用“字符串”的值依次与各模式字符串进行比较,如果发现同某一个匹配,那么就执行该模式字符串之后的各个命令,直至遇到两个分号为止。如果没有任何模式字符串与该字符串的值相符合,则不执行任何命令。
  在使用case语句时应注意:
  (1)每个模式字符串后面可有一条或多条命令,其最后一条命令必须以两个分号(即;;)结束。
  (2)模式字符串中可以使用通配符。
  (3) 如果一个模式字符串中包含多个模式,那么各模式之间应以竖线(|)隔开,表示各模式是“或”的关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令表。
  (4)各模式字符串应是惟一的,不应重复出现。并且要合理安排它们的出现顺序。例如,不应将“*”作为头一个模式字符串,因为“*”可以与任何字符串匹配,它若第一个出现,就不会再检查其它模式了。
  (5)case语句以关键字case开头,以关键字esac(是case倒过来写!)结束。
  (6)case的退出(返回)值是整个结构中最后执行的那个命令的退出值。若没有执行任何命令,则退出值为零。
  4. while语句
  Shell中有三种用于循环的语句,它们是while语句、for语句和until语句。
  while语句的一般形式是:
  while 测试条件
  do
  命令表
  done
  其执行过程是,先进行条件测试,如果结果为真,则进入循环体(do—done之间部分), 执行其中命令;然后再做条件测试……直至测试条件为假时才终止while语句的执行。例如:
  while [ $1 ]
  do
  if [ -f $1 ]
  then echo "display : $1 "
  cat $1
  else echo "$1 is not a file name . "
  fi
  shift
  done
  这段程序对各个给定的位置参数,首先判断其是否是普通文件,若是,则显示其内容;否则,显示它不是文件名的信息。每次循环处理一个位置参数$1,利用shift命令可把后续位置参数左移。
  测试条件部分除使用test命令或等价的方括号外,还可以是一组命令。根据其最后一个命令的退出值决定是否进入循环体执行。
  5.until语句
  until语句的一般形式是:
  until 测试条件
  do
  命令表
  done
  它与while语句很相似,只是测试条件不同:当测试条件为假时,才进入循环体,直至测试条件为真时终止循环。
  6.for语句
  for语句是最常用的建立循环结构的语句。其使用格式主要有三种,取决于循环变量的取值方式。
  格式一:
  for 变量 in 值表
  do
  命令表
  done
  例如:
  for day in Monday Wednesday Friday Sunday
  do
  echo $day
  done
  其执行过程是,变量day依次取值表中各字符串,即第一次将“Monday”赋给day,然后进入循环体,执行其中的命令,显示出Monday。第二次将 “Wednesday”赋给day,然后执行循环体中命令,显示出Wednesday。依次处理,当day把值表中各字符串都取过一次之后,下面day的 值就变为空串,从而结束for循环。因此,值表中字符串的个数就决定了for循环执行的次数。在格式上,值表中各字符串之间以空格隔开。
  格式二:
  for 变量 in 文件正则表达式
  do
  命令表
  done
  其执行过程是,变量的值依次取当前目录下(或给定目录下)与正则表达式相匹配的文件名,每取值一次,就进入循环体执行命令表,直至所有匹配的文件名取完为止,退出for循环。
  格式三:
  for i in $* 或者 for i
  do do
  命令表 命令表
  done done
  这两种形式是等价的。其执行过程是,变量i 依次取位置参数的值,然后执行循环体中的命令表,直至所有位置参数取完为止。
  7.break命令和continue命令
  break命令可以使我们从循环体中退出来。其语法格式是:
  break [ n ]
  其中,n表示要跳出几层循环。默认值是1,表示只跳出一层循环。
  continue命令跳过循环体中在它之后的语句,回到本层循环的开头,进行下一次循环。其语法格式是:
  continue [ n ]
  其中,n表示从包含continue语句的最内层循环体向外跳到第几层循环。默认值为1。循环层数是由内向外编号。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-556601-1-1.html 上篇帖子: shell控制语句 下篇帖子: shell 监控主机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表