问题
本案例要求参考PPT上的示例,分别练习以下条件测试操作:
识别文件/目录的状态
比较整数值的大小
字符串匹配
多个条件/操作的逻辑组合
步骤
实现此案例需要按照如下步骤进行。
步骤一:条件测试的基本用法
1)一般用法
使用“test 表达式”或者[ 表达式 ]都可以,表达式两边至少要留一个空格。比如,判断变量X的值是否大于5,操作如下:
[root@svr5 ~]# X=10
[root@svr5 ~]# test $X -gt 5
上述test测试也可改用 [ ]方式(推荐用这种方式):
[root@svr5 ~]# [ $X -gt 5 ]
[root@svr5 ~]#
条件测试操作本身不显示出任何信息。测试的条件是否成立主要体现在命令执行后的返回状态(即
?
)
,
所
以
可
以
在
测
试
后
查
看
变
量
?),所以可以在测试后查看变量
?),所以可以在测试后查看变量?的值来做出判断,或者结合&&、||等逻辑操作显示出结果(或作其他操作) 。
比如,分别测试变量X的值(10)是否大于5、是否大于20:
[root@svr5 ~]# [ $X -gt 5 ]
[root@svr5 ~]# echo $?
0 //返回值为0,说明测试的条件成立
[root@svr5 ~]# [ $X -gt 20 ]
[root@svr5 ~]# echo $?
1 //返回值不为0,说明测试的条件不成立
或者,结合逻辑分隔更直接的给出结果:
[root@svr5 ~]# [ $X -gt 5 ] && echo “YES” || echo “NO”
YES //因为10>5,所以 YES
[root@svr5 ~]# [ KaTeX parse error: Expected 'EOF', got '&' at position 12: X -gt 20 ] &̲& echo "YES" ||…?。比如,若要检查一个软件包是否安装,正常可以执行“rpm -q 软件名”查询,人工可以直接看显示结果,脚本却没有那么智能,怎么办呢,就看返回值
?
。
比
如
,
分
别
查
询
一
个
已
安
装
的
包
、
未
安
装
的
包
,
?。 比如,分别查询一个已安装的包、未安装的包,
?。比如,分别查询一个已安装的包、未安装的包,? 返回值是不同的:
[root@svr5 ~]# rpm -q httpd
httpd-2.2.3-74.el5
[root@svr5 ~]# echo $?
0
[root@svr5 ~]# rpm -q nginx
package nginx is not installed
[root@svr5 ~]# echo KaTeX parse error: Expected 'EOF', got '#' at position 38: …: [root@svr5 ~]#̲ rpm -q httpd &… [ -r “/tmp/rtest.txt” ] && echo “可读” || echo “不可读”
不可读
普通用户只对自己拥有r权限的文件或目录,-r测试时结果才成立:
[zengye@svr5 ~]$ ls -l .bashrc
-rw-r–r-- 1 zengye zengye 124 09-24 16:44 .bashrc
[zengye@svr5 ~]$ [ -r “.bashrc” ] && echo “可读” || echo “不可读”
可读
5)-w 判断对象是否可写
此测试同样对root用户无效,无论文件是否设置w权限,root都可写:
[root@svr5 ~]# chmod -w /tmp/rtest.txt //去掉所有的w权限
[root@svr5 ~]# ls -l /tmp/rtest.txt //确认设置结果
---------- 1 root root 33139 12-11 10:43 /tmp/rtest.txt
[root@svr5 ~]# [ -w “/tmp/rtest.txt” ] && echo “可写” || echo “不可写”
可写
切换为普通用户,可以正常使用-w测试:
[zengye@svr5 ~]$ ls -l /tmp/rtest.txt
---------- 1 root root 33139 12-11 10:52 /tmp/rtest.txt
[zengye@svr5 ~]$ [ -w “/tmp/rtest.txt” ] && echo “可写” || echo “不可写”
不可写
[zengye@svr5 ~]$ ls -l .bashrc
-rw-r–r-- 1 zengye zengye 124 09-24 16:44 .bashrc
[zengye@svr5 ~]$ [ -w “.bashrc” ] && echo “可写” || echo “不可写”
可写
6)-x 判断对象是否具有可执行权限
这个取决于文件本身、文件系统级的控制,root或普通用户都适用:
[root@svr5 ~]# chmod 644 /tmp/rtest.txt //重设权限,无x
[root@svr5 ~]# ls -l /tmp/rtest.txt //确认设置结果
-rw-r–r-- 1 root root 33139 12-11 10:52 /tmp/rtest.txt
[root@svr5 ~]# [ -x “/tmp/rtest.txt” ] && echo “可执行” || echo “不可执行”
不可执行
[root@svr5 ~]# chmod +x /tmp/rtest.txt //添加x权限
[root@svr5 ~]# [ -x “/tmp/rtest.txt” ] && echo “可执行” || echo “不可执行”
可执行
条件测试操作 命令一
最新推荐文章于 2023-08-13 11:52:53 发布