使用专门的测试工具——test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)。
1.什么是条件测试
要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。使用专门的测试工具——test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)。
使用test测试命令时,包括以下两种形式:
test 条件表达式
[ 条件表达式 ]
这两种方式的作用完全相同,但通常后一种形式更为常用,需要注意的是,方括号“[“ 或 ”]”与条件表达式之间需要至少一个空格进行分隔。
2.linux文件类型 Linux 中一切皆为文件,文件类型也有多种,使用 ls -l 命令可以查看文件的属性,所显示结果的第一列的第一个字符用来表明该文件的文件类型,如下:
使用 ls -l 命令后,第一列第一个字符为 "-" 的文件为普通文件,如上图所示,普通文件一般为灰色字体,绿色字体的是可执行文件,红色字体的是压缩文件。
linux的七种文件类型: - 普通文件类型 Linux中最多的一种文件类型, 包括 纯文本文件(ASCII);二进制文件(binary);数据格式的文件(data);各种压缩文件.第一个属性为 [-] - 目录文件 就是目录, 能用 # cd 命令进入的。第一个属性为 [d],例如 [drwxrwxrwx] - 块设备文件 块设备文件 : 就是存储数据以供系统存取的接口设备,简单而言就是硬盘。例如一号硬盘的代码是 /dev/hda1等文件。第一个属性为 [b] - 字符设备 字符设备文件:即串行端口的接口设备,例如键盘、鼠标等等。第一个属性为 [c] - 套接字文件 这类文件通常用在网络数据连接。可以启动一个程序来监听客户端的要求,客户端就可以通过套接字来进行数据通信。第一个属性为 [s],最常在 /var/run目录中看到这种文件类型 - 管道文件 FIFO也是一种特殊的文件类型,它主要的目的是,解决多个程序同时存取一个文件所造成的错误。FIFO是first-in-first-out(先进先出)的缩写。第一个属性为 [p] - 链接文件 类似Windows下面的快捷方式。第一个属性为 [l],例如 [lrwxrwxrwx]
ls-l/ls-ld 命令可以查看文件或者目录。 例如:
[root@iz2zefozq9h39txdb8s7npz download]# ls -ld shelldemo
drwxr-xr-x 2 root root 4096 11月 1 10:37 shelldemo
[root@iz2zefozq9h39txdb8s7npz download]# cd shelldemo
[root@iz2zefozq9h39txdb8s7npz shelldemo]# ls -l hello.sh
-rwxrwxrwx 1 root root 306 11月 1 10:36 hello.sh
3.文件测试 |参数|含义| |-|-| |-e|文件是否存在| |-s|文件是否非空| |-b|是否是块设备文件| |-c|是否是字符设备文件| |-d|是否是目录| |-f|是否是普通文件| |-L|是否是软链接文件| |-S|是否是套接字文件| |-p|是否是管道文件| |-r|是否可读| |-w|是否可写| |-x|是否可执行|
实例:
#创建test.sh脚本文件
touch test.sh
#!/bin/bash
FILE=test.sh
echo "文件名是:$FILE"
test -e $FILE
echo "当前文件是否存在:$?"
test -f $FILE
echo "当前文件是是普通文件:$?"
[ -s $FILE ]
echo "当前文件是否为空:$?"
[ -d $FILE ]
echo "当前文件是否是目录:$?"
[ -r $FILE ]
echo "当前文件是否可读:$?"
[ -w $FILE ]
echo "当前文件是否可写:$?"
[ -x $FILE ]
echo "当前文件是否可执行:$?"
[ -L $FILE ]
echo "当前文件是否是软件链接文件:$?"
[ -S $FILE ]
echo "当前文件是否是套接字文件:$?"
[ -p $FILE ]
echo "当前文件是否是管道文件:$?"
测试运行
[root@iz2zefozq9h39txdb8s7npz shelldemo]# ./test.sh
文件名是:test.sh
当前文件是否存在:0
当前文件是是普通文件:0
当前文件是否为空:0
当前文件是否是目录:1
当前文件是否可读:0
当前文件是否可写:0
当前文件是否可执行:0
当前文件是否是软件链接文件:1
当前文件是否是套接字文件:1
当前文件是否是管道文件:1