Linux识别特殊键,shell逻辑判断、文件属性判断、if特殊用法、case判断

本文介绍了Shell脚本中逻辑判断的表达式,包括[]和()中的比较运算符,以及文件属性判断的if条件用法。讲解了如何使用逻辑连接符,判断文件存在、类型和权限,并展示了case结构在不同情况下的应用实例。
摘要由CSDN通过智能技术生成

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 "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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值