测试文件类型
判断文件属性
选项 | 作用 | 使用实例 |
-e | 判断文件是否存在 | [ -e 文件名 ] |
-f | 判断文件是否存在并且是否是文件(file) | [ -f 文件名 ] |
-d | 判断文件是否存在并且是否是目录文件(directory) | [ -d 文件名 ] |
-c | 判断文件是否存在并且是否是字符设备文件 | [ -c 文件名 ] |
-S | 判断文件是否存在并且是否是Socket文件 | [ -S 文件名 ] |
-p | 判断文件是否存在并且是否是管道文件(fifo pope) | [ -p 文件名 ] |
-L | 判断文件是否存在并且是否是连接文件 | [ -L 文件名 ] |
判断文件权限
选项 | 作用 | 使用实例 |
-r | 判断文件是否具有可读权限 | [ -p 文件名 ] |
-w | 判断文件是否具有可写权限 | [ -w 文件名 ] |
-x | 判断文件是否具有可执行权限 | [ -x 文件名 ] |
-u | 判断文件是否具有SUID权限 | [ -u 文件名 ] |
-g | 判断文件是否具有SGID权限 | [ -g 文件名 ] |
-k | 判断文件是否具有 Sticky bit 权限 | [ -k 文件名 ] |
-s | 判断文件是否存在并且是否是非空白文件 | [ -s 文件名 ] |
文件间的操作
选项 | 作用 | 使用实例 |
-nt | 判断 file1 是否比 file2 新 | [ file1 -nt file2 ] |
-ot | 判断 file1 是否比 file2 旧 | [ file1 -ot file2 ] |
-ef | 判断 file1 和 file2 是否相同 | [ file1 -ef file2 ] |
测试数值
符号 | 作用 | 使用实例 |
num1 -eq num2 | num1和num2是否相等 | [ num1 -eq num2 ] |
num1 -ge num2 | num1是否大于或等于num2 | [ num1 -ge num2 ] |
num1 -gt num2 | num1是否大于num2 | [ num1 -gt num2 ] |
num1 -le num2 | num1是否小于或等于num2 | [ num1 -le num2 ] |
num1 -lt num2 | num1是否小于num2 | [ num1 -lt num2 ] |
num1 -ne num2 | num1是否不等于num2 | [ num1 -ne num2 ] |
(不能使用大于或小于号,否则bash会误认为是重定向符号)
逻辑运算符
运算符号名称 | 作用 | 使用实例 |
! | 如果expression为假,则测试结果为真 | !expression |
-a | 如果expression1和expression2同时为真,则测试结果为真 | expression1 -a expression2 |
-o | 如果expression1和expression2有一个为真,则测试结果为真 | expression1 -o expression2 |
if分支结构
基本结构
基本的if-else结构
if [ 逻辑表达式 ]
then
表达式1
else
表达式2
fi
嵌套结构
嵌套结构
if [ 逻辑表达式1 ]
then
语句1
elif [ 逻辑表达式2 ]
then
语句2
else
语句3
fi
case多条件分支结构
case 变量 in
pattern1 ) commands1;;
pattern2 ) commands2;;
pattern3 ) commands3;;
pattern4 ) commands5;;
pattern* ) commands6;;
esac
循环结构
for-in循环
for 变量 in 取值列表
do
commands;
done
c式for结构
for (expression1; expression2; expression3)
{
循环体;
}
while结构
while [ expression ]
do
commands
done