文件测试运算符
文件测试运算符用于检测Unix文件的各种属性
-b (file) | 检测文件是否是块设备文件,如果是,则返回true,举例:[-b $file]返回false |
---|---|
-c file | 检测文件是否是字符设备文件,如果是,则返回true,举例:[-c $file] 返回false |
-d file | 检测文价是否是目录,如果是,则返回true。举例:[-d $file] 返回false |
-f file | 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回true。举例:[-f $file] 返回true |
-g file | 检测文件是否设置了SGID位,如果是,则返回true。举例:[-g $file] 返回false |
-k file | 检测文件是否设置了粘着位(sticky bit),如果是,则返回true。举例:[-k $file] 返回false |
-p file | 检测文件是否是有名管道,如果是,则返回true。举例:[-p $file] 返回false |
-u file | 检测文件是否设置了SUID位,如果是,则返回true。举例[-u $file] 返回false |
-r file | 检测文件是否可读,如果是,则返回true. 举例:[-r $file] 返回true |
-w file | 检测文件是否可写,如果是,则返回true。举例:[-w $file] |
-x file | 检测文件是否可执行,如果是,则返回true。举例:[-x $file] 返回true |
-s file | 检测文件是否为空(文件大小是否大于0),不为空返回true。举例:[-s $file] 返回true |
-e file | 检测文件(包括目录)是否存在,如果是,则返回true,举例:[-e $file] 返回true |
其他检查符:
-S: 判断某文件是否socket。
-L:检测文件是否存在并且是一个符号链接。
if [ -e $file ]
then
echo "文件存在"
else
echo "文件不存在"
fi
Shell test 命令
test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试
文件测试
-e 文件名 | 如果文件存在则为真 |
---|---|
-r 文件名 | 如果文件存在且可读则为真 |
-w 文件名 | 如果文件存在且可写为真 |
-x 文件名 | 如果文件存在且可执行则为真 |
-s 文件名 | 如果文件存在且至少有一个字符则为真 |
-d 文件名 | 如果文件存在且为目录则为真 |
-f 文件名 | 如果文件存在且为普通文件则文件为真 |
-c 文件名 | 如果文件存在且为字符型特殊文件则为真 |
-b 文件名 | 如果文件存在且为快特殊文件则为真 |
字符串测试
参数 | 说明 |
---|---|
= | 等于则为真 |
!= | 不相等则为真 |
-z 字符串 | 字符串的长度为零则为真 |
-n 字符串 | 字符串的长度不为零则为真 |
cd /bin
if test -e ./bash
then
echo '文件已存在!'
else
echo '文件不存在!'
fi
输出结果:
文件已存在!
另外,Shell还提供了与(-a)、或(-o)、非(!)三个逻辑操作符用于将测试条件连接起来,其优先级为: ! 最高、-a 次之,-o 最低.例如:
cd /bin
if test -e ./notFile -o -e ./bash
then
echo '至少有一个文件存在'
else
echo '两个文件都不存在'
fi
输出结果:
至少有一个文件存在
if test !-e ${file};
then
mkdir ${file}
fi
如果文件(file)不存在,就创建(file)文件
Shell输入/输出重定向
大多数UNIX系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
重定向命令列表如下:
命令 | 说明 |
---|---|
command > file | 将输出重定向到file |
command < file | 将输入重定向到file |
command >> file | 将输出以追加的方式重定向到file |
n > file | 将文件描述符为n的文件重定向到file |
n >> file | 将文件描述符为n的文件以追加的方式重定向到file |
n >& m | 将输出文件m和n合并 |
n <& m | 将输入文件m和n合并 |
<< tag | 将开始标记tag和结束标记tag之间的内容作为输入 |
Shell文件包含
和其他语言一样,Shell也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
Shell文件包含的语法格式如下:
. filename #注意点好(.)和文件名中间有一个空格
或
source filename
ming1.sh code 如下:
#!/bin/bash
url="http://www.runoob.com"
ming2.sh code 如下:
#!/bin/bash
#使用 . 号来引用ming1.sh 文件
. ./ming1.sh
#或者使用以下包含文件code
#source ./ming1.sh
echo "网址:$url"
接下来,为ming2.sh添加可执行权限并执行:
$ chmod +x ming2.sh
$./ming2.sh
网址:http://www.runoob.com
注:被包含的文件ming1.sh不需要可执行权限。