步骤一:条件测试的基本用法
1)语法格式
使用“test 表达式”或者[ 表达式 ]都可以,表达式两边至少要留一个空格。
条件测试操作本身不显示出任何信息。测试的条件是否成立主要体现在命令执行后的返回状态(即 ?),所以可以在测试后查看变量?),所以可以在测试后查看变量?),所以可以在测试后查看变量?的值来做出判断,或者结合&&、||等逻辑操作显示出结果(或作其他操作) 。

步骤二:字符串测试
1)== 比较两个字符串是否相同
检查当前用户是否为root。
当root用户执行时:

  1. [root@dyy ~]# [ $USER == “root” ] //测试
  2. [root@dyy ~]# echo $? //查看结果0为对,非0为错
    当普通用户执行时:
  3. [zengye@dyy ~]$ [ $USER == “root” ]
  4. [zengye@dyy ~]$ echo $? //查看结果0为对,非0为错
    2)!= 比较两个字符串是否不相同
    当普通用户执行时:
  5. [zengye@dyy ~]$ [ $USER != “root” ]
    当root用户执行时:
  6. [root@dyy ~]# [ $USER != “root” ]
    3)一行执行多条命令的情况
1.   # A && B                        //仅当A命令执行成功,才执行B命令
2.  # A || B                        //仅当A命令执行失败,才执行B命令
3.  # A ;  B                        //执行A命令后执行B命令,两者没有逻辑关系
4.  # A && B || C                   //思考?
  1. -z 检查变量的值是否未设置(空值)
  1. [root@dyy ~]# var1=“nb” ; var2=""
  2. [root@dyy ~]# [ -z “$var1” ] && echo “空值” || echo “非空值”
  3. 非空值
  4. [root@dyy ~]# [ -z $var2 ] && echo “空值” || echo “非空值”
  5. 空值 //变量var2已设置,但无任何值,视为空
  6. [root@dyy ~]# [ ! -z $var1 ] //测试var1是否为非空
    还有一个-n可以测试变量是否不为空(相当于! -z)。

步骤三:整数值比较
参与比较的必须是整数(可以调用变量),比较非整数值时会出错:
17. [root@dyy ~]# A=20.4
18. [root@dyy ~]# [ $A -gt 10 ] //不支持小数比较
19. -bash: [: 20.4: integer expression expected
1)-eq 比较两个数是否相等。
20. [root@dyy ~]# X=20 //定义一个测试变量
21. [root@dyy ~]# [ $X -eq 20 ] && echo “相等” || echo “不相等”
22. 相等
23. [root@dyy ~]# [ $X -eq 30 ] && echo “相等” || echo “不相等”
24. 不相等
2)-ne 比较两个数是否不相等。
25. [root@dyy ~]# X=20 //定义一个测试变量
26. [root@dyy ~]# [ $X -ne 20 ] && echo “不等于” || echo “等于”
27. 等于
28. [root@dyy ~]# [ $X -ne 30 ] && echo “不等于” || echo “等于”
29. 不等于
3)-gt 比较前面的整数是否大于后面的整数。
30. [root@dyy ~]# X=20 //定义一个测试变量
31. [root@dyy ~]# [ $X -gt 10 ] && echo “大于” || echo “否”
32. 大于
33. [root@dyy ~]# [ $X -gt 20 ] && echo “大于” || echo “否”
34. 否
35. [root@dyy ~]# [ $X -gt 30 ] && echo “大于” || echo “否”
36. 否
4)-ge 比较前面的整数是否大于或等于后面的整数。
37. [root@dyy ~]# X=20 //定义一个测试变量
38. [root@dyy ~]# [ $X -ge 10 ] && echo “大于或等于” || echo “否”
39. 大于或等于
40. [root@dyy ~]# [ $X -ge 20 ] && echo “大于或等于” || echo “否”
41. 大于或等于
42. [root@dyy ~]# [ $X -ge 30 ] && echo “大于或等于” || echo “否”
43. 否
5)-lt 比较前面的整数是否小于后面的整数。
44. [root@dyy ~]# X=20 //定义一个测试变量
45. [root@dyy ~]# [ $X -lt 10 ] && echo “小于” || echo “否”
46. 否
47. [root@dyy ~]# [ $X -lt 20 ] && echo “小于” || echo “否”
48. 否
49. [root@dyy ~]# [ $X -lt 30 ] && echo “小于” || echo “否”
50. 小于
6)-le 比较前面的整数是否小于或等于后面的整数。
51. [root@dyy ~]# X=20 //定义一个测试变量
52. [root@dyy ~]# [ $X -le 10 ] && echo “小于或等于” || echo “否”
53. 否
54. [root@dyy ~]# [ $X -le 20 ] && echo “小于或等于” || echo “否”
55. 小于或等于
56. [root@dyy ~]# [ KaTeX parse error: Expected 'EOF', got '&' at position 12: X -le 30 ] &̲& echo "小于或等于" …(who | wc -l) //赋值给变量N
61. [root@dyy ~]# [ $N -ge 3 ] && echo “超过了” || echo “没超过”
62. 没超过
上述赋值给变量N及与3比较的操作,可以简化为如下形式:
63. [root@dyy ~]# [ $(who | wc -l) -ge 3 ] && echo “超过了” || echo “没超过”
64. 没超过

