案例2:条件测试操作

案例2:条件测试操作

2.1 问题
本案例要求参考PPT上的示例,分别练习以下条件测试操作:
• 字符串匹配
• 比较整数值的大小
• 识别文件/目录的状态
• 多个条件/操作的逻辑组合
2.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:条件测试的基本用法
1)语法格式
使用“test 表达式”或者[ 表达式 ]都可以,表达式两边至少要留一个空格。
条件测试操作本身不显示出任何信息。测试的条件是否成立主要体现在命令执行后的返回状态(即 ? ) , 所 以 可 以 在 测 试 后 查 看 变 量 ?),所以可以在测试后查看变量 ??的值来做出判断,或者结合&&、||等逻辑操作显示出结果(或作其他操作) 。
步骤二:字符串测试
1)== 比较两个字符串是否相同
检查当前用户是否为root。
当root用户执行时:

  1. [root@svr5 ~]# [ $USER == “root” ] //测试
  2. [root@svr5 ~]# echo $? //查看结果0为对,非0为错
    当普通用户执行时:
  3. [zengye@svr5 ~]$ [ $USER == “root” ]
  4. [zengye@svr5 ~]$ echo $? //查看结果0为对,非0为错
    2)!= 比较两个字符串是否不相同
    当普通用户执行时:
  5. [zengye@svr5 ~]$ [ $USER != “root” ]
    当root用户执行时:
  6. [root@svr5 ~]# [ $USER != “root” ]
    3)一行执行多条命令的情况
  7. A && B //仅当A命令执行成功,才执行B命令

  8. A || B //仅当A命令执行失败,才执行B命令

  9. A ; B //执行A命令后执行B命令,两者没有逻辑关系

  10. A && B || C //思考?

  1. -z 检查变量的值是否未设置(空值)
  1. [root@svr5 ~]# var1=“nb” ; var2=""
  2. [root@svr5 ~]# [ -z “$var1” ] && echo “空值” || echo “非空值”
  3. 非空值
  4. [root@svr5 ~]# [ -z $var2 ] && echo “空值” || echo “非空值”
  5. 空值 //变量var2已设置,但无任何值,视为空
  6. [root@svr5 ~]# [ ! -z $var1 ] //测试var1是否为非空
    还有一个-n可以测试变量是否不为空(相当于! -z)。
    步骤三:整数值比较
    参与比较的必须是整数(可以调用变量),比较非整数值时会出错:
  7. [root@svr5 ~]# A=20.4
  8. [root@svr5 ~]# [ $A -gt 10 ] //不支持小数比较
  9. -bash: [: 20.4: integer expression expected
    1)-eq 比较两个数是否相等。
  10. [root@svr5 ~]# X=20 //定义一个测试变量
  11. [root@svr5 ~]# [ $X -eq 20 ] && echo “相等” || echo “不相等”
  12. 相等
  13. [root@svr5 ~]# [ $X -eq 30 ] && echo “相等” || echo “不相等”
  14. 不相等
    2)-ne 比较两个数是否不相等。
  15. [root@svr5 ~]# X=20 //定义一个测试变量
  16. [root@svr5 ~]# [ $X -ne 20 ] && echo “不等于” || echo “等于”
  17. 等于
  18. [root@svr5 ~]# [ $X -ne 30 ] && echo “不等于” || echo “等于”
  19. 不等于
    3)-gt 比较前面的整数是否大于后面的整数。
  20. [root@svr5 ~]# X=20 //定义一个测试变量
  21. [root@svr5 ~]# [ $X -gt 10 ] && echo “大于” || echo “否”
  22. 大于
  23. [root@svr5 ~]# [ $X -gt 20 ] && echo “大于” || echo “否”
  24. [root@svr5 ~]# [ $X -gt 30 ] && echo “大于” || echo “否”

  25. 4)-ge 比较前面的整数是否大于或等于后面的整数。
  26. [root@svr5 ~]# X=20 //定义一个测试变量
  27. [root@svr5 ~]# [ $X -ge 10 ] && echo “大于或等于” || echo “否”
  28. 大于或等于
  29. [root@svr5 ~]# [ $X -ge 20 ] && echo “大于或等于” || echo “否”
  30. 大于或等于
  31. [root@svr5 ~]# [ $X -ge 30 ] && echo “大于或等于” || echo “否”

  32. 5)-lt 比较前面的整数是否小于后面的整数。
  33. [root@svr5 ~]# X=20 //定义一个测试变量
  34. [root@svr5 ~]# [ $X -lt 10 ] && echo “小于” || echo “否”
  35. [root@svr5 ~]# [ $X -lt 20 ] && echo “小于” || echo “否”
  36. [root@svr5 ~]# [ $X -lt 30 ] && echo “小于” || echo “否”
  37. 小于
    6)-le 比较前面的整数是否小于或等于后面的整数。
  38. [root@svr5 ~]# X=20 //定义一个测试变量
  39. [root@svr5 ~]# [ $X -le 10 ] && echo “小于或等于” || echo “否”
  40. [root@svr5 ~]# [ $X -le 20 ] && echo “小于或等于” || echo “否”
  41. 小于或等于
  42. [root@svr5 ~]# [ $X -le 30 ] && echo “小于或等于” || echo “否”
  43. 小于或等于
    7)提取当前登录的用户数,比较是否大于等于3。
  44. [root@svr5 ~]# who | wc -l //确认已登录的用户数
  45. 2
  46. [root@svr5 ~]# N=$(who | wc -l) //赋值给变量N
  47. [root@svr5 ~]# [ $N -ge 3 ] && echo “超过了” || echo “没超过”
  48. 没超过
    上述赋值给变量N及与3比较的操作,可以简化为如下形式:
  49. [root@svr5 ~]# [ $(who | wc -l) -ge 3 ] && echo “超过了” || echo “没超过”
  50. 没超过
    步骤四:识别文件/目录的状态
    1)-e 判断对象是否存在(不管是目录还是文件)
  51. [root@svr5 ~]# [ -e “/usr/” ] && echo “存在” || echo “不存在”
  52. 存在
  53. [root@svr5 ~]# [ -e “/etc/fstab” ] && echo “存在” || echo “不存在”
  54. 存在
  55. [root@svr5 ~]# [ -e “/home/nooby” ] && echo “存在” || echo “不存在”
  56. 不存在
    2)-d 判断对象是否为目录(存在且是目录)
  57. [root@svr5 ~]# [ -d “/usr/” ] && echo “是目录” || echo “不是目录”
  58. 是目录
  59. [root@svr5 ~]# [ -d “/etc/fstab” ] && echo “是目录” || echo “不是目录”
  60. 不是目录
  61. [root@svr5 ~]# [ -d “/home/nooby” ] && echo “是目录” || echo “不是目录”
  62. 不是目录
    3)-f 判断对象是否为文件(存在且是文件)
  63. [root@svr5 ~]# [ -f “/usr/” ] && echo “是文件” || echo “不是文件”
  64. 不是文件
  65. [root@svr5 ~]# [ -f “/etc/fstab” ] && echo “是文件” || echo “不是文件”
  66. 是文件
  67. [root@svr5 ~]# [ -f “/home/nooby” ] && echo “是文件” || echo “不是文件”
  68. 不是文件
    4)-r 判断对象是否可读
    此测试对root用户无效,无论文件是否设置r权限,root都可读:
  69. [root@svr5 ~]# cp /etc/hosts /tmp/test.txt //复制一个文件做测试
  70. [root@svr5 ~]# chmod -r /tmp/test.txt //去掉所有的r权限
  71. [root@svr5 ~]# [ -r “/tmp/test.txt” ] && echo “可读” || echo “不可读”
  72. 可读 //root测试结果仍然可读
    切换为普通用户,再执行相同的测试,结果变为“不可读”:
  73. [zengye@svr5 ~]$ [ -r “/tmp/test.txt” ] && echo “可读” || echo “不可读”
  74. 不可读
    5)-w 判断对象是否可写
    此测试同样对root用户无效,无论文件是否设置w权限,root都可写:
  75. [root@svr5 ~]# chmod -w /tmp/test.txt //去掉所有的w权限
  76. [root@svr5 ~]# ls -l /tmp/test.txt //确认设置结果
  77. ---------- 1 root root 33139 12-11 10:43 /tmp/test.txt
  78. [root@svr5 ~]# [ -w “/tmp/test.txt” ] && echo “可写” || echo “不可写”
  79. 可写
    切换为普通用户,可以正常使用-w测试:
  80. [zengye@svr5 ~]$ ls -l /tmp/test.txt
  81. ---------- 1 root root 33139 12-11 10:52 /tmp/test.txt
  82. [zengye@svr5 ~]$ [ -w “/tmp/test.txt” ] && echo “可写” || echo “不可写”
  83. 不可写
    6)-x 判断对象是否具有可执行权限
    这个取决于文件本身、文件系统级的控制,root或普通用户都适用:
  84. [root@svr5 ~]# chmod 644 /tmp/test.txt //重设权限,无x
  85. [root@svr5 ~]# ls -l /tmp/test.txt //确认设置结果
  86. -rw-r–r-- 1 root root 33139 12-11 10:52 /tmp/test.txt
  87. [root@svr5 ~]# [ -x “/tmp/test.txt” ] && echo “可执行” || echo “不可执行”
  88. 不可执行
  89. [root@svr5 ~]# chmod +x /tmp/test.txt //添加x权限
  90. [root@svr5 ~]# [ -x “/tmp/test.txt” ] && echo “可执行” || echo “不可执行”
  91. 可执行
    步骤五:多个条件/操作的逻辑组合
    1)&&,逻辑与
    给定条件必须都成立,整个测试结果才为真。
    检查变量X的值是否大于10,且小于30:
  92. [root@svr5 ~]# X=20 //设置X变量的值为20
  93. [root@svr5 ~]# [ $X -gt 10 ] && [ $X -lt 30 ] && echo “YES”
  94. YES
    2)||,逻辑或
    只要其中一个条件成立,则整个测试结果为真。
    只要/tmp/、/var/spool/目录中有一个可写,则条件成立:
  95. [root@svr5 ~]# [ -w “/tmp/” ] || [ -w “/var/spool/” ] && echo “OK”
  96. OK
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值