Shell脚本需以#!/bin/bash开头、设chmod+x权限后用./script.sh执行,建议添加set -e、路径检查和日志时间戳提升可靠性。

写一个Shell脚本并不难,关键是理解它的运行逻辑和基本结构。下面带你用最简方式写出第一个真正能用的运维脚本,并说明怎么安全、可靠地执行它。
Shell脚本长什么样?从一个实际例子开始
比如你想每天自动备份某个日志目录,可以这样写:
#!/bin/bash# 日志备份脚本
LOG_DIR="/var/log/myapp"
BACKUP_DIR="/backup/logs/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
cp -r "$LOG_DIR"/*.log "$BACKUP_DIR/" 2>/dev/null
echo "备份完成:$(date)" >> /var/log/backup.log
保存为 backup_logs.sh,这个文件就是你的第一个Shell脚本。
让脚本可执行:chmod +x 是关键一步
刚写好的脚本默认没有执行权限,直接运行会报“Permission denied”。必须先加执行权限:
- chmod +x backup_logs.sh —— 最常用、最直接的方式
- 也可以用 chmod 755 backup_logs.sh,效果一样
- 确认是否成功:运行 ls -l backup_logs.sh,看到开头有 -rwxr-xr-x 就对了
运行脚本的三种常见方式
权限设好后,有几种常用执行方法,适用不同场景:
- ./backup_logs.sh —— 当前目录下直接运行(推荐新手用)
- bash backup_logs.sh —— 不依赖shebang,适合调试或临时改解释器
- source backup_logs.sh 或 . backup_logs.sh —— 在当前shell环境中执行,变量和cd操作会生效(慎用于生产)
加点实用改进,让它更靠谱
真实运维中,光能跑还不够。建议加上这些小改进:
- 开头加 set -e:遇到任意命令失败就立刻退出,避免错误被忽略
- 检查关键路径是否存在:[[ -d "$LOG_DIR" ]] || { echo "目录不存在"; exit 1; }
- 用 $(dirname "$0") 获取脚本所在目录,避免硬编码路径
- 加个简单的日志时间戳:echo "[$(date '+%F %T')] 开始备份..." >> /var/log/backup.log


















