shell_条件判断_条件变量测试

条件测试变量测试

变量测试就是把字符串信息,写入到变量中

注意!!!

对变量测试,必须加双引号

[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
  1. 在中括号和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这类写法,以及支持 > < = != 这类

    1. 双中括号[[]]

      双中括号是对单中括号的补充,双冲括号还支持正则处理

posted @   翻滚的小井蛙  阅读(34)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示