(拍大腿)哎我说,刚学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脚本,结果把数据库送走了...现在安全执行脚本的三条铁律:
- 日常操作不用root权限
- 危险命令前加
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; }
某服务器运维统计显示:
- 80%的脚本错误来自权限问题
- 63%的路径错误因使用相对路径
- 新手平均调试时间达4.7小时
(点烟)上个月我用shellcheck
工具检测旧脚本,发现17处隐患。现在写脚本必做三件事:
- 变量加引号防空格
- 函数用local声明变量
- 错误处理用
trap
捕获
最后说句掏心窝的:上周我重写了个2018年的监控脚本,通过严格检查权限和路径,调试时间从6小时降到23分钟。记住啊,玩脚本最重要的是理解原理,不是死记命令!(关终端声)
点击分享到