7月12日任务

20.5 shell脚本中的逻辑判断
20.6 文件目录属性判断
20.7 if特殊用法

20.8/20.9 case判断

shell脚本中的逻辑判断


格式① if .... then.... fi


注意看区别和错误,变量前一定要加标识符$,否则被认为就是普通的字符,判断句中符号之间需要加空格,否则报错

脚本形式:



格式② if ..... then ..... else .... .fi



格式③if.....then; elif..... then;else......then; fi

-gt 大于,-lt 小于 -eq 等于 -ge大于等于 -le小于等于 -ne不等于 if [ $a -gt $b ]; if [$a -eq $c ]; 

支持逻辑运算&&和 ||;e.g. if [ $a -gt 6 ] && [ $a -lt 9 ]   if [ $b -gt 9 ] || [$b -lt 3 ]

文件目录属性判断

-f判断是否是普通文件且存在 -d判断是否为目录且存在 -e判断是否为普通文件或目录且存在 -r, -w, -x 依次为可读可写可执行

示例:


执行报错,因为没有写fi结尾; 还有第二行目录不存在报错,因为多写了一个空格


sh -x 查看脚本执行过程;如下图所示,系统自动进行了一次判断的过程


-d 查看是否为目录,touch的作用, 如果某文件/目录存在会修改文件的atime, ctime, mtime,如果不存在则会创建,如下图


即使执行两次也会判断使用touch,因为$f不是目录,但是存在,只会跳到下一个判断句上即本例中的touch $f


-e判断某文件或者目录是否存在


sh -x查看脚本执行过程,由于文件存在,所以直接执行结束选择echo exists


如下图,-r, -w, -x脚本


脚本示例①==②; ③==④;&&只有在前面是true才会执行后面的, ||逻辑判断只有在前面是false才会执行后面的语句,!表示取反,即! -f和-f互为反义


if的特殊用法

新脚本


如上图所示,如果定义的变量n没有值时(即如上图中为空),执行脚本会报错


把空值放入脚本中执行,出现bug,如果参与项目中,会影响整个项目的效果;为了让脚本更严谨,质量更高,需要进行一些判断,如加入判断n是否有值[ -z "a"] [-n "a"],两者互为反,前者表示为空,后者表示不为空,如下图


改良版(elif)


更严谨的判断,先判断文件/tmp/xxxxx是否存在,如果不存在直接exit 否则再执行下面的判断语句,可以把$n是否为空的部分删除因为前面已经进行过一次判断了



-n(不为空)可以即判断变量也可以判断文件

例子:

注意查看$b和b的区别,-n判断不为空时跟文件可以不加双引号,跟变量需要添加

在逻辑判断中可以使用一个命令的结果作为判断的条件;如某个文件中是否含有某些字符串,例子(判断系统中的用户中是否有user1)


-w更加精准匹配,grep中有-q选项可以不输出匹配文件内容,!可以取反,并加上相应的条件句

case判断


如上图所示case判断+变量名如$f in value1 ;可以使用|表示或,如|2, |3

脚本示例:


read命令:让用户输入一些字符串,并返回定义的变量如本例中的变量n,echo$n则会输出输入的值


新建一个test.sh只看下图这部分,if判断如果变量n为空,则输出Please input a number.并有一个返回值1,可用echo $?查看;0表示OK,1表示有问题(和编译安装中的make&make install后查看返回值类似)


第二段


定义一个变量n1,把之前变量n的值用sed进行替换/g成空,再进行下面的判断,如果变量n1不为空(表示之前输入的变量n不是  纯数字),则执行then后面的操作,即提示“请输入数字”,返回1,表示错误;如果变量n1为空则说明输入的为纯数字,合法,继续执行下面的脚本

第三段


继续判断n的大小,分4种情况,用case判断如上图



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值