日常知识通
柔彩主题三 · 更轻盈的阅读体验

脚本执行条件判断:让自动化更聪明

发布时间:2025-12-28 07:10:26 阅读:119 次

每天早上打开电脑,自动运行一个脚本备份文件。可如果哪天没插U盘,它还傻乎乎地执行,结果备份失败还覆盖了上次的日志——这体验就挺糟心。这时候就得靠“脚本执行条件判断”来救场。

为什么需要条件判断

脚本不是越快越好,而是越智能越好。比如公司打卡系统有个脚本定时发送日报,但周末不该发。再比如家里NAS的下载脚本,如果网络带宽已经被视频占满,就不该再启动新的下载任务。这些都需要在执行前做判断。

常见的判断方式

以Shell脚本为例,最常用的写法是用 if 判断某个条件是否成立。比如检查U盘是否存在:

if [ -d "/media/usb" ]; then
    cp ~/documents/*.doc /media/usb/
else
    echo "U盘未插入,跳过备份"
fi

这段代码的意思是:如果 /media/usb 目录存在,才执行复制操作,否则输出提示信息。这样一来,脚本就不会盲目执行,避免出错。

结合时间做判断

有些任务只需要在工作日运行。可以用 date 命令获取当前星期几:

weekday=$(date +\%u)
if [ $weekday -le 5 ]; then
    python send_daily_report.py
fi

这里 \%u 返回1到7,代表周一到周日。只要小于等于5,说明是工作日,才发送报告。

判断文件或进程状态

有时候脚本要等某个任务完成才能开始。比如视频转码完成后,再上传到网盘。可以判断转码程序是否还在运行:

if pgrep ffmpeg > /dev/null; then
    echo "转码中,暂不上传"
else
    ./upload.sh
fi

pgrep 用来查找是否有名为 ffmpeg 的进程。如果有,说明还在转码,就先不上传。

多个条件组合使用

现实中的判断往往更复杂。比如只有在电量充足(大于20%)且联网的情况下才同步数据。假设通过命令 get_battery 可获取电量:

batt=$(get_battery)
if [ $batt -gt 20 ] && ping -c 1 baidu.com > /dev/null; then
    ./sync_data.sh
fi

这里用了 && 表示“并且”,两个条件都满足才会执行同步。

加入条件判断后,脚本不再是机械地执行,而是能“看情况办事”。就像做饭前先看看冰箱有没有食材,有才开火,避免白忙一场。写脚本也一样,多加一层判断,少出一堆问题。