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

linux学习之shell的流程控制

[复制链接]

尚未签到

发表于 2018-8-29 06:17:20 | 显示全部楼层 |阅读模式
  linux学习之shell的流程控制
  ⅰ、shell之选择执行语句
  1、  用法:if CONDITION;then
  if-true-分支
  fi
  //CONDITION是if的判断语句,如果判断的结果为真,则执行if-true-分支;
  //如果判断的结果为假,则不执行
  例:
DSC0000.jpg

DSC0001.jpg

  if CONDITION;then
  if-true-分支
  else
  if-false-分支
  fi
  //CONDITION的判断结果为真,则执行if-true-分支语句;
  //如果判断的结果为假,则执行if-false-分支语句;
DSC0002.jpg

DSC0003.jpg

  2、位置参数变量
  /bin/bash bashname.sh file1 file2
  //bashname.sh的位置参数为$0
  //file1的位置参数为$1
  //以此类推......
  //file10超过10个位置参数的引用就需要${10}
  特殊变量
  $?:命令执行的结果;
  $#:传递个脚本或函数的参数个数;
  $*和$@:引用传递个脚本或函数的参数列表
DSC0004.jpg

DSC0005.jpg

  轮替:shift [n]
  3、与用户交互
  使用read命令与用户交互;
  方法:
  read [Options] chera
  [Options]
  -p "PROMPI" //提示信息
  -t timeout //超时时间
  例:
DSC0006.jpg

DSC0007.jpg

  4、命令引用
  用法: `COMMAND`,$(COMMAND)
  例子:
  echo `date`
  echo $(date)
DSC0008.jpg

DSC0009.jpg

  练习:写一个脚本,判断给定的两个数值大小,给定的数值使用脚本参数以及用户交互
#!/bin/bash  #这个脚本是通过用户交互的模式获得两个参数,然后比较大小
  read -p "请输入两个数:" -t 10 n1 n2
  if [ $n1 -ge $n2 ];then
  echo "Max num: $n1, Min num: $n2"
  else
  echo "Max num: $n2, Min num: $n1"
  fi
DSC00010.jpg

DSC00011.jpg

  ⅱ、循环语句:
  循环式将循环体执行0或多次:
  需要循环必须满足进入条件
  如要推出必须满足推出条件
  使用for while 以及until都可以完成循环语句的控制
  1、for语句
  用法
  for VARIABLE in LIST;do
  循环体
  done
  LIST:是有一个或多个空格分割的字符串组成,把列表的每个字符串逐个赋值给VARIABLE表示的变量
  例:
for username in usera userb userc used;do  useradd $username
  echo "Add $username finished"
  done
  //此循环的进入条件是list不为空
  //推出条件是list遍历结束,即添加完userc用户
  练习:请添加10个用户
#!/bin/bash  #添加10个用户
  for username in user1 user2 user3 user4 user5 user6 user7 user8 user9 user10;do
  useradd $username
  echo "Add $username finished"
  done
DSC00012.jpg

DSC00013.jpg

  2、LIST的生成方法:
  1)、整数列表:
  a)、{start..end}//生成指定开始和结束段的整数表
  b)、$(seq [start [step]] end)//生成指定开始并以step(一个步进值)步进到结束值的数值表
  例:
DSC00014.jpg

DSC00015.jpg

  2)、直接给出列表
  3)、glob
  例:
DSC00016.jpg

  4)、命令生成
  例:
[root@pizi ~]# bash a.sh  root primary group: root
  bin primary group: bin
  daemon primary group: daemon
  adm primary group: adm
  lp primary group: lp
  sync primary group: root
  shutdown primary group: root
  halt primary group: root
  mail primary group: mail
  uucp primary group: uucp
  operator primary group: root
  games primary group: users
  gopher primary group: gopher
  ftp primary group: ftp
  nobody primary group: nobody
  dbus primary group: dbus
  usbmuxd primary group: usbmuxd
  vcsa primary group: vcsa
  rpc primary group: rpc
  rtkit primary group: rtkit
  avahi-autoipd primary group: avahi-autoipd
  abrt primary group: abrt
  rpcuser primary group: rpcuser
  nfsnobody primary group: nfsnobody
  haldaemon primary group: haldaemon
  gdm primary group: gdm
  ntp primary group: ntp
  saslauth primary group: saslauth
  postfix primary group: postfix
  apache primary group: apache
  pulse primary group: pulse
  webalizer primary group: webalizer
  tomcat primary group: tomcat
  sshd primary group: sshd
  tcpdump primary group: tcpdump
  usera primary group: usera
  userb primary group: userb
  userc primary group: userc
  hadoop primary group: hadoop
  usertest primary group: usertest
  testuser1 primary group: testuser1
  named primary group: named
  user1 primary group: user1
  user2 primary group: user2
  user3 primary group: user3
  user4 primary group: user4
  user5 primary group: user5
  user6 primary group: user6
  user7 primary group: user7
  user8 primary group: user8
  user9 primary group: user9
  user10 primary group: user10
  [root@pizi ~]#
DSC00017.jpg

  3、算术运算符
  + - * / % **(次方)
  数值的几种运算方式
  (1) $[$A+$B]
  (2) $(($A+$B))
  (3) let VARIABLE=$A+$B
  (4) VARIABLE=$(expr $A + $B)
  例:求100以内的所有正整数的和
#!/bin/bash  #求100以内正整数的和
  let sum=0
  for i in {1..100};do
  sum=$[$sum+$i]
  done
  echo "100以内正整数的和是:$sum"

  4、增强型赋值
  即表示变量通过加减1或者乘除自己的值来改变
  += -+ *= /= 等
  如 let num++  表示在num这边变量的数值上加1,然后将运算后得到的数值在赋个num
  let num++ 等效 let num=$[$num+1]
  例:
#!/bin/bash  #显示etc目录下所有普通文件的列表,然后统计个数
  declare -i count=0
  for file in /etc/*; do
  if [ -f $file ]; then
  let count++
  echo "$count $file"
  fi
  done
  echo "Total: $count files."
DSC00018.jpg

DSC00019.jpg

  5、测试表达式
  整数测试
  字符串测试
  注意:
  (1) 字符串等会比较测试:[ "$hostname" == 'localhost'  ]
  (2) 模式匹配测试:[[ "STRING" =~ PATTERN ]]
  //表示左侧的字符串能否被右侧的模式匹配 必须使用在双中括号中且前后有空格
  (3) 与的优先级高于或的优先级
  组合测试条件:
  条件间逻辑运算:
  与:多个条件要同时满足;
  或:多个条件满足其一即可;
  非:对指定的条件取反;
  表达式组合:
  与:` CONDITION1 -a CONDITION2 `
  或:` CONDITION1 -o CONDITION2 `
  非:[ ! CONDITION ]
  命令组合:
  与:COMMAND1 && COMMAND2

运维网声明 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.yunweiku.com/thread-557851-1-1.html 上篇帖子: Shell脚本编程小结 下篇帖子: 【shell基础】07、bash脚本编程入门及变量
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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