本文目录导读:

在Shell脚本中,条件执行和判断结果主要通过条件判断语句和逻辑运算符来实现,以下是完整的指南:
基础条件判断语法
if-else 语句
#!/bin/bash
if [ condition ]; then
# 条件成立时执行
elif [ condition2 ]; then
# 条件2成立时执行
else
# 所有条件都不成立时执行
fi
条件表达式类型
文件测试
if [ -f "file.txt" ]; then # 判断是否是普通文件
echo "是普通文件"
fi
if [ -d "directory" ]; then # 判断是否是目录
echo "是目录"
fi
if [ -e "path" ]; then # 判断路径是否存在
echo "路径存在"
fi
if [ -s "file" ]; then # 文件非空
echo "文件非空"
fi
字符串比较
if [ "$str1" = "$str2" ]; then # 字符串相等(注意:单个=)
echo "相等"
fi
if [ "$str1" != "$str2" ]; then # 字符串不相等
echo "不相等"
fi
if [ -z "$str" ]; then # 字符串为空
echo "空字符串"
fi
if [ -n "$str" ]; then # 字符串非空
echo "非空字符串"
fi
数字比较
if [ "$num1" -eq "$num2" ]; then # 等于
echo "相等"
fi
if [ "$num1" -ne "$num2" ]; then # 不等于
echo "不相等"
fi
if [ "$num1" -gt "$num2" ]; then # 大于
echo "大于"
fi
if [ "$num1" -lt "$num2" ]; then # 小于
echo "小于"
fi
if [ "$num1" -ge "$num2" ]; then # 大于等于
echo "大于等于"
fi
if [ "$num1" -le "$num2" ]; then # 小于等于
echo "小于等于"
fi
逻辑运算符
AND(与)
# 方式1:-a 或 &&
if [ condition1 -a condition2 ]; then
echo "两个条件都成立"
fi
# 方式2:使用双中括号
if [[ condition1 && condition2 ]]; then
echo "两个条件都成立"
fi
OR(或)
# 方式1:-o 或 ||
if [ condition1 -o condition2 ]; then
echo "至少一个条件成立"
fi
# 方式2:使用双中括号
if [[ condition1 || condition2 ]]; then
echo "至少一个条件成立"
fi
NOT(非)
if [ ! condition ]; then
echo "条件不成立"
fi
命令执行结果判断
使用 $? 判断命令退出状态
# 检查命令是否成功执行
ls /etc/passwd
if [ $? -eq 0 ]; then
echo "命令执行成功"
else
echo "命令执行失败"
fi
直接使用命令作为条件
# 命令成功执行(退出码为0)则条件为真
if ls /etc/passwd > /dev/null 2>&1; then
echo "文件存在"
fi
# 使用 grep
if grep -q "pattern" file.txt; then
echo "找到匹配"
fi
高级条件写法
使用双中括号 [[]](推荐)
# 支持正则匹配
if [[ $str =~ ^[0-9]+$ ]]; then
echo "全是数字"
fi
# 支持模式匹配
if [[ $filename == *.txt ]]; then
echo "是txt文件"
fi
# 更安全的字符串比较
if [[ $var == "" ]]; then
echo "变量为空"
fi
算术比较
# 使用 (( )) 进行算术运算
if (( num1 > num2 )); then
echo "$num1 大于 $num2"
fi
# 复合条件
if (( num1 > 10 && num2 < 20 )); then
echo "两个条件都满足"
fi
case 多分支判断
case $variable in
pattern1)
# 匹配pattern1
;;
pattern2|pattern3)
# 匹配pattern2或pattern3
;;
[0-9]*)
# 以数字开头
;;
*)
# 默认情况
;;
esac
实际示例
#!/bin/bash
# 判断文件并执行操作
check_and_run() {
local file=$1
# 使用多个条件的复合判断
if [[ -f "$file" && -r "$file" ]]; then
echo "文件可读"
# 检查文件大小
if [[ -s "$file" ]]; then
echo "文件非空,处理中..."
# 执行命令并判断结果
if wc -l "$file" > /dev/null 2>&1; then
lines=$(wc -l < "$file")
echo "文件行数: $lines"
fi
else
echo "文件为空"
fi
elif [[ ! -e "$file" ]]; then
echo "文件不存在"
else
echo "文件存在但不可读"
fi
}
# 调用函数
check_and_run "/etc/passwd"
最佳实践建议
- 变量引用:总是用双引号包裹变量
"$var" - 推荐使用[[]]代替,功能更强大且更安全
- 退出状态:
0为成功,非0为失败 - 调试技巧:
set -x # 开启调试模式 # ... 脚本代码 ... set +x # 关闭调试模式
这样你就可以在Shell脚本中灵活地进行条件执行和结果判断了。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播