选择语句
在Shell编程中,选择语句用于根据条件执行不同的代码块。Shell脚本中最常用的选择语句是if
语句,它允许你根据条件测试的结果来执行不同的代码路径。此外,case
语句也是Shell脚本中常用的选择结构,它允许你根据变量的值匹配多个模式,并执行相应的代码块。
if 语句
if
语句的基本语法如下:
if [ condition ]; then
# code to execute if condition is true
elif [ another_condition ]; then
# code to execute if another_condition is true
else
# code to execute if none of the above conditions are true
fi
其中,condition
是一个条件表达式,它可以是算术比较、字符串比较或文件测试。then
关键字后面跟着的是当条件为真时要执行的命令。elif
是“else if”的缩写,允许你指定额外的条件。else
部分包含当所有前面的条件都不为真时要执行的命令。fi
表示if
语句的结束。
case 语句
case
语句允许你根据变量的值匹配多个模式,并执行相应的代码块。它的基本语法如下:
case variable in
pattern1)
# code to execute if variable matches pattern1
;;
pattern2)
# code to execute if variable matches pattern2
;;
*)
# code to execute if variable does not match any of the above patterns
;;
esac
其中,variable
是要匹配的变量,pattern1
、pattern2
等是模式,可以是具体的字符串或通配符表达式。每个模式后面的)
和;;
之间是要执行的命令。*)
是一个通配模式,用于匹配任何未在前面模式中指定的值。esac
是case
语句的结束标记,它是case
倒过来写的。
示例
以下是一个使用if
语句的示例:
#!/bin/bash
num=10
if [ $num -gt 5 ]; then
echo "Number is greater than 5"
elif [ $num -eq 5 ]; then
echo "Number is equal to 5"
else
echo "Number is less than 5"
fi
以下是一个使用case
语句的示例:
#!/bin/bash
day=$(date +%u) # 获取星期几,1代表星期一,7代表星期日
case $day in
1)
echo "Today is Monday"
;;
2)
echo "Today is Tuesday"
;;
3)
echo "Today is Wednesday"
;;
4)
echo "Today is Thursday"
;;
5)
echo "Today is Friday"
;;
6)
echo "Today is Saturday"
;;
7)
echo "Today is Sunday"
;;
*)
echo "Invalid day"
;;
esac
这两个示例展示了如何在Shell脚本中使用if
和case
语句来根据条件执行不同的代码块。
常用的文件比较符
-e 判断对象是否存在
-d 判断对象是否存在,并且为目录
-f 判断对象是否存在,并且为常规文件
-L 判断对象是否存在,并且为符号链接
-h 判断对象是否存在,并且为软链接
-s 判断对象是否存在,并且长度不为0
-r 判断对象是否存在,并且可读
-w 判断对象是否存在,并且可写
-x 判断对象是否存在,并且可执行
-O 判断对象是否存在,并且属于当前用户
-G 判断对象是否存在,并且属于当前用户组
-nt 判断file1是否比file2新 [ "/data/file1" -nt "/data/file2" ]
-ot 判断file1是否比file2旧 [ "/data/file1" -ot "/data/file2" ]
示例
判断文件是否存在
if [ -d "/etc" ]; then
echo "dir /etc is exist"
else
echo "dir /etc is not exist"
fi