test命令详解
test命令格式:
test condition
通常,在if-then-else语句中,用[]代替,即[ condition ]。注意:方括号两边都要用空格。
1、数值比较
===========================================================
比 较 描 述
-----------------------------------------------------------
n1 -eq n2 检查n1是否与n2相等 (equal)
n1 -ge n2 检查n1是否大于或等于n2 (greater and equal)
n1 -gt n2 检查n1是否大于n2 (greater than)
n1 -le n2 检查n1是否小于或等于n2 (less and equal)
n1 -lt n2 检查n1是否小于n2 (less than)
n1 -ne n2 检查n1是否不等于n2 (not equal)
===========================================================
例子:
#!/bin/bash val1=10
val2=11 if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
fi if [ $val1 -eq $val2 ]
then
echo "The vaules are equal"
else
echo "The values are different"
fi
2、字符串比较
===========================================================
比 较 描 述
-----------------------------------------------------------
str1 = str2 检查str1是否和str2相同
str1 != str2 检查str1是否和str2不同
str1 < str2 检查str1是否比str2小
str1 > str2 检查str1是否比str2大
-n str1 检查str1的长度是否非0
-z str1 检查str1的长度是否为0
===========================================================
需要注意的是:
- 字符串比较大于小于号必须转义,即加反斜线。
- 字符串比较的顺序是按ASCII表的顺序的,大写字母比小写字母的值小。
文件比较
=======
这是shell编程中最强大的也是最常用到的比较。test命令允许你测试Linux文件系统上文件和目录的状态,如下表:
==================================================================
比 较 描 述
------------------------------------------------------------------
-d file 检查file是否存在并是一个目录
-e file 检查file是否存在
-f file 检查file是否存在并是一个文件
-r file 检查file是否存在并可读
-s file 检查file是否存在并非空
-w file 检查file是否存在并可写
-x file 检查file是否存在并可执行
-O file 检查file是否存在并属当前用户所有
-G file 检查file是否存在并且默认组与当前用户相同
file1 -nt file2 检查file1是否比file2新
file1 -ot file2 检查file1是否比file2旧
==================================================================
3、检查目录
-d测试会检查指定的文件名是否在系统上以目录形式存在。当写文件到某个目录之前,或者是将文件放置到某个目录位置之前时,这会非常有用。
#!/bin/bash
if [ -d $HOME ]
then
echo "Your HOME directory exists"
cd $HOME
ls -a
else
echo "There is a problem with your HOME directory"
fi
上面代码使用了-d测试条件来检查用户的$HOME目录是否存在。如果它存在的话,它将继续使用cd命令来切到$HOME目录并进行显示目录下的文件。
4、检查对象是否存在
-e比较允许你在脚本中使用对象前检查文件或目录对象是否存在:
#!/bin/bash
# checking if a directory exists
if [ -e $HOME ]
then
echo "OK on the directory, now to check the file"
# checking if a file exists
if [ -e $HOME/testing ]
then
# the file exists, append date to it
echo "Appending date to existing file"
date >> $HOME/testing
else
# the file does not exist, create a new file
echo "Creating new file"
echo > $HOME/testing
fi
else
echo "Sorry, you do not have a HOME directory"
fi
5、检查文件
-e比较适用于文件和目录。但要确定指定的对象是个文件,你必须用-f比较:
#!/bin/bash
# check if a file
if [ -e $HOME ]
then
echo "The object exists, is it a file?"
if [ -f $HOME ]
then
echo "Yes, it is a file!"
else
echo "No, it is not a file!"
if [ -f $HOME/.bash_history ]
then
echo "But this is a file!"
fi
fi
else
echo "Sorry, the object does not exist"
fi
6、检查是否可读
在尝试从文件中读取数据之前,最好先测试一下是否能读文件。可以用-r测试。
7、检查空文件
用-s来检查文件是否为空,尤其是在你要删除文件时。当-s比较成功时要特别小心,它说明文件中有数据。
8、检查是否可写
-w比较用来判断你是否对文件有可写权限。
9、检查是否可执行
-x比较是一个简便的断判断你对某个特定文件是否有执行权限的方法。虽然可能大多数命令用不到它,但如果你要在shell中运行大量脚本,它可能很方便。
10、检查所属关系
-O比较允许你轻松地测试你是否是文件的属主。
11、检查默认属组关系
-G比较会检查文件的默认组,如果它匹配了用户的默认组,那就通过了。
最新文章
- 关于一道PHP面试题的解法
- 表中排序ID断开重排
- Android中的桌面快捷方式
- 【转】在Eclipse中配置tomcat
- Nhibernate
- JAVA与数据库开发(JDBC-ODBC、SQL Server、MySQL)
- iOS之隐藏状态栏
- ehcache在windows下使用RMI同步时出现的问题
- 零零碎碎搞了一天最后发现是ruby版本问题
- Linux 静态库与共享库的使用
- 21天教你学会C++
- Global.asax 中校验Session
- c#下载文件选择路径控件
- compatible
- python小练--使用正则表达式将json解析成dict
- Final阶段用户使用报告
- angular-resource版本差异问题
- Ubuntu 14.04服务器安装及软件配置
- select * from v$reserved_words
- Centos下Nagios的安装与配置
热门文章
- Linux下tar.gz 安装
- hdoj1010 奇偶剪枝+DFS
- np.random.randn()、np.random.rand()、np.random.randint()
- eclipse奇怪问题之端口占用记录
- 对ubuntu初学感想
- ecplice中代码使用快捷键无法格式化,使用其他方法将代码格式化的步骤
- requestFullscreen()事件全屏不好使怎么解决
- FSCapture截图软件注册码
- CSV 文件
- 强制另存文件和加扩展名的代码c#