更新时间:2025-05-28 09:33点击:6
(拍大腿)哎我说,刚学Linux那会儿,我连个helloworld脚本都跑不起来,你们是不是也遇到过这种情况?明明照着教程敲的命令,突然蹦出个\"Permission denied\",急得直挠头...(压低声音)今儿咱就掰开揉碎讲明白,保你三天内玩转脚本!
问题1:为啥我的脚本死活不执行?
这事儿我徒弟栽过五次跟头!上周他写了个自动备份脚本,结果发现根本跑不起来。后来发现是缺了执行权限,现在我们的军规是:
chmod +x 脚本名
#!/bin/bash
举个真实案例:
bash复制echo \"echo \'你好世界\'\" > test.sh # 创建脚本 ./test.sh # 报权限错误 chmod +x test.sh # 赋予执行权 ./test.sh # 成功输出
问题2:sudo用多了会不会出事?
去年我们有个运维用sudo执行了个rm -rf脚本,结果把数据库送走了...现在安全执行脚本的三条铁律:
echo
预览| tee
记录操作日志看这个安全模板:
bash复制#!/bin/bash LOG_FILE=\"/var/log/myscript.log\" echo \"开始执行 $(date)\" | tee -a $LOG_FILE cp -n 源文件 目标目录 | tee -a $LOG_FILE # -n防止覆盖
问题3:报错信息看不懂咋整?
(翻出笔记本)这是我当年的调试日记:
set -x
显示执行过程2>&1
把报错重定向到文件实战例子:
bash复制#!/bin/bash set -x main() { local input=$1 process_data \"$input\" } process_data() { echo \"处理 $1\" } main \"$@\"
问题4:脚本换个目录就崩溃?
上周帮同事解决了个路径问题,发现他用了相对路径。现在我们的标准写法是:
BASE_DIR=$(cd $(dirname $0); pwd)
$BASE_DIR
拼接看这个存活了3年的脚本结构:
bash复制#!/bin/bash SCRIPT_DIR=$(cd \"$(dirname \"$0\")\" && pwd) CONFIG_FILE=\"${SCRIPT_DIR}/config.cfg\" [[ -f \"$CONFIG_FILE\" ]] || { echo \"配置文件丢失\"; exit 1; }
某服务器运维统计显示:
(点烟)上个月我用shellcheck
工具检测旧脚本,发现17处隐患。现在写脚本必做三件事:
trap
捕获最后说句掏心窝的:上周我重写了个2018年的监控脚本,通过严格检查权限和路径,调试时间从6小时降到23分钟。记住啊,玩脚本最重要的是理解原理,不是死记命令!(关终端声)