博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell逻辑判断、文件属性判断、if特殊用法、case判断
阅读量:6954 次
发布时间:2019-06-27

本文共 3481 字,大约阅读时间需要 11 分钟。

hot3.png

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/basha=5if [ $a -gt 3 ]#注意[]内的空格then    echo "ok"fi

格式2

if 条件1;then commond1;else commond2;fi

eg:

#!/bin/basha=5if [ $a -gt 3 ]#注意[]内的空格then    echo "ok"else    echo "fault"fi

格式3

if 条件1;then commond1;elif 条件2;then commond2;else commond3;fi

eg:

#!/bin/basha=5if [ $a -lt 3 ]#注意[]内的空格then    echo "a<3"elif [ $a -gt 6 ]then    echo "a>6"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    commondfi

以上命令可简化为:

[ -e filename ] && commond&&前后的命都执行或:[ -e filename ] || commond当 || 前面的执行成功后再执行后面的命令

如果某文件不存在:

if [ ! -e filename ]then    commondfi

“!”等同于取反。

20.7 if 特殊用法

  • if [ -z "$a" ]:表示当变量a的值为空时会怎样
  • if [ -n "$a" ]:表示当变量a的值不为空时会怎样

-z和-n为相反的两个反条件。

eg:

#!/bin/bashn=`wc -l /tmp/test.txt`if [ $n -gt 20 ]then    echo 1else    echo 0fi

在该脚本中无语法错误,只是我们预设/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/bashn=`wc -l /tmp/test.txt`if [ -z $n ]then    echo "error"    exitelif [ $n -lt 20 ]then    echo 1else    echo 0fi

即,如果变量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/bashif     grep -wq 'user1' /etc/passwdthen    echo "user1 exist."fi[root@localhost sbin]# sh if1.sh 判断某参数不存在:[root@localhost sbin]# vim if2.sh#!/bin/bashif     ! grep -wq 'user1' /etc/passwdthen    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/bashread -p "Please input a number: " nif [ -z "$n" ]then    echo "Please input a number."    exit 1#“exit 1”表示执行该部分命令后的返回值#即,命令执行完后使用echo $?的值fin1=`echo $n|sed 's/[0-9]//g'`#判断用户输入的字符是否为纯数字#如果是数字,则将其替换为空,赋值给$n1if [ -n "$n1" ]then echo "Please input a number." exit 1#判断$n1不为空时(即$n不是纯数字)再次提示用户输入数字并退出fi如果用户输入的是纯数字则执行以下命令:if [ $n -lt 60 ] && [ $n -ge 0 ]then    tag=1elif [ $n -ge 60 ] && [ $n -lt 80 ]then    tag=2elif [ $n -ge 80 ]  && [ $n -lt 90 ]then    tag=3elif [ $n -ge 90 ] && [ $n -le 100 ]then    tag=4else    tag=0fi#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: 90oook[root@localhost sbin]# sh case1.sh Please input a number: 80ook[root@localhost sbin]# sh case1.sh Please input a number: 60ok[root@localhost sbin]# sh case1.sh Please input a number: 55not ok

转载于:https://my.oschina.net/adailinux/blog/1537016

你可能感兴趣的文章
深入java单例模式
查看>>
create-react-app
查看>>
20170812-XSS跨站脚本攻击
查看>>
Let’s Build |> 使用Elixir,Phoenix和React打造克隆版的Slack(part 1)
查看>>
如何让 StackNaivgator 实现越级回跳
查看>>
工具简述
查看>>
Hbase 集群搭建
查看>>
分布式文件服务器dfs
查看>>
正则表达式
查看>>
关于直播视频格式和浏览器兼容性历史的来龙去脉
查看>>
是的,InfoQ正在招聘技术编辑!跟对的人,一起做喜欢的事!
查看>>
vue2+vue-cli,dis文件加载出错解决方案
查看>>
立下“去O”Flag的AWS,悄悄修炼了哪些内功?
查看>>
关于团队建设,穆帅能教我们什么?
查看>>
2019 SRE 调查报告:事故处理是主要工作,SRE 压力山大
查看>>
xpath学习
查看>>
Java工程师的成长路线图是什么?
查看>>
JavaOne 2016——首日亮点
查看>>
EDU_BOOK 开发总结
查看>>
简单的支持网页画框拖拽缩放功能的js插件
查看>>