分享

shell if条件测试用法

本帖最后由 sky_mld 于 2023-9-24 21:06 编辑

shell判断元组元素:
arry=(1 2 3)
if [[ "${ary[@]}" =~ "$a" ]] ; then
echo "a in ary"
else
echo "a not in ary"

[判断字符串($str)是否包含另一个字符串($str1):
str=abcd
str1=ab
if [[ "$str" =~ $str1 ]];then
echo ok
else
echo bad
fi


二元比较操作符,比较变量或者比较数字.注意数字与字符串的区别.
整数比较   
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]   
-gt 大于,如:if [ "$a" -gt "$b" ]   
-ge 大于等于,如:if [ "$a" -ge "$b" ]  
-lt 小于,如:if [ "$a" -lt "$b" ]  
-le 小于等于,如:if [ "$a" -le "$b" ]   
大于(需要双括号),如("$a" > "$b"))  
>= 大于等于(需要双括号),如("$a" >= "$b"))  

小数据比较可使用AWK
字符串比较    [
= 等于,如:if [ "$a" = "$b" ]  
== 等于,如:if [ "$a" == "$b" ],与=等价   


注意:==的功能在[[]]和[]中的行为是不同的,如下:   
[[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true [
[[size=13.3333px][ $a == "z*" ]] # 如果$a等于z*(字符匹配,只有严格相等时才返回true),那么结果为true


[ $a == z* ] # File globbing 和word splitting将会发生   
[ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true  


一点解释,关于File globbing是一种关于文件的速记法,比如"*.c"就是,再如~也是,但是file globbing并不是严格的正则表达式,虽然绝大多数情况下结构比较像.


!= 不等于,如:if [ "$a" != "$b" ] 这个操作符将在[[]]结构中使用模式匹配.   大于,在ASCII字母顺序下.如:  
if [[ "$a" > "$b" ]]  if [ "$a" \> "$b" ]   
注意:在[]结构中">"需要被转义.
  -z 字符串为"null".就是长度为0  
-n 字符串不为"null"


注意:使用-n在[]结构中测试必须要用""把变量引起来,使用一个未被""的字符串来使用 ! -z或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可以工作,但这是不安全的,习惯于使用""来测试字符串是一种好习惯.



if判断式
if [ 条件判断一 ] && (||) [ 条件判断二 ]; then
elif [ 条件判断三 ] && (||) [ 条件判断四 ]; then
else
   执行第三段內容程式

例如:root@sky:~# a=1root@sky:~# b=1
root@sky:~# c=5         
root@sky:~# if [ $a = 1 -a $b = 1 ]&&[ $c != 0 ]; then echo success;fi


if 使用的表达式Primary 意义
[ -a 文件 ] 如果文件存在为真。
[ -b 文件 ] 如果文件存在而且是一个块-特殊文件为真。
[ -c 文件 ] 为真如果文件 存在而且是一个字-特殊文件。
[ -d 文件 ] 为真 如果 文件 存在 而且 是一个 目录。
[ -e 文件 ] 为真 如果 文件 存在。
[ -f 文件 ] 为真[/ -f 文件 ][/ -e 文件 ][/ -d 文件 ][/ -c 文件 ][/ -b 文件 ][/ -a 文件 ][/ $c !]
[/ 条件判断四 ][/ 条件判断三 ][/ 条件判断二 ][/ 条件判断一 ][/ "$a" \> "$b" ][/[/ "$a" > "$b" ][/ "$a" !][/ $a ][/ $a ][/ $a ][/
[/[/[/ $a ][/][/][/][/][/[/][/[/][/ "$a" ][/ "$a" ][/
][/ "$a" -le "$b" ][/ "$a" -lt "$b" ][/ "$a" -ge "$b" ][/ "$a" -gt "$b" ][/ "$a" -ne "$b" ][/ "$a" -eq "$b" ][/判断字符串($str)是否包含另一个字符串($str1):
str][/[/ "${ary[/@]

试读已结束,请付费阅读全文。

  本文只能试读34%,付费后可阅读全文。 

版权说明:论坛帖子主题均由合作第三方提供并上传,若内容存在侵权,请进行举报

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系在线客服