您的位置:首页 > 运维架构 > Shell

68.if逻辑判断以及判断文件目录属性 if特殊用法 case判断

2018-09-17 01:07 1321 查看
20.5 shell脚本中的逻辑判断

20.6 if判断文件目录属性

20.7 if判断特殊用法

20.8/20.9 case判断

20.5 shell脚本中的逻辑判断:

在shell脚本里,-gt为大于,-lt为小于,-eq为等于,-ne为不等于,-ge为大于等于,

-le为小于等于

~1.格式1:if 条件 ; then 语句; fi

#最常见的格式,if(如果怎么怎么样)...;then(然后怎么怎么样)...;fi(与前面的if相对应的)

[root@axinlinux-01 shell]# a=5 #假如a=5

[root@axinlinux-01 shell]# if [ $a -gt 3 ] #命令行下可以分开这样写。假如a大于3的时候

> then #然后

> echo ok #输出ok

> fi #fi 表示结束

ok #回车后就是ok。因为我们假如a=5了,已经满足上面条件了

[root@axinlinux-01 shell]# if [ $a -gt 3 ]; then echo ok; fi #写完上面的,按上一条命令就显示这个。这就是一整条命令行的写法,输出为ok

ok

#! /bin/bash #在脚本里可以这样写

a=1

if [ $a -gt 3 ]

then

echo ok

fi

~2.格式2:if 条件; then 语句; else 语句; fi

#if(如果怎么样);then(然后怎么样);else(不满足if的判断,怎么样);fi

#! /bin/bash

a=1

if [ $a -gt 3 ]

then

echo ok

else #如果不满足if的逻辑判断,怎么样

echo no #不满足就输出no

fi

~3.格式3:if …; then … ;elif …; then …; else …; fi

#elif 表示在满足if的基础之上,elif还满足什么什么。也就是又加了一个条件判断。可以写多次

#! /bin/bash

a=5

if [ $a -gt 10 ] #假如a大于10,然后输出>10

then

echo ">10"

elif [ $a -lt 4 ] #假如a小于4,然后输出>10 $$ <4

then

echo "<10 && >4"

else #以上都不满足,就输出no

echo no

fi

以上很明显都不满足,就输出no

~4.逻辑判断表达式:if [ $a -gt $b ]; if [ $a -lt 5 ]; if [ $b -eq 10 ]等 -gt (>); -lt(<); -ge(>=); -le(<=);-eq(==); -ne(!=) 注意到处都是空格

如果我们就想用<>来表示大于或小于,可以这样写:

[root@axinlinux-01 shell]# a=3

[root@axinlinux-01 shell]# if ((a<5)) ; then echo ok ; fi #就是用两个括号括起来

ok

~5.可以使用 && || 结合多个条件

if [ $a -gt 5 ] && [ $a -lt 10 ]; then

#并且关系的时候可以用&&来表示

if [ $b -gt 5 ] || [ $b -lt 3 ]; then

#或者关系的时候可以用||来表示

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

20.6 if判断文件目录属性:

~1.[ -f file ]判断是否是普通文件,且存在

#! /bin/bash

f=/tmp/axin

if [ -f $f ] #判断$f是否是文件

then #是的话,输出 $f exist

echo $f exist

else #不是的话,touch$f

touch $f

if

~2.[ -d file ] 判断是否是目录,且存在

#! /bin/bash

f=/tmp/axin

if [ -d $f ] #判断$f是否为目录

then #是的话echo $f exist

echo $f exist

else #不是的话mkdir $f

touch $f #不管是文件还是目录都是可以touch的。如果存在的话touch就会改变他的time

fi

~3.[ -e file ] 判断文件或目录是否存在

~4.[ -r file ] 判断文件是否可读

~5.[ -w file ] 判断文件是否可写

~6.[ -x file ] 判断文件是否可执行

实例:

通常我们会用到

#! /bin/bash

f=/tmp/axin

[ -f $f ] && rm-rf $f #这一行的效果等同于下面四行的效果(前面的执行成功才执行后面的)

