目录
一. 测试语法
(1)test 条件表达式
例:
#判断两个字符串是否相等
if test "$str1" = "$str2"; then
echo "字符串相等"
fi
#判断文件是否存在
if test -e "$file"; then
echo "文件存在"
fi
(2)[ 条件表达式 ]
#判断两个字符串是否相等
if [ "$str1" = "$str2" ]; then
echo "字符串相等"; fi
#判断一个整数是否大于另一个整数
if [ $num1 -gt $num2 ]; then
echo "整数大于"; fi
#使用 &&(与)运算符组合多个条件表达式
if [ $num1 -gt 0 ] && [ $num2 -lt 10 ]; then echo "满足条件"; fi
(3)[[ 条件表达式 ]]
用法与单组[ ] 一样,就比在原基础上多一组中括号。
二.逻辑运算符
- &&(逻辑与):当且仅当两边的表达式都为真时,整个表达式的结果才为真。这类似于其他编程语言中的 AND 操作符。
- ||(逻辑或):如果两边的任一表达式为真,则整个表达式的结果为真。这类似于其他编程语言中的 OR 操作符。
- !(逻辑非):用于反转一个表达式的真假值。如果表达式为真,则
!
运算符会使结果变为假,反之亦然。
在使用这些逻辑运算符时,需要注意以下几点:
- 空格:在逻辑运算符和它们所连接的表达式之间必须有空格。例如,
expr1 -a expr2
表示expr1
ANDexpr2
,而expr1 && expr2
表示expr1
ANDexpr2
。 - 转义字符:在进行字符串比较时,由于 shell 中的某些字符(如
>
和<
)有特殊含义,因此需要使用转义字符\
来表示字符串中的这些字符。 - test 命令:
test
命令用于评估表达式,并且可以与逻辑运算符结合使用来构建更复杂的条件。例如,test expr1 -a expr2
会检查expr1
和expr2
是否都为真。 - [] 结构:除了
test
命令,还可以使用[ ]
结构来进行条件测试。在这种结构中,逻辑运算符同样适用,例如[ expr1 -a expr2 ]
三.数值比较
- -eq:等于,用于检查两个数值是否相等。
- -ne:不等于,用于检查两个数值是否不相等。
- -gt:大于,用于检查一个数值是否大于另一个数值。
- -lt:小于,用于检查一个数值是否小于另一个数值。
- -ge:大于或等于,用于检查一个数值是否大于或等于另一个数值。
- -le:小于或等于,用于检查一个数值是否小于或等于另一个数值。
在进行比较时,需要注意以下几点:
- 数据类型:确保进行比较的两个值是相同的数据类型,否则可能会出现意外的结果。
- 空格:在运算符和变量之间需要有空格,这是Shell脚本的语法要求。
- 引号:如果变量的值包含空格或其他特殊字符,需要在变量周围使用引号。
- 逻辑运算符:可以使用逻辑运算符如
&&
(与)、||
(或)和!
(非)来组合多个比较条件。
四.字符串比较
-n
:检查字符串长度是否非零。=
:检查两个字符串是否相同。!=
:检查两个字符串是否不同。<
:检查字符串是否小于另一个字符串,按照字典顺序进行比较。>
:检查字符串是否大于另一个字符串,按照字典顺序进行比较。<=
:检查字符串是否小于或等于另一个字符串,按照字典顺序进行比较。>=
:检查字符串是否大于或等于另一个字符串,按照字典顺序进行比较。
在进行字符串比较时,需要注意以下几点:
- 引号:为了避免路径名扩展和单词拆分,建议在变量周围使用双引号。
- 空格:在
[ ]
结构中,[
后面和]
前面需要有空格。 - 逻辑运算符:可以使用
&&
(与)和||
(或)来组合多个条件表达式。 - 退出状态:
test
命令会根据比较的结果返回不同的退出状态,通常为 0(成功)或 1(失败)。
五.文件测试
- -e:检测文件或目录是否存在,如果存在则返回true。
- -f:检测是否为普通文件(非目录或设备文件),如果是则返回true。
- -d:检测是否为目录,如果是则返回true。
- -b:检测是否为块设备文件,如果是则返回true。
- -c:检测是否为字符设备文件,如果是则返回true。
- -x:检测文件是否可执行,如果是则返回true。
- -s:检测文件大小是否大于0,如果不为空则返回true。
- -r:检测文件是否可读,如果是则返回true。
- -w:检测文件是否可写,如果是则返回true。
- -L:检测文件是否存在且是符号链接,如果是则返回true。
- -n:检测给定的字符串是否非空,如果非空则返回true。
- -z:检测给定的字符串是否为空,如果为空则返回true。
- -a:与逻辑操作符,用于连接测试条件,当所有条件都为真时,返回true。
- -o:或逻辑操作符,用于连接测试条件,当任一条件为真时,返回true。
- !:非逻辑操作符,用于反转测试条件的真假值。
此外,还有一些用于比较两个文件的测试运算符:
- -nt:如果文件1新于文件2,则为true。
- -ot:如果文件1旧于文件2,则为true。