优化运维 Shell 脚本可以从可读性、健壮性、性能、安全性和可维护性几个维度入手。下面是一套比较系统的优化思路和实战建议。
#!/usr/bin/env bash
set -euo pipefail
set -e:命令失败立即退出set -u:使用未定义变量报错set -o pipefail:管道中任意命令失败都算失败LOG_FILE="/var/log/ops.log"
log() {
echo "[$(date '+%F %T')] $*" | tee -a "$LOG_FILE"
}
避免“一整坨代码”:
check_env() { :; }
backup_data() { :; }
main() {
check_env
backup_data
}
main "$@"
if [ $# -ne 2 ]; then
echo "Usage: $0 <src> <dst>"
exit 1
fi
rm -rf "$dir"/*
防止空格、空变量导致灾难。
exec 200>/var/lock/myscript.lock
flock -n 200 || exit 1
❌ 慢:
for i in $(cat list.txt); do
echo $i
done
✅ 快:
while read -r line; do
echo "$line"
done < list.txt
❌:
cat file | grep a | awk '{print $1}'
✅:
awk '/a/{print $1}' file
xargsrsync 替代循环 scpsource /etc/ops/secret.env
sudo 精确授权[ -z "$TARGET" ] && exit 1
rm -rf "$TARGET"
CONFIG_FILE=/etc/ops/config.conf
source "$CONFIG_FILE"
EXIT_OK=0
EXIT_ERR=1
说明“为什么”,而不是“做什么”。
for i in `cat ip.txt`
do
ping $i
done
#!/usr/bin/env bash
set -euo pipefail
while read -r ip; do
ping -c1 -W1 "$ip" >/dev/null && echo "$ip OK"
done < ip.txt
shellcheck:静态检查bashate:风格检查shfmt:格式化如果你有具体脚本,可以直接贴出来,我可以帮你逐行优化并解释原因。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。