首页 > 系统相关 >shell_条件判断_条件变量测试

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

时间:2023-10-10 10:46:09浏览次数:44  
标签:shell ok 变量 no echo && 条件 root localhost

条件测试变量测试

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

注意!!!

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

[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. 双中括号[[]]

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

标签:shell,ok,变量,no,echo,&&,条件,root,localhost
From: https://www.cnblogs.com/xjianbing/p/17754023.html

相关文章

  • shell_条件判断_[]中括号
    条件测试条件测试[]中括号脚本中经常进行条件测试,用的最多的,都是中括号[]test和[]中括号的作用是意义的;只是中括号[],前后的空格必须有注意!!!中括号[],前后的空格必须有在条件测试中使用变量,必须添加双引号[-n"${filename}"][root@localhosttmp]#[-f"$......
  • shell_脚本开发_数值运算
    shell中的数值运算shell中常见的算术运算符运算符意义(*表示常用)+、-加号(正号)、减号(负号)**、/、%乘号、除号、取余(取模)***幂运算*++、--增加及减少,可前置也可放在变量结尾*!、&&、||逻辑非(取反)、逻辑与(and)、逻辑或(or)*<、<=、>、>=比......
  • shell_脚本开发_数值运算_expr命令
    expr命令简单的计算器执行命令可以用expr--help查看文档#expr是以传入参数的形式进行计算的,它基于空格传入参数,但是在shell里的一些元字符(*啊这类)都是有特俗含义的,需要转义[root@localhost~]#expr2+57[root@localhost~]#expr2*5expr:语法错误[root@localh......
  • powershell 获取文件夹的大小
        powershell获取文件夹的大小$startFolder="C:\users"  $colItems=(Get-ChildItem$startFolder |Where-Object{$_.PSIsContainer-eq$True}|Sort-Object)foreach($iin$colItems)  {    $subFolderItems=(Get-ChildItem$i.FullName......
  • 【C++ Primer】变量和基本类型
    目录二、变量三、复合类型四、const限定符五、处理类型六、自定义数据结构一、基本内置类型 1、算术类型分为整形和浮点型,常见的算术类型:char:1个字节,short:2个字节,int:2个字节,long:4个字节,float:4个字节,double:8个字节,longlong【c++11】:8个字节。可寻址的最小内存块称为“字节(byte)”,......
  • 整理常见问题一死锁条件
    1、死锁的条件死锁是两个或两个以上的进程在执行过程中,由于竞争资源或进程推进顺序非法造成的阻塞现象,若无外力作用将无法推进下去。四个必要条件1)互斥条件:一个资源每次只能被一个进程使用(涉及的资源是非共享的)2)请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不......
  • 一次性按要求替换多个文件的名称:PowerShell
      本文介绍基于PowerShell语言,对文件夹中全部文件的名称加以批量替换、修改的方法。  在之前的文章Python批量自动修改大量文件的名称中,我们介绍了基于Python语言,批量修改大量文件的名称的方法。当时我们修改文件名的需求比较复杂,因此选择了用Python语言来实现;而在我们的需求......
  • Conveyor (CF E) (dp 差分/前缀 条件迷惑t)
     思路: 找各种性质1每一秒只有史莱姆进入起始点,然后他会选一个方向走(右或者下),每一秒史莱姆都会这样走在考虑前t秒内有S个史莱姆到达这个点,然后就会有s+1/2个往右走,s/2往下走而且问t秒只会有t-n-m-1秒后的时刻影响(诈骗t)于是利用dp+差......
  • Shell基本命令小结
    一、mkdir创建目录和rmdir删除目录1创建目录创建单级目录:mkdiraaa创建多级目录mkdir -p bbb/ccc2删除目录删除空目录:rmdiraaa删除非空目录:(1)rmdirccc(2)rmdirbbb/ 二、touch创建文件和rm删除文件创建文件:touchaaa.txt创建多个文件:touchbbb.txtccc.txt 删除文......
  • 仅作笔记用:PowerShell 关闭显示器
    使用这个命令可以手动关闭显示器,这样就不需要第三方工具甚至自己写代码了。(Add-Type'[DllImport("user32.dll")]publicstaticexternintSendMessage(inthWnd,inthMsg,intwParam,intlParam);'-Namea-Pas)::SendMessage(-1,0x0112,0xF170,2)也可以写成CMD的形式......