字符串测试表达式

常用字符串测试操作符


-n 字符串 若字符串的长度不为0,则为真

-z 字符串 若字符串的长度为0,则为真

串1 = 串2 若字符串1等于字符串2,则为真

串1 != 串2 若字符串1不等于字符串2,则为真


需要注意的是:

对于字符串的测试,一定要给变量字符串加双引号在进行比较。

比较符合(例如 = 和 !=)的两端一定要要有空格

!= 和 =可用于比较两个字符串是否相同

例如:

root@ubuntu:~/xpf#[-n"abc"]&&echo1||echo0
1
root@ubuntu:~/xpf#test-n"abc"&&echo1||echo0
1
root@ubuntu:~/xpf#xx=xpg
root@ubuntu:~/xpf#[-n"$xx"]&&echo1||echo0
1
root@ubuntu:~/xpf#var=
root@ubuntu:~/xpf#[-z"$var"]&&echo1||echo0
1
root@ubuntu:~/xpf#var=rr
root@ubuntu:~/xpf#[-z"$var"]&&echo1||echo0
0
root@ubuntu:~/xpf#["abc"="abc"]&&echo1||echo0
1
root@ubuntu:~/xpf#["abc"!="abc"]&&echo1||echo0
0
root@ubuntu:~/xpf#

如果字符串比较时若等号两端没有空格,则会导致判断出现逻辑判断,即使语法正确,但是结果有问题。



切记:对于字符串的验证,一定要使用双引号。


整数二元比较操作

在[ ]里面是哟个的操作符 在[[ ]]或者(( )) 使用的操作符

-eq ==或= 想等

-ne != 不等

-gt > 大于

-ge >= 大于等于

-lt < 小于

-le <= 小于等于



需要注意的是在 [ ] 里面也可以使用 > ,< 但是要使用反斜线转义,个人感觉还不如使用 -eq 之类进行数字比较

root@ubuntu:~/xpf#[2<1]&&echo1||echo0
1
root@ubuntu:~/xpf#[2\<1]&&echo1||echo0
0
root@ubuntu:~/xpf#[2==1]&&echo1||echo0
0
root@ubuntu:~/xpf#[2=1]&&echo1||echo0
0
root@ubuntu:~/xpf#[2!=1]&&echo1||echo0
1
root@ubuntu:~/xpf#[2-gt1]&&echo1||echo0
1

为了避免错误,还是使用数据比较符进行比较

root@ubuntu:~/xpf#[2-ge2]&&echo1||echo0
1
root@ubuntu:~/xpf#[2-gt1]&&echo1||echo0
1
root@ubuntu:~/xpf#[2-lt1]&&echo1||echo0
0
root@ubuntu:~/xpf#[2-le1]&&echo1||echo0
0
root@ubuntu:~/xpf#[2-le3]&&echo1||echo0
1
[]和[[]]
root@ubuntu:~/xpf#[[5>3]]&&echo1||echo0
1
root@ubuntu:~/xpf#[[5=3]]&&echo1||echo0
0
root@ubuntu:~/xpf#[[5<3]]&&echo1||echo0
0
root@ubuntu:~/xpf#[[5!=3]]&&echo1||echo0
1

个人感觉使用[ ]比较好用,有特殊的正则表达式在用。


整数表示测试:

root@ubuntu:~/xpf#[$xx-gt$cc]&&echo1||echo0
0
root@ubuntu:~/xpf#[$xx-lt$cc]&&echo1||echo0
1
root@ubuntu:~/xpf#[$xx-eq$cc]&&echo1||echo0
0
root@ubuntu:~/xpf#[$xx-ne$cc]&&echo1||echo0
1

利用[[ ]]和(( ))实现整数条件测试

root@ubuntu:~/xpf#[[$xx<$cc]]&&echo1||echo0
1
root@ubuntu:~/xpf#[[$xx>$cc]]&&echo1||echo0
0
root@ubuntu:~/xpf#(($xx<$cc))&&echo1||echo0
1
root@ubuntu:~/xpf#(($xx>$cc))&&echo1||echo0
0

关于整数的比较。(( ))语法要优先[[ ]],,但是还是首先推荐使用(),然后就是(( )),最后使用[[ ]].



逻辑判断符:

在[ ]里面是哟个的操作符 在[[ ]]或者(( )) 使用的操作符

-a && 与

-o || 或

! ! 非


逻辑操作符的实践事例

root@ubuntu:~/xpf#[-f"$ff"-a-f"$ccc"]&&echo1||echo0
0
root@ubuntu:~/xpf#[-f"$ff"-a-f"$xx"]&&echo1||echo0
1
root@ubuntu:~/xpf#[-f"$ff"-o-f"$xxx"]&&echo1||echo0
1
root@ubuntu:~/xpf#[-!"$ff"]&&echo1||echo0
bash:[:-!:unaryoperatorexpected
0
root@ubuntu:~/xpf#[!"$ff"]&&echo1||echo0
0

需要注意的是:

“-a”和“-o”逻辑操作符符号需要用于[ ]中

&& 和 || 逻辑操作符可用于[[]]和(( ))中,y饿可以外部连接多个[ ]

注意:在[ ]和[[ ]]的两端及比较符号的两端。必须要有空格


逻辑操作符企业案例

#!/bin/bash

read-p"inputanum:"num#注意这里的空格以及:符号

if["$num"-eq1-o"$num"-eq2]
then
echo$num
exit5
else
echo"thisisbad"
fi

使用脚本传参或者read读入的方法

没有使用if的情况下,判断两个大小,将大的数字输出。

错误的把<0的数排除
#!/bin/bash

read-p"inputanum:"num
read-p"ubputothernum:"num1


["$num"-gt0-a"$num"-gt0]||exit5
[`expr$num+$num1`]||exit4
[$num-ge$num1]&&echo"$num"||echo"$num1"



第二种:传参判断
#!/bin/bash
a=$1
b=$2

[$#-ne2]&&{
echo"pleasestwousage;"
exit1
}

expr$a+10>/dev/null
aa=$?
expr$b+10>/dev/null
bb=$?

[$aa-eq0-a$bb-eq0]||{
echo"thisisabadnum"
exit
}
[$a-gt$b]&&echo""$a">"$b""||echo""$a"<"$b""

写一个脚本,自动安装lamp或者lnmp。

要求:

当用户输入1时,输出“start install lamp”,提示执行/service/scripts/lamp.sh输出“lamp is installed” 并退出脚本

当用户输入2时,输出“start install lnmp”,提示执行/service/scripts/lamp.sh输出“lnmp is installed” 并退出脚本

当用户输入3时,退出

当用户输入其他时,报错退出

#!/bin/bash
[-d"/service/scripts"]||mkdir-p/service/scripts


echo"pleaesyourchoice."
cat<<END
1.installlamp
2.installlnmp
3.exit
END

read-p"plzyourchoice:"num

["$num"-ne1-a"$num"-ne2-a"$num"-ne3]&&{
echo"inputerror"
exit2
}
if[$num-eq1];then
echo"startinstalllamp"
if[-x/server/scripts/lamp.sh];then
source/service/scripts/lamp.sh>/dev/null
exit$?
else
echo"bad"
exit4
fi
fi

[$num-eq3]&&echoexit3

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...