Shell脚本的分支结构,循环结构与测试命令

测试文件类型

判断文件属性

选项 作用 使用实例
-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

猜你喜欢

转载自blog.csdn.net/qq_41419761/article/details/84034004