Shell学习之IF的使用
1.比较大小
1.1比较整数
if [ $A -gt $B ]; then | 或 | if (( $a > $b )); then |
-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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。