步骤四:识别文件/目录的状态
1)-e 判断对象是否存在(不管是目录还是文件)
66. [root@dyy ~]# [ -e “/usr/” ] && echo “存在” || echo “不存在”
67. 存在
68. [root@dyy ~]# [ -e “/etc/fstab” ] && echo “存在” || echo “不存在”
69. 存在
70. [root@dyy ~]# [ -e “/home/nooby” ] && echo “存在” || echo “不存在”
71. 不存在
2)-d 判断对象是否为目录(存在且是目录)
72. [root@dyy ~]# [ -d “/usr/” ] && echo “是目录” || echo “不是目录”
73. 是目录
74. [root@dyy ~]# [ -d “/etc/fstab” ] && echo “是目录” || echo “不是目录”
75. 不是目录
76. [root@dyy ~]# [ -d “/home/nooby” ] && echo “是目录” || echo “不是目录”
77. 不是目录
3)-f 判断对象是否为文件(存在且是文件)
78. [root@dyy ~]# [ -f “/usr/” ] && echo “是文件” || echo “不是文件”
79. 不是文件
80. [root@dyy ~]# [ -f “/etc/fstab” ] && echo “是文件” || echo “不是文件”
81. 是文件
82. [root@dyy ~]# [ -f “/home/nooby” ] && echo “是文件” || echo “不是文件”
83. 不是文件
4)-r 判断对象是否可读
此测试对root用户无效,无论文件是否设置r权限,root都可读:
84. [root@dyy ~]# cp /etc/hosts /tmp/test.txt //复制一个文件做测试
85. [root@dyy ~]# chmod -r /tmp/test.txt //去掉所有的r权限
86. [root@dyy ~]# [ -r “/tmp/test.txt” ] && echo “可读” || echo “不可读”
87. 可读 //root测试结果仍然可读
切换为普通用户,再执行相同的测试,结果变为“不可读”:
88. [zengye@dyy ~]$ [ -r “/tmp/test.txt” ] && echo “可读” || echo “不可读”
89. 不可读
5)-w 判断对象是否可写
此测试同样对root用户无效,无论文件是否设置w权限,root都可写:
90. [root@dyy ~]# chmod -w /tmp/test.txt //去掉所有的w权限
91. [root@dyy ~]# ls -l /tmp/test.txt //确认设置结果
92. ---------- 1 root root 33139 12-11 10:43 /tmp/test.txt
93. [root@dyy ~]# [ -w “/tmp/test.txt” ] && echo “可写” || echo “不可写”
94. 可写
切换为普通用户,可以正常使用-w测试:
95. [zengye@dyy ~]$ ls -l /tmp/test.txt
96. ---------- 1 root root 33139 12-11 10:52 /tmp/test.txt
97. [zengye@dyy ~]$ [ -w “/tmp/test.txt” ] && echo “可写” || echo “不可写”
98. 不可写
6)-x 判断对象是否具有可执行权限
这个取决于文件本身、文件系统级的控制,root或普通用户都适用:
99. [root@dyy ~]# chmod 644 /tmp/test.txt //重设权限,无x
100. [root@dyy ~]# ls -l /tmp/test.txt //确认设置结果
101. -rw-r–r-- 1 root root 33139 12-11 10:52 /tmp/test.txt
102. [root@dyy ~]# [ -x “/tmp/test.txt” ] && echo “可执行” || echo “不可执行”
103. 不可执行
104. [root@dyy ~]# chmod +x /tmp/test.txt //添加x权限
105. [root@dyy ~]# [ -x “/tmp/test.txt” ] && echo “可执行” || echo “不可执行”
106. 可执行

步骤五:多个条件/操作的逻辑组合
1)&&,逻辑与
给定条件必须都成立,整个测试结果才为真。
检查变量X的值是否大于10,且小于30:
107. [root@dyy ~]# X=20 //设置X变量的值为20
108. [root@dyy ~]# [ $X -gt 10 ] && [ $X -lt 30 ] && echo “YES”
109. YES
2)||,逻辑或
只要其中一个条件成立,则整个测试结果为真。
只要/tmp/、/var/spool/目录中有一个可写,则条件成立:
110. [root@dyy ~]# [ -w “/tmp/” ] || [ -w “/var/spool/” ] && echo “OK”
111. OK

