其他
Shell基础(9)-条件判断2
每周二、四、六定期更新!
字符串判断
判断是否为空字符串
[root@studyclub jason]# [ -z MYNAME ]
[root@studyclub jason]# echo $? # MYNAME作为字符串,这显然不是一个空字符串,所以返回为假
1
[root@studyclub jason]# [ -z "$MYNAME" ]
[root@studyclub jason]# echo $? # 我们看MYNAME这个变量是不是空的、没有内容的。我们没有定义MYNAME这个变量,所以为空,故返回为真。
0
判断是否为非空字符串
[root@studyclub jason]# [ -n MYNAME ]
[root@studyclub jason]# echo $? # MYNAME是一个字符串,不为空,所以返回真
0
[root@studyclub jason]# [ -n "$MYNAME" ]
[root@studyclub jason]# echo $? # 我们没有定义MYNAME这个变量,所以为空,故返回为假
1
# 重点:我们也可省略-n选项,如果为空则返回假,如果不为空则返回为真
[root@studyclub ~]# [ "$MYNAME" ]
[root@studyclub ~]# echo $?
1
[root@studyclub ~]# MYNAME=jaso # 我们把MYNAME变量定义上
[root@studyclub ~]# [ "$MYNAME" ] # 判断变量内容是否为空
[root@studyclub ~]# echo $? # 非空,返回真
0
[ STRING1 = STRING2 ] # 判断字符串相等吗?相等则返回true(0),不相等则返回false(1)
[ STRING1 != STRING2 ] # 判断字符串是否不相等?不相等则返回true(0),相等则返回false(1)
[ STRING1 < STRING2 ] # (不常用)判断字符串STRING1是否小于STRING2(根据ASCII码比较),如果是则返回true(0),如果不是则返回false(1)
[ STRING1 > STRING2 ] # (不常用)判断字符串STRING1是否大于STRING2(根据ASCII码比较),如果是则返回true(0),如果不是则返回false(1)
[root@studyclub jason]# str1=jason
[root@studyclub jason]# str2=studyclub
[root@studyclub jason]# [ $str1 = $str2 ] # 判断两个字符串是不是相等,我们的例子显然不相等,所以这一步返回false(1)
[root@studyclub jason]# echo $?
1
[root@studyclub jason]# [ $str1 != $str2 ] # 我们例子中的两个字符串显然不相等,所以返回true(0)
[root@studyclub jason]# echo $?
0
[root@studyclub jason]# str1=studyclub # 让两个变量的内容相等
[root@studyclub jason]# [ $str1 = $str2 ] # 判断是否相等
[root@studyclub jason]# echo $? # 相等,返回true(0)
0
双中括号"[[]]"的用法。
使用“==”和“!=”的时候,符号的右边可以有通配符
使用“=~”的时候,符号的右边可以使用正则表达式(正则表达式的内容我们后面讲解)
# 判断一下文件名是不是以.txt结尾
[root@studyclub jason]# file=test.txt
[root@studyclub jason]# [[ $file == *.txt ]] # 第一个方式,取变量的时候不加引号
[root@studyclub jason]# echo $?
0
[root@studyclub jason]# [[ "$file" == *.txt ]] # 第二种方式,取变量的时候加引号,我们推荐这种方式。
[root@studyclub jason]# echo $?
0
# 不等号“!=”的练习
[root@studyclub jason]# [[ "$file" != *.txt ]]
[root@studyclub jason]# echo $? # 我们的文件名后缀是.txt,所以返回false(1)
1
[root@studyclub jason]# [[ "$file" != *.pdf ]]
[root@studyclub jason]# echo $? # 我们的文件名后缀是.txt,确实不等于.pdf,所以返回true(0)
0
我们再来看看“=~”符号的用法:
# 接上例
[root@studyclub jason]# [[ "$file" =~ \.pdf$ ]] # 文件是不是以.pdf结尾?不是,返回false(1)
[root@studyclub jason]# echo $?
1
[root@studyclub jason]# [[ "$file" =~ \.txt$ ]] # 文件是不是以.txt结尾?是,返回true(0)
[root@studyclub jason]# echo $?
0
# 判断变量的值是不是数字:
[root@studyclub jason]# NUM=100
[root@studyclub jason]# [[ "$NUM" =~ ^[0-9]+$ ]] # 判断所有的值是否都在是0-9之间的数字。
[root@studyclub jason]# echo $? # 是数字0-9,则返回true(0)
0
[root@studyclub jason]# NUM=1B00
[root@studyclub jason]# [[ "$NUM" =~ ^[0-9]+$ ]]
[root@studyclub jason]# echo $? # NUM变量的内容中有个字母B,不属于0-9,所以会返回false(1)
1
# 简单判断ip地址的合法性(不做数值的检验,制作数字和位数的检验)
[root@studyclub jason]# IP=10.0.0.1
[root@studyclub jason]# [[ "$IP" =~ ^([0-9]{1,3}.){3}[0-9]{1,3}$ ]]
[root@studyclub jason]# echo $? # 都是数字,且每一个段的数字位数在3位以内
0
《Linux基础及进阶》:
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
微信号|bjdream-1
Cloud研习社 ·