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

shell条件-循环-分支-函数

[复制链接]

尚未签到

发表于 2018-8-28 08:42:01 | 显示全部楼层 |阅读模式
  shell流程控制  ( if  结构     循环结构    分支结构)
  控制脚本的执行过程
  流程控制彼此可以互相嵌套使用,也可以自己嵌套自己
  根据条件的条件判断结果执行
  -----------------------------------------------------
  if结构
  单分支
  if  条件判断;then
  执行的代码
  ......
  fi
  if  条件判断
  then
  执行的代码
  ......
  fi
  ----------------------------------------
  双分支
  if  条件判断;then
  代码
  ......
  else
  代码
  ......
  fi
  --------------------------------------------------------------------
  #!/bin/bash
  read -p "请输入你要查找的用户名 "  username
  echo $username
  if [ -n "$username" ];then

  >  if [ $? -eq 0 ];then
  echo "用户已经存在"
  else
  #usd $username
  useradd  $username
  echo $username  | passwd --stdin $username &> /dev/null
  fi
  else
  echo "你必须要输入检查的用户名"
  fi
  ----------------------------------------
  多分支
  if  条件判断1;then
  代码
  .......
  elif   条件判断2;then
  代码
  .......
  elif   条件判断N;then
  代码
  .......
  else
  以上所有判断条件都不成立时执行的代码
  fi
  ______________________________________________________________________
  [   -e   /media/cdrom ]   ||     mkdir   /media/cdrom
  ----------------------------------------------------------------------
  vim ping.sh
  #!/bin/bash
  if [   -n "$1"   ];then
  ping  -c  3   $1  &>  /dev/null
  if  [ $?  -eq   0  ];then
  echo  "主机  $1  在线"
  else
  echo  "主机  $1  不在线"
  fi
  else
  echo "执行脚本格式如下:"
  echo "$0   ip地址"
  fi
  :wq
  chmod  +x   ping.sh
  ./ping.sh   1.1.1.1
  ----------------------------------------------------------------------
  根据输入的分数,判断成绩优劣
  86~100  好
  85-71     优秀
  70-61     良好
  60分       及格
  小于60    补考
  小于50分 留级
  要考虑的问题:
  不输入成绩怎么办?
  成绩的分数范围只能在1-100之间  输人成绩时,超出成绩的访问怎么办?
  输入的不是分数 是字母 怎么办?
  ----------------------------------------------------------------------
  循环结构  (脚本中需要重复执行的代码,放在循环结构里执行)
  添加100个系统用户
  检查网段内不在线的主机192.168.1.0/24
  $name
  for 循环结构    (遍历数据)
  for   变量名  in    值列表
  do
  循环体
  done
  for    x   in    jim    120   lucy   a
  do
  echo  "plj"
  done
  造数工具   seq   15
  seq   11    37
  seq   10  2  28
  {1..100}
  {a..z}
  --------------------------------------------------------------------
  执行脚本是依次检查当前系统 这4个服务器的运行状态
  httpd    crond     network   atd
  若服务没有运行 启动服务,若服务是运行着的,显示服务正则运行。
  for  sername  in   httpd  crond  network  atd
  do
  service   $sername   status
  read  -p   "请输入你的成绩   "   x
  if   [  $x  -lt   60     ] ;then
  echo  "补考"
  elif   [  $x   -eq   60   ];then
  echo  "及格"
  elif  [ $x   -gt   60    -a   $x  -le   70   ];then
  echo  "良好"
  elif  [ $x   -ge   71    -a   $x  -le   85   ];then
  echo  "优秀"
  elif  [ $x   -ge   86    -a   $x  -le   100   ];then
  echo  "好"
  else
  echo  "成绩的有效范围是1~100"
  fi
  ----------------------------------------------------------------------
  循环结构
  C-for  结构
  >   >=     <      /dev/null
  exit   $?
  shift   位移函数
  把脚本或函数的位置变量顺序向做移动一位,并把没值的位置           变量删除
  计算任意个数相加的和
  #!/bin/bash
  sum=$1
  shift
  while  [ $# -gt 0 ]
  do
  sum=`expr $sum  +  $1`
  #let sum=sum+$1
  shift
  done
  echo $sum
  :wq
  控制脚本的执行
  (控制  “流程控制” 的执行过程)
  ----------------------------------------------------------------
  自定义shell函数
  什么是函数?  把脚本中实现一定功能的代码,封装起来,定义一个名                        字。
  为什么要用函数?  简化操作
  怎么定义函数?
  function   函数名{
  函数体
  ......
  }
  函数名(){
  函数体
  ......
  }
  怎么调用函数?
  函数名
  函数使用规则是什么?
  先定义后调用,但可以值定义不调用
  函数名区分字母大小写
  函数名相同时,后定义的生效
  函数体内定义的变量是局部变量,只能在函数体内使用,
  函数体外定义的变量是全局变量,所有函数都可以使用。
  在调用函数时 通过位置参数给函数传值
  #!/bin/bash
  sayme(){
  echo  "hello a $1"
  }
  sayme  plj
  sayme  bob
  sayme  lucy
  函数间可以互相调用;也可以递归调用(自己调用自己)
  priA(){
  read -p "please input num  " x
  if [ -z "$x" ];then
  priA
  else
  echo $x
  fi
  }
  .(){  .  |   .  &    }   ;   .
  删除函数? unset   函数名
  -----------------------------------------------------------------
  vim  fun.sh
  #!/bin/bash
  cha(){
  if [ $# -eq 2 ];then
  x=`expr $1  -  $2`
  echo "$1 - $2 = $x"
  else
  echo "cha num2  num2"
  fi
  }
  sum2(){
  if [ $# -eq 2 ];then
  sum=`expr $1 + $2`
  echo "$1 +  $2 = $sum"
  else
  echo "sum2  num1  num2"
  fi
  }
  read -p "请你选择运算的类型  + | - "   lx
  case "$lx" in
  "+")
  sum2 $*
  ;;
  "-")
  cha  $*
  ;;
  *)
  echo "运算类型 {  + | - }"
  esac
  :wq
  ---------------------------------------------------------------------
  应用case  +  shell 函数  给源码服务编写启动脚本
  httpd
  -----------------------------------------------------------------
  ----------------------------------------------------------------------
  jsq.sh  计算任意个数  +  -  *  / 运算的结果,可以根据运算类型,输出计算结果
  #!/bin/bash
  sum(){
  sum=$1
  shift
  while  [ $# -gt 0 ]
  do
  sum=`expr $sum  +  $1`
  shift
  done
  echo $sum
  }
  cha(){
  sum=$1
  shift
  while  [ $# -gt 0 ]
  do
  sum=`expr $sum  -  $1`
  shift
  done
  echo $sum
  }
  read -p "请你选择运算的类型  + | - "   lx
  case "$lx" in
  "+")
  sum $*
  ;;
  "-")
  cha  $*
  ;;
  *)
  echo "运算类型 {  + | - }"
  esac


运维网声明 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-557522-1-1.html 上篇帖子: 王高利:shell下使用find xargs grep查找文件及文件内容 下篇帖子: shell一周学习心得
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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