shell script测试命令(test)
shell script测试命令(test)
test命令
检查系统上面某些文件或者相关的属性
常用选项
- test -e :检查该文件名是否存在
例:检查/dmtsai是否存在
[root@localhost scripts1]# test -e dmtsai && echo "exist" || echo "not exist"
not exist
注:检查系统中是否存在 dmtsai这个文件,存在则输出exist不存在则输出not exist
- test -f :该文件名是否存在且为文件
例:检查scripts1是否存在且是否为文件
[root@localhost scripts1]# test -f scripts1 && echo "exist" || echo "not exist"
exist
注:检查系统中是否存在 scripts1这个文件,存在则输出exist不存在则输出not exist
- test -d :该文件名是否存在且为目录
例:检查/etc是否为目录
[root@localhost scripts1]# test -d /etc && echo "exist"|| echo "not exist"
exist
注:检查系统中是否存在 /etc这个文件,存在则输出exist不存在则输出not exist
针对文件的权限检查的常规选项
- test -r :检测文件是否存在且具有“可读”权限(单root权限常有例外)
例:检查根下的家目录中是file是否存在且有可读的权限
[root@station40 ~]# ll
total 24
-rw-------. 1 root root 953 Apr 15 05:16 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Apr 15 05:34 file==
-rw-r--r--. 1 root root 9615 Apr 15 05:16 install.log
-rw-r--r--. 1 root root 3161 Apr 15 05:15 install.log.syslog
-rw-r--r--. 2 root root 0 Apr 16 05:44 lijain
-r--r--r--. 1 root root 95 Apr 15 07:46 lijian.sh
lrwxrwxrwx. 1 root root 6 Apr 16 05:46 lijian.sh1 -> lijain
-rw-r--r--. 2 root root 0 Apr 16 05:44 lijian.sh2
[root@station40 ~]# test -w lijain.sh || echo write
注:考虑到一个文件有其属主和属组还有其他三类权限用户,所以验证test的权限检查选项是否有针对三种用户有不同。可以看出file这个三种用户都有可读权限.
[root@station40 ~]# test -r file && echo read || echo not read
read
现在把属主的读权限去掉
[root@station40 ~]# chmod u-r file
[root@station40 ~]# ll
total 24
-rw-------. 1 root root 953 Apr 15 05:16 anaconda-ks.cfg
--w-r--r--. 1 root root 0 Apr 15 05:34 file
-rw-r--r--. 1 root root 9615 Apr 15 05:16 install.log
-rw-r--r--. 1 root root 3161 Apr 15 05:15 install.log.syslog
-rw-r--r--. 2 root root 0 Apr 16 05:44 lijain
-r--r--r--. 1 root root 95 Apr 15 07:46 lijian.sh
lrwxrwxrwx. 1 root root 6 Apr 16 05:46 lijian.sh1 -> lijain
-rw-r--r--. 2 root root 0 Apr 16 05:44 lijian.sh2
再次检查file文件的可读权限
[root@station40 ~]# test -r file && echo read || echo not read
read
可以知道test权限的检查与属主的权限决定,所以接下来可以依次来验证(属组和其他用户)都可以得出test的权限查看是三类用户只要有一类具有某种权限就认定该文件具有该权限。
[root@station40 ~]# chmod u-r,g-r,o-r file
[root@station40 ~]# ll
total 24
-rw-------. 1 root root 953 Apr 15 05:16 anaconda-ks.cfg
--w-------. 1 root root 0 Apr 15 05:34 file
-rw-r--r--. 1 root root 9615 Apr 15 05:16 install.log
-rw-r--r--. 1 root root 3161 Apr 15 05:15 install.log.syslog
-rw-r--r--. 2 root root 0 Apr 16 05:44 lijain
-r--r--r--. 1 root root 95 Apr 15 07:46 lijian.sh
lrwxrwxrwx. 1 root root 6 Apr 16 05:46 lijian.sh1 -> lijain
-rw-r--r--. 2 root root 0 Apr 16 05:44 lijian.sh2
现在把三类用户的可读权限全部去掉在使用test检查该文件的可读权限,分析结果应该是输出 not read
[root@station40 ~]# test -r file && echo read || echo not read
read
从上述结果可以看出与猜想的结果存在差异。这就是归结为test该命令的特性。因为刚才实行命令都是在root的权限下实现,所以现在切换至普通用户再进行检测file的可读性
[lijian@station40 root]$ test -r file && echo read || echo not read
not read
在切换至普通用户后再对file这个文件进行test -r的检测显示结果为不可读。所以同理test的其他检查权限的选项都类似。
整数数值的比较(test n1 option n2)
- test n1 -eq n2 比较两个整数数值是否相等
[lijian@station40 root]$ test 4 -eq 5 || echo error
error
[lijian@station40 root]$ test 5 -eq 5 && echo correct|| echo error
correct
上面的验证可以看出test在整数之间的大小比较用法
- test n1 -gt n2比较n1是否大于n2
[lijian@station40 root]$ test 5 -gt 2 && echo greater than|| echo error
greater than
[lijian@station40 root]$ test 0 -gt 2 && echo greater than|| echo error
error
对于数值比较方式方法都与上述较为类似故不做具体陈述
判定字符串的数据
- Test -z string判定字符串是否为0,若string为空字符串,则为true
[lijian@station40 root]$ test -z jjj && echo correct || echo error
error
[lijian@station40 root]$ test -z && echo correct || echo error
correct
可以看出对于非空字符和空字符都可以检查出来
多重条件判定
- test -r file -a -x file(文件同时具有可读可执行权限时为正确)
[root@station40 ~]# ll
total 24
-rw-------. 1 root root 953 Apr 15 05:16 anaconda-ks.cfg
--w-------. 1 root root 0 Apr 15 05:34 file
-rw-r--r--. 1 root root 9615 Apr 15 05:16 install.log
-rw-r--r--. 1 root root 3161 Apr 15 05:15 install.log.syslog
-rw-r--r--. 2 root root 0 Apr 16 05:44 lijain
-r--r--r--. 1 root root 95 Apr 15 07:46 lijian.sh
lrwxrwxrwx. 1 root root 6 Apr 16 05:46 lijian.sh1 -> lijain
-rw-r--r--. 2 root root 0 Apr 16 05:44 lijian.sh2
[root@station40 ~]# test -r lijain -a -r lijain
[root@station40 ~]# echo $?
0
可以看出lijain这个文件是具有可读可写权限的所以-a就可以回传正确。反之如下
[lijian@station40 root]$ test -w file -a -r file
[lijian@station40 root]$ echo $?
1
shell script测试命令(test)的更多相关文章
- shell及脚本4——shell script
一.格式 1.1 开头 必须以 "# !/bin/bash" 开头,告诉系统这是一个bash shell脚本.注意#与!中间有空格. 二.语法 2.1 数值运算 可以用decla ...
- shell script
一.shell script的编写与执行 1.shell script 的编写中还需要用到下面的注意事项: a.命令的执行是从上到下,从左到右地分析与执行 b.命令.参数间的多个空白都会被忽略掉 c. ...
- (copy) Shell Script to Check Linux System Health
source: http://linoxide.com/linux-shell-script/shell-script-check-linux-system-health/ This article ...
- shell script练习
执行脚本的几种方式: 1. sh a.sh 或者 bash a.sh 调用的是 /bin/bash 进程执行的,所以脚本不需要执行权限. 2. 直接使用绝对路径执行, /home/script/a ...
- 这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script
这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4378224.html ...
- CentOS Linux下一个tomcat起停,查看日志的shell script
CentOS 的tomcat安装目录:/usr/local/tomcat vi MyTomcatUitl.sh 创建文件chmod u+x MyTomcatUtil.sh 赋执行 ...
- Shell script for logging cpu and memory usage of a Linux process
Shell script for logging cpu and memory usage of a Linux process http://www.unix.com/shell-programmi ...
- shell script入门
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- shell script 的追踪与 debug
shell script 的追踪与 debug scripts 在运行之前,最怕的就是出现语法错误的问题了!那么我们如何 debug 呢?有没有办法不需要透过直接运行该 scripts 就可以来判断是 ...
随机推荐
- 使用Eclipse Egit与码云管理你的代码
总体流程: 建立远程仓库 建立本地仓库并与远程仓库关联 将Eclipse中的项目提交到本地仓库并进而push到远程仓库 一. 配置Eclipse EGit 图解Eclipse中安装及配置EGit插件中 ...
- 201521123008《Java程序设计》第二周实验总结
本周学习总结 ① 数据类型,其中char是占用两个字节的内存空间,其他和以前学过的一样.除了十进制位,整型也可以用八进制或者十六进制表示.浮点型不精确. ②运算符,算术,赋值,逻辑,位运算. ③str ...
- 设置文件opendilag、savedilog默认路径和文件类型
dlgSave1.Filter:='文件.txt|*.txt;|word文件|*.doc,*.docx'; dlgSave1.InitialDir:=GetCurrentDir; //设置为当前路径 ...
- Linux文件管理_1
在Linux中,全部都是文件,所以文件管理在Linux上格外重要,在我们学习文件管理前,我们先学习几个关于文件的命令,之后才能更好的学习文件管理. 目录 pwd命令 cd命令 列出文件内容ls 查看文 ...
- Mysql中的like模糊查询
MySql的like语句中的通配符:百分号.下划线和escape %代表任意多个字符 _代表一个字符 escape,转义字符后面的%或_,使其不作为通配符,而是普通字符匹配 数据库数据如下: 1. ...
- 开天辟地-用visualstudio2010编写helloworld
安装好visual之后,创建新项目 向源文件添加helloworld.cpp 编写helloworld代码,编译运行即可 在运行时候出现一个错误,错误和解决方法如下:
- NameError: name 'messagebox' is not defined 错误处理
写了段代码,想在按下button的时候跳个提示框出来,调试的时候提示了messagebox未定义 from tkinter import * def test_show(): messagebox.s ...
- oracle 权限
一.介绍这一部分我们主要看看oracle中如何管理权限和角色,权限和角色的区别在哪里.当刚刚建立用户时,用户没有任何权限,也不能执行任何操作.如果要执行某种特定的数据库操作,则必须为其授予系统的权限: ...
- escape()、encodeURI()、encodeURIComponent()区别详解(转)
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,dec ...
- 读Zepto源码之IOS3模块
IOS3 模块是针对 IOS 的兼容模块,实现了两个常用方法的兼容,这两个方法分别是 trim 和 reduce . 读 Zepto 源码系列文章已经放到了github上,欢迎star: readin ...