条件测试变量测试
变量测试就是把字符串信息,写入到变量中
注意!!!
对变量测试,必须加双引号
[root@localhost tmp]# [ -e "$file1" ]&& echo "该文件存在" || echo "$file1文件不存在"
风景.jpg文件不存在
[root@localhost tmp]# touch 风景.jpg
[root@localhost tmp]# [ -e "$file1" ]&& echo "该文件存在" || echo "$file1文件不存在"
该文件存在
[root@localhost tmp]# [ -f "$file1" ]&& echo "该文件存在" || echo "$file1文件不存在"
该文件存在
如果想进阶到shell高级开发,初级水平(运维架构,服务器系统管理,服务器集群的管理,ansible批量运维管理,堡垒机搭建,监控系统搭建,shell开发),高级水平进阶只有看大佬的脚本进阶,如系统自带的脚本函数
[root@localhost tmp]# vim /etc/init.d/functions
[root@localhost tmp]# vim /etc/init.d/network
字符串测试
常用字符串操作符 | 说明 |
---|---|
-n "字符串" | 若字符长度不为0,则为真,n可以理解为no zero |
-z "字符串" | 若字符串长度为0, 则为真,n可以理解为zero |
" 串1" = "串2" | 若串1等于串2,则为真,可使用==代替 = |
"串1" != "串2" | 若串1不等于串2,则为真,但是不可使用!==代替 != |
比较两个字符串的变量的值,是否相等,不等这样的情况
= 判断是否相等
!= 判断是否不等
! 取反,
注意
- 对于字符串变量的比较,一定要记得给变量添加双引号
- 使用等于号的值判断,左右两边也需要空格
[root@localhost tmp]# [ "hello" = "hello" ] && echo "ok" || echo "no"
ok
[root@localhost tmp]# [ "hello" = "helxo" ] && echo "ok" || echo "no"
no
[root@localhost tmp]# [ "hello" == "helxo" ] && echo "ok" || echo "no"
no
[root@localhost tmp]# [ "hello" !== "helxo" ] && echo "ok" || echo "no" ###不能使用!==
bash: [: !==: 期待二元表达式
no
[root@localhost tmp]# [ "hello" != "helxo" ] && echo "ok" || echo "no"
ok
[root@localhost tmp]#
[root@localhost tmp]# ls
! checked.sh myshell.sh sub_str testbc.sh test_houzui.sh
calcualation2.sh demotest.sh MyVar.sh test01.sh test_expr.sh 风景.jpg
calcualation.sh hello nohup.out test02.sh test_houzui2.sh
[root@localhost tmp]# [ -f "test01.sh" ]&& echo ok ||echo no
ok
[root@localhost tmp]# [ ! -f "test01.sh" ]&& echo ok ||echo no ###! 对结果取反
no
[root@localhost tmp]#
数值比较测试
(重要)
在[]以及test中使用的比较符号 | 在(())和[[]]中使用的比较符 | 说明 |
---|---|---|
-eq | ==或= | 相等,全拼为equal |
-ne | != | 不相等,全拼为not equal |
-gt | > | 大于,全拼为greater than |
-ge | >= 自个测试了在[[]]不能使用 | 大于等于,全拼为greater equal |
-lt | < | 小于,全拼为less than |
-le | <= 测试了在[[]]不能使用 | 小于等于,全拼为less equal |
-
在中括号和test中数值比较
注意:如果必须在[]中使用数值这类比较符需要条件转义符号; 但是,>=,<=这类不能加转义字符;!=不需要加,可以直接识别
[[]]自个测试了应该不能使用 >= <= 就是加转义也不行
[]和[[]] 记得两边和比较符两边都要空格
[root@localhost ~]# [ 2 -gt 1 ] && echo ok ||no ok [root@localhost ~]# [ 2 -gt 2 ] && echo ok ||no bash: no: 未找到命令... [root@localhost ~]# [root@localhost ~]# [ 2 -gt 1 ] && echo ok || echo no ok [root@localhost ~]# [ 2 -gt 2 ] && echo ok || echo no no [root@localhost ~]# [ 2 >= 2 ] && echo ok || echo no bash: [: 2: 期待一元表达式 no [root@localhost ~]# [ 2 \> 2 ] && echo ok || echo no ####添加转义字符\可以 no [root@localhost ~]# [ 2 \>= 2 ] && echo ok || echo no ####,>=,<=这类不能添加转义字符\ bash: [: >=: 期待二元表达式 no [root@localhost ~]# [ 2 != 3 ] && echo ok || echo no ###!=可以直接识别 ok [root@localhost ~]# (2>1) && echo ok || echo no ok [root@localhost ~]# (2>2) && echo ok || echo no ####单小括号没法作比较,必须是双小括号 ok [root@localhost ~]# ((2>2)) && echo ok || echo no no [root@localhost ~]# [[ 2>2 ]] && echo ok || echo no ### 比较符号> 两边也需要空格 bash: 条件命令中有未预期的符号 284 bash: `2>' 附近有语法错误 [root@localhost ~]# test 2>2 && echo ok || echo no no [root@localhost ~]# test 2>1 && echo ok || echo no ###用数值符号不行 no [root@localhost ~]# test 2 -gt 1 && echo ok || echo no ok [root@localhost ~]#
在test和中括号语法中支持 -eq这类写法,以及支持 > < = != 这类
-
双中括号[[]]
双中括号是对单中括号的补充,双冲括号还支持正则处理
-