shell条件测试操作相关推荐

  1. shell条件测试操作 if分支 for循环 while 循环

    目录 条件测试操作 条件测试的基本用法: 字符串条件测试: 逻辑组合 数字的条件测试: 编写一个脚本: 对文件进行测试: if判断语句 单分支 双分支 多分支 编写一个脚本: 编写一个脚本: for循 ...

  2. 测试过程中用shell的地方_Shell脚本应用——条件测试操作

    Shell脚本应用--条件测试操作 前言:在简单的shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程,这就使得脚本过于机械化,不够"智能",难以处理更加 ...

  3. Shell脚本基础 、 使用变量 、 条件测试及选择 、 列表式循环案例

    Shell脚本基础 . 使用变量 . 条件测试及选择 . 列表式循环案例 1 案例1:Shell脚本的编写及测试 1.1 问题 1.2 方案 1.3 步骤 2 案例2:重定向输出的应用 2.1 问题 ...

  4. 数值运算 条件测试 、 if选择结构

    " "双引 引整体 "a b c" != a b c abc == "abc" 以后最好加"",防止出现错误 '' 单引 ...

  5. 网络安全零基础学习视频:条件测试语句和if流程控制语句的使用

    全套学习资料移步至公众号[学神来啦]更多学习资料添加扣扣资源群:661308959 本节所讲内容:   20.1  read命令键盘读取变量的值   20.2  流程控制语句if   20.3  te ...

  6. shell条件语句及循环语句

    if 语句的结构 在 Shell 脚本应用中,if 语句是最为常用的一种流程控制方式,用来根据特定的条件测试结果,分别执行不同的操作(如果--那么--).根据不同的复杂程度,if 语句的选择结构可以分 ...

  7. SHELL编程之条件测试

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.条件测试(1) 1.test测试操作 2.字符串比较 3.整数值比较 4.文本状态测试 二.条件测试(2) 1.控制操作 ...

  8. shell脚本中的特殊变量与if条件测试

    1.特殊变量 实际工作中我们不可避免的遇到一些xxxx.sh脚本文件,实际阅读shell脚本代码时经常会遇到很多特殊变量(例如:$0.$n.$#.$@.$*.$?.$$等),我们常常会被这些特殊符号折 ...

  9. shell脚本详解(二)——条件测试、if语句和case分支语句

    shell脚本详解(二)--条件测试.if语句和case分支语句 一.条件测试 1.test命令 2.文件测试 3.整数值比较 4.字符串比较 5.逻辑测试 二.if条件语句 1.单分支 2.双分支 ...

最新文章

  1. spark 集群单词统计_最近Kafka这么火,聊一聊Kafka:Kafka与Spark的集成
  2. 图神经网络(二)GCN的性质(3)GCN是一个低通滤波器
  3. 南岸焊接机器人厂_造船三部高效焊接工艺技术年鉴
  4. caas k8s主控节点如何查询_k8s--04 部署harbor作为k8s镜像仓库
  5. 12月13日云栖精选夜读 | 干货 :5个提醒,让你远离“数据呆”
  6. Kubernetes复杂吗?Cube-新的容器管理服务产品
  7. Linux 上配置网络设备命令举例
  8. 添加Zabbix Agent客户端,并解决报错。
  9. 输出华氏-摄氏温度转换表(15分)
  10. Django初级手册1-项目和应用的创建与简单的数据库操作
  11. python绘制柱状统计图_Python画柱状统计图操作示例【基于matplotlib库】
  12. Unity DOTween插件和iTween插件使用(笔记)
  13. python appium+夜神模拟器 配置 笔记整理
  14. 简单易懂的现代魔法:Java sun.misc.Unsafe类探秘
  15. 江苏省高等数学竞赛经验分享
  16. 获取字符串被分割后的总数组长度 java 类似UBound()方法
  17. Java 利用hutool工具实现导出excel并合并单元格
  18. 4. Java并发编程-管程
  19. 交互式语音应答(IVR)系统行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  20. InStream和Stream

热门文章

  1. 《CSDN云原生工程师能力认证——IT人才进名企的牵引者》
  2. 【VBA】树控件TreeView的学习(二)
  3. Henry前端笔记之 UI组件库中table与slot相关理解
  4. vue实现钉钉扫码登录第三方网站
  5. C语言100题打卡—第7题
  6. 3月23—3月27日三年级课程
  7. applewatch与服务器连接中断,告诉你Apple Watch连不上iPhone该怎么办
  8. python 挂起_Python Killing挂起函数
  9. 最后一个人可以挽救360和QQ的——马云
  10. 使用Angular的网站