Shell学习之IF的使用

1.比较大小

1.1比较整数

if [ $A -gt $B ]; then
    echo "A > B"
else
    echo "A < B"
fi


if (( $a > $b )); then
    echo "a > b"
else
    echo "a < b"
fi

-eq

等于

[ $a -eq $b ]

(( $a == $b ))

-ne

不等于

[ $a -ne $b ]

(( $a != $b ))

-gt

大于

[ $a -gt $b ]

(( $a > $b ))

-ge

大于等于

[ $a -ge $b ]

(( $a >= $b ))

-lt

小于

[ $a -lt $b ]

(( $a < $b ))

-le

小于等于

[ $a -le $b ]

(( $a <= $b ))

Note注意到等号两边各有一个空格,这是unix shell的要求

完成示例:

[root@VMhrj hrj]# cat test.sh

#!/bin/bash

a=$1;b=$2

echo "a=$a;b=$b"

if [ $a -gt $b ]; then

    echo "a > b"

elif (( $a < $b )); then

    echo "a < b"

else

    echo "a = b"

fi

 

Note:对于整数比大小,建议使用-gt -lt等,如在输入非数字时,可报错。

技术分享

为什么要建议此规范,我们再看一个例子:

[root@VMhrj hrj]# cat ./string.sh

#!/bin/bash

a=$1;b=$2

echo "a=$a;b=$b"

if [ "$a" = "$b" ]; then

    echo "a = b"

else

    echo "a != b"

fi

[root@VMhrj hrj]# ./string.sh hrj huangrenjie

a=hrj;b=huangrenjie

a != b

[root@VMhrj hrj]#

[root@VMhrj hrj]# ./string.sh hrj hrj

a=hrj;b=hrj

a = b

[root@VMhrj hrj]# ./string.sh 345 678

a=345;b=678

a != b

[root@VMhrj hrj]# ./string.sh 345 345

a=345;b=345

a = b

不知道你是否注意到没,这里输入数字和字符串均没有报错,而前面test.sh脚本一旦输入字符就会报错。这是因为输入数字时,string.sh脚本将345识别为字符串了。

 

1.2比较字符

[ -z STRING ] 如果STRING的长度为零则为真 ,即判断是否为空,空即是真;

[ -n STRING ] 如果STRING的长度非零则为真 ,即判断是否为非空,非空即是真;

[ STRING1 = STRING2 ] 如果两个字符串相同则为真; ==  等价;个人建议使用==

[ STRING1 != STRING2 ] 如果字符串不相同则为真;

[ STRING1 ] 如果字符串不为空则为真,与-n类似;

[[ STRING1 > STRING2 ]] a~z排序,STRING1在后;

[[ STRING1 < STRING2 ]] 反之;

 

注意:对于字符判断,变量一定要用双引号套起来。

 

示例1,判断字符串是否为空:

技术分享

技术分享

 

示例二,字符串比大小,注意如果是单括号里面,  > 需要被转义

技术分享 技术分享
 

技术分享

 

示例三,字符串是否一样:

技术分享 技术分享
 

技术分享

 

NOTE:等号在[[]][]里行为是不一样的,以下面为例。

技术分享 技术分享

技术分享 技术分享

 

1.3多条件

if [ 条件1 ] && [ 条件2 ]

if [ 条件1 ] || [ 条件2 ]

if [ 条件1  -a 条件2 ]

if [ 条件1  -o 条件2 ]

if [[ 条件1 && 条件2 ]]

if [[ 条件1 || 条件2 ]]

 

示例:

技术分享 技术分享


技术分享

 

2.文件判断

可以参照test命令,运行命令man test查看。

 

示例:

[root@VMhrj hrj]# ls

file.sh  number.sh

[root@VMhrj hrj]# if [ -e /tmp/hrj/number.sh ]; then

> echo "file exists"

> else

> echo "file not exists"

> fi

file exists

[root@VMhrj hrj]#

微信关注


技术分享 

本文出自 “黄仁杰” 博客,请务必保留此出处http://huangrenjie.blog.51cto.com/8810137/1635786

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。