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

shell脚本结构、date命令、变量

[复制链接]

尚未签到

发表于 2018-8-20 07:36:16 | 显示全部楼层 |阅读模式
  20.5 Shell脚本中的逻辑判断
  逻辑表达式
  在[ ]中括号中:
  -lt:=little than 小于
  -le:=little && equal 小于等于
  -eq:=equal 等于
  -ne:=no equal 不等于
  -gt:=greater than 大于
  -ge:=greater && equal 大于等于
  在(( ))小括号中:
  =
  注意: 使用双括号括起来
  格式1
  if 条件 ;then commond;fi
  eg:
  #!/bin/bash
  a=5
  if [ $a -gt 3 ]
  #注意[]内的空格
  then
  echo "ok"
  fi
  格式2
  if 条件1;then commond1;else commond2;fi
  eg:
  #!/bin/bash
  a=5
  if [ $a -gt 3 ]
  #注意[]内的空格
  then
  echo "ok"
  else
  echo "fault"
  fi
  格式3
  if 条件1;then commond1;elif 条件2;then commond2;else commond3;fi
  eg:
  #!/bin/bash
  a=5
  if [ $a -lt 3 ]
  #注意[]内的空格
  then
  echo "a6"
  else
  echo "Out of the zone"
  fi
  关系
  各个条件之间的关系可以使用逻辑连接符:
  条件A&&条件B:并且
  条件A||条件B:或者
  20.6 文件目录属性判断
  shell脚本中if经常用于判断文档的属性,比如判断是普通文件还是目录文件,判断文件是否有读、写、执行权限等。if常用的选项有以下几个:
  -e:判断文件或目录是否存在
  -d:判断是不是目录文件以及是否存在
  -f:判断是不是普通文件以及是否存在
  -r:判断是否有读权限
  -w:判断是否有写权限
  -x:判断是否有执行权限
  格式
  如果某文件存在:
  if [ -e filename ]
  then
  commond
  fi
  以上命令可简化为:
  [ -e filename ] && commond
  &&前后的命都执行
  或:
  [ -e filename ] || commond
  当 || 前面的执行成功后再执行后面的命令
  如果某文件不存在:
  if [ ! -e filename ]
  then
  commond
  fi
  “!”等同于取反。
  20.7 if 特殊用法
  if [ -z "$a" ]:表示当变量a的值为空时会怎样
  if [ -n "$a" ]:表示当变量a的值不为空时会怎样
  -z和-n为相反的两个反条件。
  eg:
  #!/bin/bash
  n=wc -l /tmp/test.txt
  if [ $n -gt 20 ]
  then
  echo 1
  else
  echo 0
  fi
  在该脚本中无语法错误,只是我们预设/tmp/test.txt是存在的,如果该文件不存在,该脚本执行的时候就会报错:
  [root@localhost sbin]# sh  if.sh
  wc: /tmp/test.txt: 没有那个文件或目录
  if.sh: 第 3 行:[: -gt: 期待一元表达式
  所以,为了避免这种错误的发生,需要将脚本写的更加严谨,需要在执行“if [ $n -gt 20 ]”之前先确认文件“/tmp/test.txt”是否存在:
  #!/bin/bash
  n=wc -l /tmp/test.txt
  if [ -z $n ]
  then
  echo "error"
  exit
  elif [ $n -lt 20 ]
  then
  echo 1
  else
  echo 0
  fi
  即,如果变量n为空则显示error并退出该脚本。
  [root@localhost sbin]# sh  if.sh
  wc: /tmp/test.txt: 没有那个文件或目录
  error
  即,当该文件不存在的时候就会退出执行,不会提示存在语法错误。(该脚本存在逻辑错误,只做效果演示用)
  注意: 在该表达式中引用变量时要用双引号引起来。
  if grep '123' test.txt;then:表示当test.txt中含有123是会怎样
  eg:
  判断某参数存在:
  [root@localhost sbin]# vim if1.sh
  #!/bin/bash
  if
  grep -wq 'user1' /etc/passwd
  then
  echo "user1 exist."
  fi
  [root@localhost sbin]# sh if1.sh
  判断某参数不存在:
  [root@localhost sbin]# vim if2.sh
  #!/bin/bash
  if
  ! grep -wq 'user1' /etc/passwd
  then
  echo "no user1"
  fi
  [root@localhost sbin]# sh if2.sh
  no user1
  说明: grep中-w选项=Word,表示过滤一个单词;-q,表示不打印过滤的结果。判断某参数不存在时使用!表示取反。
  20.8-20.9 case判断
  格式:
  case 变量名 in
  value1)
  commond1
  ;;
  value2)
  commod2
  ;;
  value3)
  commod3
  ;;
  esac
  在case中,可以在条件中使用“|”,表示或的意思,如:
  2|3)
  commond
  ;;
  eg:
  [root@localhost sbin]# vim case1.sh
  #!/bin/bash
  read -p "Please input a number: " n
  if [ -z "$n" ]
  then
  echo "Please input a number."
  exit 1
  #“exit 1”表示执行该部分命令后的返回值
  #即,命令执行完后使用echo $?的值
  fi
  n1=echo $n|sed 's/[0-9]//g'
  #判断用户输入的字符是否为纯数字
  #如果是数字,则将其替换为空,赋值给$n1
  if [ -n "$n1" ]
  then
  echo "Please input a number."
  exit 1
  #判断$n1不为空时(即$n不是纯数字)再次提示用户输入数字并退出
  fi
  如果用户输入的是纯数字则执行以下命令:
  if [ $n -lt 60 ] && [ $n -ge 0 ]
  then
  tag=1
  elif [ $n -ge 60 ] && [ $n -lt 80 ]
  then
  tag=2
  elif [ $n -ge 80 ]  && [ $n -lt 90 ]
  then
  tag=3
  elif [ $n -ge 90 ] && [ $n -le 100 ]
  then
  tag=4
  else
  tag=0
  fi
  #tag的作用是为判断条件设定标签,方便后面引用
  case $tag in
  1)
  echo "not ok"
  ;;
  2)
  echo "ok"
  ;;
  3)
  echo "ook"
  ;;
  4)
  echo "oook"
  ;;
  *)
  echo "The number range is 0-100."
  ;;
  esac
  说明: 该脚本的作用是输入考试成绩,判断考试成绩的等级。
  执行结果:
  [root@localhost sbin]# sh case1.sh
  Please input a number: 90
  oook
  [root@localhost sbin]# sh case1.sh
  Please input a number: 80
  ook
  [root@localhost sbin]# sh case1.sh
  Please input a number: 60
  ok
  [root@localhost sbin]# sh case1.sh
  Please input a number: 55
  not 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.iyunv.com/thread-554015-1-1.html 上篇帖子: 第八章 Linux Shell基础 下篇帖子: hbase shell中disable 和drop无法执行
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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