linux 逻辑判断语句,shell脚本的逻辑判断

1.shell脚本的逻辑判断

在shell脚本中,-gt (>); -lt(=); -le(<=);-eq(==); -ne(!=),&&(与),||(或)。

或者用(($a>1))这种方式来表示;

[root@yuioplvlinux-128 ~]# a=5

[root@yuioplvlinux-128 ~]# if [ $a -gt 3 ];then echo "OK"; fi

OK

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

[root@yuioplvlinux-128 ~]# cd /usr/local/sbin/

[root@yuioplvlinux-128 sbin]# vim if1.sh

#! /bin/bash

a=5

if [ $a -gt 3 ]

then

echo "OK"

fi

[root@yuioplvlinux-128 sbin]# sh if1.sh

OK

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

[root@yuioplvlinux-128 sbin]# vim if2.sh

#! /bin/bash

a=1

if [ $a -gt 3 ]

then

echo "OK"

else

echo "error"

fi

[root@yuioplvlinux-128 sbin]# sh -x if2.sh

+ a=1

+ '[' 1 -gt 3 ']'

+ echo error

error

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

[root@yuioplvlinux-128 sbin]# vim if3.sh

#! /bin/bash

a=5

if [ $a -gt 8 ]

then

echo ">8"

elif [ $a -gt 3 ]

then

echo ">3"

else

echo "<3"

fi

[root@yuioplvlinux-128 sbin]# sh -x if3.sh

+ a=5

+ '[' 5 -gt 8 ']'

+ '[' 5 -gt 3 ']'

+ echo '>3'

>3

2.文件目录属性判断

shell脚本中if还经常用于判断文件的属性,比如判断是普通文件还是目录,判断文件是否存在,判断文件是否有读、写、执行的权限等。常用的选项有:

-e:判断文件或目录是否存在;

-d:判断是否为目录以及是否存在;

-f:判断是否为普通文件以及是否存在;

-r:判断是否有读权限;

-w:判断是否有写权限;

-x:判断是否有执行权限;

[root@yuioplvlinux-128 ~]# if [ -e /home/ ]; then echo ok; fi

ok

[root@yuioplvlinux-128 ~]# if [ -d /home/ ]; then echo ok; fi

ok

[root@yuioplvlinux-128 ~]# if [ -f /root/123.txt ]; then echo ok; fi

ok

文件的读、写、执行权限是指登录用户的权限,比如123.txt文档,root对其有读写权限,而没有执行权限;

[root@yuioplvlinux-128 ~]# ll /root/123.txt

-rw-r--r-- 1 root root 1379 7月 11 22:00 /root/123.txt

[root@yuioplvlinux-128 ~]# if [ -r /root/123.txt ]; then echo ok; fi

ok

[root@yuioplvlinux-128 ~]# if [ -w /root/123.txt ]; then echo ok; fi

ok

[root@yuioplvlinux-128 ~]# if [ -x /root/123.txt ]; then echo ok; fi

还有一种用法,如下:

#! /bin/bash

a="/tmp/yuioplv"

[ -f $a ] && rm -f $a #判断/tmp/yuioplv文件是否存在,存在则删除该文件

等同于

if [ -f $a ]

then

rm -f $a

fi

执行该脚本,删除了/tmp/yuioplv文件;

[root@yuioplvlinux-128 sbin]# sh -x test.sh

+ a=/tmp/yuioplv

+ '[' -f /tmp/yuioplv ']'

+ rm -f /tmp/yuioplv

类似的有:

#! /bin/bash

a="/tmp/yuioplv"

[ -f $a ] || touch $a #判断/tmp/yuioplv文件是否存在,不存在则创建该文件

等同于

if [ -f $a ]

then

else

touch $a

fi

执行该脚本,创建了/tmp/yuioplv文件。

[root@yuioplvlinux-128 sbin]# sh -x test.sh

+ a=/tmp/yuioplv

