单/双中括号与测试条件

Posted 张飘扬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单/双中括号与测试条件相关的知识,希望对你有一定的参考价值。

测试命令


tesst
[]内置命令
[[]]bash中的关键字

单中括号


格式[#express1#op#express2#]
注意:
  其中#代表括号不能省略
  不能匹配模式
  变量引用应用双引号括起,尤其当变量引用有空格时
  与或非形式-a –o !
  常量应用单/双引号括起
  整数比较时,< == ...需用反斜号转义,相当于-lt -eq ...

[[email protected] ~]# zyb="haha haha"
[[email protected] ~]# echo $zyb
haha haha
[[email protected] ~]# [ $zyb == "haha haha" ]
-bash: [: too many arguments
[[email protected] ~]# echo $?
2
[[email protected] ~]# [ "$zyb" == "haha haha" ]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [ "$zyb" != "haha haha" ]
[[email protected] ~]# echo $?
1
[[email protected] ~]# [ "$zyb" != "hahahaha" ]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [ "$zyb" == "hahahaha" ] ; echo $?
1
\#使用管道输出测试结果有问题`
[[email protected] ~]# [ "$zyb" == "hahahaha" ] | echo $?
0

双中括号


格式[[#pattern1#op#pattern2#]]
注意:
  其中#代表括号不能省略
  可用于模式匹配,支持正则表达式
  变量引用最好用双引号括起,匹配的模式中的单双引号都代表符号自身
  与或非形式&& || !
  整数比较时,< == ...需用反斜号转义,相当于-lt -eq ...

[[email protected] ~]# zyb="\"haha haha\""
[[email protected] ~]# echo $zyb
"haha haha"
[[email protected] ~]# [[ $zyb == ?haha?haha? ]] ; echo $?
0
[[email protected] ~]# [[ "$zyb" == ?haha?haha? ]] ; echo $?
0
[[email protected] ~]# [[ "$zyb" == "haha?haha" ]] ; echo $?
1

算术表达


let var_name=算术表达式
let var_name+=valuelet不能省略
let var_name++let不能省略
var_name=$[算术表达式]算术表达式空格较随意
var_name=$((算术表达式))算术表达式空格较随意
var_name=${var_name:-value}var_name非空保留原值;var_name空赋值value

[[email protected] ~]# num=1+2; echo $num
1+2
[[email protected] ~]# let num=1+2 ; echo $num
3
[[email protected] ~]# var_name=1; echo $var_name 
1
[[email protected] ~]# let var_name+=2; echo $var_name 
3
[[email protected] ~]# var_name+=2 ; echo $var_name 
32

测试条件


布尔运算:与&&||!
组合条件测试:与-a-o!
二元整数测试:num1 op num2
  -eq等于  -ne不等于
  -le小于等于  -ge大于等于  -lt小于  -gt大于
双目字符测试:str1 op str2
  ==等于  !=<>不等于  >大于  <小于
  =~左侧是字符串,右侧是一个模式,判断左侧的字符串能否被右侧的模式所匹配,通常只在[[]]中使用,模式中可以使用行首、行尾锚定符,但是模式不要加引号
单目字符测试:
  -n str不空为真,空为假
  -z str空为真,不空为假
双目文件测试op /path/to/somefile
  -e文件是否存在  -a同前  -f普通文件  -d目录
  -b存在且块设备  -c存在且字符设备  -h/-L存在且符号链接
  -p存在且管道  -S存在且套接字  -s存在且不为空
  -r存在且有读权限  -w存在且有写权限  -x存在且执行权限
双目文件测试file1 op file2
  -ntfile1比file2新
  -otfile1比file2老
  -effile1与file2是否指向同一个文件,包括软硬链接

以上是关于单/双中括号与测试条件的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本条件测试与比较

shell 条件表达式

Shell编程之条件语句

一文彻底弄懂Linux-Shell编程

一文彻底弄懂Linux-Shell编程

一文彻底弄懂Linux-Shell编程