if [-f $f]

then

rm-rf $f

fi

[ -f $f ] || touch $f #这一行的效果等同于下面四行的效果(前面的执行不成功才执行后面的)

if [ ! -f $f] #方括号里加!代表去反的意思

then

touch $f

fi

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

20.7 if判断的特殊用法:

~1.if [ -z "$a" ] 这个表示当变量a的值为空时会怎么样

#如果是变量要用双引号。如果是文件就不用双引号

~2.if [ -n "$a" ] 表示当变量a的值不为空

#如果是变量要用双引号。如果是文件就不用双引号

~3.if grep -q '123' 1.txt; then 表示如果1.txt中含有'123'的行时会怎么样

#-q只做过滤,不显示结果

[root@axinlinux-01 shell]# if grep -wq 'user1' /etc/passwd; then echo "yes"; else echo "no"; fi

no

~4.if [ ! -e file ]; then 表示文件不存在时会怎么样

#-e为是否存在,加上!代表取反,为不存在

~5.if (($a<1)); then …等同于 if [ $a -lt 1 ]; then…

#要想使用大于等于这样的字符,要加上双括号

~6.[ ] 中不能使用<,>,==,!=,>=,<=这样的符号

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

20.8/20.9 case判断:

~1.格式

case 变量名 in #比如case $a in

value1) #当值为1的时候怎么样

command

;; #双分号表示上面的判断结束进入下面的判断

value2)

command

;;

*) #除此之外又怎么样

command

;;

esac

~2.在case程序中,可以在条件中使用|,表示或的意思, 比如

2|3)

command

;;

~3.脚本案例

需求:当我们输入一个数字(0-100),判断这个同学的分数是什么样的级别(优秀、及格或不及格)

#!/bin/bash

read -p "Please input a number: " n #作为与用户交互,用户输入什么,那么那就是什么。首先我们要捕获这个数字。也同样定义了n这个变量

if [ -z "$n" ] #这个变量为空的时候。也就是用户没有输入的时候

then

echo "Please input a number." #没有输入直接回车了,就输出“请输入一个数字”

exit 1 #然后退出。这个1表示我们echo $?的值。就是说当客户为空直接回车,再使用echo $?的时候就会显示1

fi

n1=`echo $n|sed 's/[0-9]//g'` #ni=用户输入的匹配出除了数字的东西。假如用户输入了99ww,那么匹配出99,就过滤出了ww

if [ -n "$n1" ] #如果不为空怎么怎么样。(不为空的话肯定是带有非法字符啊,因为上一条已经过滤出除数字的了,依上一条就会显示ww)

then

echo "Please input a number." #如果出现除数字的字符,就显示“请输入数字”

exit 1

fi #这一段的意思是过滤数除数字的字符,并显示“Please input a number."

if [ $n -lt 60 ] && [ $n -ge 0 ] #输入的数字小于60并且大于等于0的时候

then

tag=1 #tag1为一个变量,下面我们会用case来定义它

elif [ $n -ge 60 ] && [ $n -lt 80 ] #输入的数字大于等于60并且小于80的时候

then

tag=2

elif [ $n -ge 80 ] && [ $n -lt 90 ] #输入的数字大于等于80并且小于90的时候

then

tag=3

elif [ $n -ge 90 ] && [ $n -le 100 ] #输入的数字大于等于90并且小于100的时候

then

tag=4

else #以上都不满足的时候

tag=0

fi

case $tag in #我们来定义tag的值

1) #当tag的值为1的时候,显示"not ok"

echo "not ok"

;;

2) #当tag的值为2的时候,显示"ok"

echo "ok"

;;

3) #当tag的值为3的时候,显示"ok ok"

echo "ok ok"

;;

4) #当tag的值为1的时候,显示"ok ok ok"

echo "ok ok ok"

;;

*) #除此之外的。就是当tag都不符合1 2 3 4 的时候。就是上面定义的tag=0

echo "The number range is 0-100." #接上条,显示"The number range is 0-100."

;;

esac
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Bash GT
相关文章推荐