+ '[' -f /tmp/yuioplv ']'

+ touch /tmp/yuioplv

[root@yuioplvlinux-128 sbin]# ll /tmp/yuioplv

-rw-r--r-- 1 root root 0 7月  12 21:39 /tmp/yuioplv

if的特殊用法

1)if [ -z "$a" ]  这个表示当变量a的值为空;

[root@yuioplvlinux-128 sbin]# vim if4.sh

#!/bin/bash

if [ ! -f /tmp/op ]

then

echo "/tmp/op not exist."

exit

fi

n=`wc -l /tmp/op`

if [ -z "$a" ]

then

echo error

exit

elif [ $n -gt 120 ]

then

echo ok

fi

[root@yuioplvlinux-128 sbin]# sh -x if4.sh

+ '[' '!' -f /tmp/op ']'

+ echo '/tmp/op not exist.'

/tmp/op not exist.

+ exit

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

[root@yuioplvlinux-128 sbin]# echo $b

[root@yuioplvlinux-128 sbin]# if [ -n "$b" ]; then echo $b; else echo "b is not null"; fi

b is not null

3)if grep -q判断一个文件是否包含某一行;

[root@yuioplvlinux-128 sbin]# if grep -wq 'yu' /etc/passwd; then echo "yu exist"; fi #/etc/passwd中是否存在yu,然后输出yu存在

yu exist

[root@yuioplvlinux-128 sbin]# if ! grep -wq 'user1' /etc/passwd; then useradd user1; fi #/etc/passwd中是否存在user1,不存在就创建该用户

[root@yuioplvlinux-128 sbin]# cat /etc/passwd |grep user1

user1:x:1126:1126::/home/user1:/bin/bash

3.case判断

在shell脚本中,除了用if来判断逻辑,还有一种另外的方式——case,其格式如下:

格式 case  变量名 in

value1)

command;

;;

value2)

command;

;;

value3)

command;

;;

*)

command;

;;

esac

在上面的结构中,不限制value的个数,*代表其他值。

下面是一个shell脚本,用来判断成绩的优劣;

[root@yuioplvlinux-128 sbin]# vim case1.sh

#!/bin/bash

read -p "Please input a number: " n #提示输入字母,并将输入的值赋值给n

if [ -z "$n" ] #判断为空

then

echo "Please input a number."

exit 1

fi

n1=`echo $n|sed 's/[0-9]//g'` #清空n变量的数字

if [ -n "$n1" ] #判断不为空

then

echo "Please input a number."

exit 1

fi

if [ $n -lt 60 ] && [ $n -ge 0 ] #大于等于0小于60

then

tag=1

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

1)

echo "not ok"

;;

2)

echo "ok"

;;

3)

echo "good"

;;

4)

echo "prefect"

;;

*)

echo "The number range is 0-100."

;;

esac

下面是执行过程:

[root@yuioplvlinux-128 sbin]# sh -x case1.sh

+ read -p 'Please input a number: ' n

Please input a number: 101

+ '[' -z 101 ']'

++ echo 101

++ sed 's/[0-9]//g'

+ n1=

+ '[' -n '' ']'

+ '[' 101 -lt 60 ']'

+ '[' 101 -ge 60 ']'

+ '[' 101 -lt 80 ']'

+ '[' 101 -ge 80 ']'

+ '[' 101 -lt 90 ']'

+ '[' 101 -ge 90 ']'

+ '[' 101 -le 100 ']'

+ tag=0

+ case $tag in

+ echo 'The number range is 0-100.'

The number range is 0-100.

[root@yuioplvlinux-128 sbin]# sh case1.sh

Please input a number: 0

not ok

[root@yuioplvlinux-128 sbin]# sh case1.sh

Please input a number: 60

ok

[root@yuioplvlinux-128 sbin]# sh case1.sh

Please input a number: 82

good

[root@yuioplvlinux-128 sbin]# sh case1.sh

Please input a number: 99

prefect

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值