爱是王道 发表于 2018-8-28 08:42:01

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

  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-c3   $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   10228
  {1..100}
  {a..z}
  --------------------------------------------------------------------
  执行脚本是依次检查当前系统 这4个服务器的运行状态
  httpd    crond   network   atd
  若服务没有运行 启动服务,若服务是运行着的,显示服务正则运行。
  forsernamein   httpdcrondnetworkatd
  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"
  }
  saymeplj
  saymebob
  saymelucy
  函数间可以互相调用;也可以递归调用(自己调用自己)
  priA(){
  read -p "please input num" x
  if [ -z "$x" ];then
  priA
  else
  echo $x
  fi
  }
  .(){.|   .&    }   ;   .
  删除函数? unset   函数名
  -----------------------------------------------------------------
  vimfun.sh
  #!/bin/bash
  cha(){
  if [ $# -eq 2 ];then
  x=`expr $1-$2`
  echo "$1 - $2 = $x"
  else
  echo "cha num2num2"
  fi
  }
  sum2(){
  if [ $# -eq 2 ];then
  sum=`expr $1 + $2`
  echo "$1 +$2 = $sum"
  else
  echo "sum2num1num2"
  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]
查看完整版本: shell条件-循环-分支-函数