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

Shell笔记之三for、while及case

[复制链接]

尚未签到

发表于 2018-8-29 14:07:52 | 显示全部楼层 |阅读模式
  第三章Shell for、while及case
  For语句语法如下
  for 变量名 in 取值列表
  do
  命令序列
  Done
  案例,根据姓名列表创建用户
  [root@localhost ~]# vim /root/users.txt
  jerry
  tom
  xiaoming
  [root@localhost ~]# vim shelltest/usersadd.sh
  #!/bin/bash
  ULIST=$(cat /root/users.txt)
  for UNAME in $ULIST
  do
  useradd $UNAME
  echo "123456"| passwd --stdin$UNAME
  done
  使用while循环语句
  While循环语句语法结构
  while 条件测试操作
  do
  命令序列
  done
  案例
  批量添加规律编号用户
  [root@localhost ~]# vimshelltest/useraddwhile.sh
  #!/bin/bash
  USERS="work"
  i=1
  while [ $i -le 5 ]
  do
  useradd ${USERS}$i
  echo "123456"|passwd --stdin${USERS}$i &> /dev/null
  let i++
  done
  "shelltest/useraddwhile.sh" [新] 9L, 139C 已写入
  [root@localhost ~]# shshelltest/useraddwhile.sh
  [root@localhost ~]# tail -5 /etc/passwd
  work1:x:500:500::/home/work1:/bin/bash
  work2:x:501:501::/home/work2:/bin/bash
  work3:x:502:502::/home/work3:/bin/bash
  work4:x:503:503::/home/work4:/bin/bash
  work5:x:504:504::/home/work5:/bin/bash
  case分支语句
  case语句主要适用以下情况:某个变量存在多种取值,需要对其中的每一种取值分别进行不同的命令序列。
  语法结构如下
  case 变量值 in
  模式1)
  命令序列1
  ;;
  模式2)
  命令序列2
  ;;
  *)
  默认命令序列
  esac
  使用case分支语句时,要注意以下几点
  case行尾必须为单词“in”每一模式必须以右括号“)”结束
  双分号“;;”表示命令序列的结束
  模式字符串中,可以用方括号表示一个连续的范围,例如“[0-9]”也可用”|”表示如“A|B”
  最后的“*)”表示默认模式,其中的*相当于通配符。
  案例
  检查用户输入的字符类型
  [root@localhost ~]# vimshelltest/typeselect.sh
  #!/bin/bash
  read -p " 请输入一个字符,并按Enther确认:" C
  case $C in
  [0-9])
  echo "您输入的是数字$C"
  ;;
  [a-z]|[A-Z])
  echo "您输入的是字母$C"
  ;;
  *)
  echo "您输入的是空格、功能键或其它控制字符$C"
  esac
  "shelltest/typeselect.sh" 12L, 253C已写入
  [root@localhost ~]# shshelltest/typeselect.sh
  请输入一个字符,并按Enther确认:5
  您输入的是数字5
  案例二编写系统服务脚本
  [root@localhost ~]# vim shelltest/myprog
  #!/bin/bash
  case "$1" in
  start)
  echo -n "正在启动sleep服务..."
  if `sleep 5` ; then
  echo "OK"
  fi
  ;;
  stop)
  echo -n "正在停止sleep服务..."
  pkill "sleep"&>/dev/null
  echo "OK"
  ;;
  status)
  if pgrep "sleep"&> /dev/null ;then
  echo "sleep服务以经启动"
  else
  echo "sleep服务以经停止"
  fi
  ;;
  restart)
  $0 stop
  $0 start
  ;;
  *)
  echo "用法:$0{start|stop|status|restart}"
  esac
  ~
  ~
  ~
  [root@localhost ~]# ./shelltest/myprogrestart
  正在停止sleep服务...OK
  正在启动sleep服务...OK


运维网声明 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-558259-1-1.html 上篇帖子: shell发短信和邮件 下篇帖子: 游戏发展史(Shell数字游戏)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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