在 shell 编程中,[]
通常用于条件测试。
字符串比较:
=
: 字符串相等。!=
: 字符串不相等。if [ "$string1" = "$string2" ]; then
echo "字符串相等"
fi
文件测试:
-e
: 文件或目录是否存在。-f
: 是否为普通文件。-d
: 是否为目录。-s
: 文件是否非空。if [ -e "/path/to/file" ]; then
echo "文件存在"
fi
数字比较:
-eq
: 等于。-ne
: 不等于。-lt
: 小于。-le
: 小于等于。-gt
: 大于。-ge
: 大于等于。if [ "$num1" -eq "$num2" ]; then
echo "数字相等"
fi
文件权限:
-r
: 是否可读。-w
: 是否可写。-x
: 是否可执行。if [ -r "/path/to/file" ]; then
echo "文件可读"
fi
if [ -e "/path/to/file" ]; then
echo "文件存在"
else
echo "文件不存在"
fi
num1=5
num2=10
if [ $num1 -lt $num2 ]; then
echo $num1 小于 $num2
else
echo $num1 不小于 $num2
fi
string1="hello"
string2="world"
if [ "$string1" = "$string2" ]; then
echo "字符串相等"
else
echo "字符串不相等"
fi
if [ -z "$(ls -A /path/to/directory)" ]; then
echo "目录为空"
else
echo "目录不为空"
fi
condition1=true
condition2=false
if [ "$condition1" = true -a "$condition2" = false ]; then
echo "满足逻辑与条件"
else
echo "不满足逻辑与条件"
fi
if [ ! -w "/path/to/file" ]; then
echo "文件不可写"
else
echo "文件可写"
fi
str="abc"
if [ ${#str} -gt 2 ]; then
echo "字符串长度大于2"
else
echo "字符串长度不大于2"
fi
age=25
if [ "$age" -lt 18 -o "$age" -gt 65 ]; then
echo "年龄不在工作范围内"
else
echo "年龄在工作范围内"
fi
dir="/path/to/directory"
if [ -d "$dir" ]; then
echo "是一个目录"
else
echo "不是一个目录"
fi
if [ -w "/path/to/file" -a -r "/path/to/file" ]; then
echo "用户具有读写权限"
else
echo "用户缺少读写权限"
fi
email="user@example.com"
if [[ "$email" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
echo "有效的电子邮件地址"
else
echo "无效的电子邮件地址"
fi
if [ $? -eq 0 ]; then
echo "上一个命令成功执行"
else
echo "上一个命令执行失败"
fi
if [ -z "$my_variable" ]; then
echo "变量未定义"
else
echo "变量已定义"
fi
filename="document.txt"
if [ "$filename" = *.txt ]; then
echo "文件名以 .txt 结尾"
else
echo "文件名不以 .txt 结尾"
fi
if [ $(id -u) -eq 0 ]; then
echo "当前用户是超级用户 (root)"
else
echo "当前用户不是超级用户"
fi
my_array=("item1" "item2")
if [ ${#my_array[@]} -eq 0 ]; then
echo "数组为空"
else
echo "数组不为空"
fi
case
语句进行多条件判断fruit="apple"
case $fruit in
"apple")
echo "这是一个苹果"
;;
"banana")
echo "这是一个香蕉"
;;
*)
echo "未知水果"
;;
esac
directory="/path/to/files"
for file in "$directory"/*; do
if [ -f "$file" ]; then
echo "处理文件: $file"
# 在这里添加你的操作
fi
done
echo "请选择操作: 1) 备份 2) 恢复 3) 退出"
read choice
case $choice in
1)
echo "执行备份操作"
# 在这里添加备份操作的代码
;;
2)
echo "执行恢复操作"
# 在这里添加恢复操作的代码
;;
3)
echo "退出"
;;
*)
echo "无效的选择"
;;
esac
files=( "/path/to/file1" "/path/to/file2" "/path/to/file3" )
for file in "${files[@]}"; do
if [ -e "$file" ]; then
echo "文件: $file"
if [ -r "$file" ]; then
echo "可读"
fi
if [ -w "$file" ]; then
echo "可写"
fi
if [ -x "$file" ]; then
echo "可执行"
fi
echo "---"
else
echo "文件不存在: $file"
fi
done
valid_input=false
while [ "$valid_input" = false ]; do
read -p "请输入一个有效的数字: " number
if [[ "$number" =~ ^[0-9]+$ ]]; then
echo "有效的输入: $number"
valid_input=true
else
echo "无效的输入,请输入一个数字。"
fi
done