Shell脚本详解:从理论到实践(二)

Shell脚本详解:判断

一、基础判断语句 if...then...fi

Shell 中最基本的判断结构是 if...then...fi

语法:

bash 复制代码
if [ 条件 ]
then
    # 条件成立时执行的代码
fi

关键点:

  1. [ 条件 ] 是测试语句,注意括号 [] 两边必须有空格。
  2. then 必须单独一行,或与 if 用分号 ; 分隔。
  3. fi 表示条件语句结束。

示例 1:检查文件是否存在

bash 复制代码
#!/bin/bash

file="test.txt"

if [ -e "$file" ]
then
    echo "$file 存在"
fi

二、多重判断(嵌套 if

当需要处理多个条件时,可以使用 elif 和嵌套 if

语法:

bash 复制代码
if [ 条件1 ]
then
    # 条件1成立
elif [ 条件2 ]
then
    # 条件2成立
else
    # 以上都不成立
fi

示例 2:成绩分级

bash 复制代码
#!/bin/bash

read -p "请输入成绩: " score

if [ "$score" -ge 90 ]
then
    echo "优秀"
elif [ "$score" -ge 80 ]
then
    echo "良好"
elif [ "$score" -ge 60 ]
then
    echo "及格"
else
    echo "不及格"
fi

三、复杂条件组合

使用 &&(逻辑与)、||(逻辑或)组合多个条件。

示例 3:检查文件类型

bash 复制代码
#!/bin/bash

file="example"

if [ -e "$file" ] && [ -f "$file" ]
then
    echo "$file 是普通文件"
elif [ -e "$file" ] && [ -d "$file" ]
then
    echo "$file 是目录"
else
    echo "$file 不存在"
fi

四、case 语句(多分支选择)

case 是处理多重匹配的更简洁方式。

语法:

bash 复制代码
case 变量 in
模式1)
    命令...
    ;;
模式2)
    命令...
    ;;
*)
    默认命令...
    ;;
esac

示例 4:服务管理脚本

bash 复制代码
#!/bin/bash

read -p "操作(start/stop/restart): " action

case "$action" in
    start)
        echo "启动服务..."
        ;;
    stop)
        echo "停止服务..."
        ;;
    restart)
        echo "重启服务..."
        ;;
    *)
        echo "无效操作"
        ;;
esac

五、常见条件判断类型

类型 写法 说明
文件检测 -e file 文件是否存在
-d dir 是否是目录
-f file 是否是普通文件
字符串比较 "str1" = "str2" 字符串相等
"str1" != "str2" 字符串不等
-z "$str" 字符串为空
数值比较 num1 -eq num2 等于
num1 -gt num2 大于
num1 -lt num2 小于

六、综合实例:备份脚本

bash 复制代码
#!/bin/bash

# 检查备份目录是否存在
backup_dir="/backup"
if [ ! -d "$backup_dir" ]
then
    mkdir -p "$backup_dir" || echo "创建目录失败" && exit 1
fi

# 检查源文件
source_file="/data/app.log"
if [ ! -f "$source_file" ]
then
    echo "源文件不存在"
    exit 1
fi

# 执行备份
cp "$source_file" "$backup_dir/app.log.$(date +%Y%m%d)" && echo "备份成功" || echo "备份失败"

说明:

  1. ||&& 用于命令执行结果处理
  2. $(date +%Y%m%d) 生成日期字符串
  3. 多重条件组合确保流程可靠性

掌握这些判断结构后,您可以编写出健壮的 Shell 脚本处理各种条件分支任务。

相关推荐
code_whiter2 小时前
初阶linux1(常见指令以及权限理解)
linux
董崇德2 小时前
当CPU飙高时,SRE的排查清单——USE Method实战
运维
平凡的阳阳2 小时前
千里通Linux盒子搭建FRP全教程:低成本实现内网穿透+代理服务器
linux·frp·内网穿透·代理·socks5·远程ssh
D4c-lovetrain2 小时前
Linux个人心得25 (mysql⑤)
linux·运维·mysql
复园电子2 小时前
HTTPS与TLS1.2双重加密:USB网络数据传输安全的底层核心技术解析
服务器·网络·安全·https
菜_小_白2 小时前
RTP协议收发组件开发
linux·网络·c++
航Hang*2 小时前
Windows Server 配置与管理——第11章:配置虚拟专用网络服务器
运维·服务器·windows
Deitymoon2 小时前
linux——UDP编程
linux·网络·udp
Amelio_Ming2 小时前
linux内存管理-页面回收之内核线程 kswapd (二)
linux·服务器