脚本传参详解:打造高效智能的Bash脚本工具 📚

让 Bash 脚本“听懂”人话:交互友好 & 一键自动化兼得!
📚 导航目录
一、✨ 无参交互脚本
以下示例仅支持交互式菜单,每次都要敲键盘选 1/2,效率偏低。
👇 复制即可运行体验:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| #!/bin/bash linux_git_menu() { while true; do clear echo -e ">>> Git 管理" echo -e "1. 推送更新" echo -e "2. 拉取更新" read -r -e -p "请输入你的选择: " choice case $choice in 1) echo "✅ 执行推送更新..."; break ;; 2) echo "✅ 执行拉取更新..."; break ;; *) echo "❌ 无效选择" ;; esac done } linux_git_menu
|
🔍 特点小结
- ✅ 零学习成本,新手友好
- ❌ 无法脚本化/定时任务
- ❌ 多仓库批量操作痛苦
二、🔧 可传参脚本改造
只需 3 行核心改动,立刻获得“交互 + 传参”双模式:
| 改造点 |
代码 |
作用 |
| ① 接收参数 |
local fast_jump="$1" |
函数内拿到外部参数 |
| ② 参数赋值 |
choice="$fast_jump" |
跳过 read,直接进入分支 |
| ③ 防死循环 |
fast_jump="" |
用完即弃,确保 while 只跑一圈 |
传参脚本示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #!/bin/bash linux_git_menu() { + local fast_jump="$1" # ① 接收外部参数 while true; do + [[ -z "$fast_jump" ]] && clear # 交互模式才清屏(不需要清屏可删除此行) + if [[ -z "$fast_jump" ]]; then echo -e ">>> Git 管理" echo -e "1. 推送更新" echo -e "2. 拉取更新" read -r -e -p "请输入你的选择: " choice + else + choice="$fast_jump" # ② 直接赋值 + fast_jump="" # ③ 防止死循环 + fi
case $choice in 1) echo "✅ 执行推送更新..."; break ;; 2) echo "✅ 执行拉取更新..."; break ;; *) echo "❌ 无效选择" ;; esac done } - linux_git_menu + linux_git_menu "$1" # ④ 把脚本参数透传
|
🌟 改造后亮点
- 支持数字 + 英文双通道:
1 或 push 均可
- 旧交互体验 100% 保留,向下兼容
- 可无缝接入 CI/CD、定时任务、批量脚本
三、📊 使用对比:一行命令 vs 多次交互
| 场景 |
旧脚本 |
新脚本(传参) |
| 交互菜单 |
bash demo_old.sh |
bash demo_new.sh |
| 一键推送 |
❌ 不可行 |
bash demo_new.sh push |
| 一键拉取 |
❌ 不可行 |
bash demo_new.sh pull |
| 批量操作 |
❌ 手工逐个点 |
✅ for r in repo/*; do m push; done |
四、🚀 高效工具箱
把长命令浓缩成 1 个字母,手感飞起!
1 2 3
| chmod +x /root/mobu_script.sh
sudo ln -s /root/mobu_script.sh /usr/local/bin/m
|
五、📄 mobu_script.sh 完整示例
子命令分发版,支持 m git push、m pull、m help 等写法,拿来即用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| #!/bin/bash
linux_git_menu() { local fast_jump=${1:-} while true; do [[ -z "$fast_jump" ]] && clear if [[ -z "$fast_jump" ]]; then echo -e ">>> Git 管理" echo -e "1. 推送更新 📤" echo -e "2. 拉取更新 📥" echo -e "0. 退出 🚪" read -r -p "请输入你的选择: " choice else choice=$fast_jump fast_jump="" fi case $choice in 1|push) git_push; break ;; 2|pull) git_pull; break ;; 0|q|quit|exit) echo "👋 再见"; return 0 ;; *) echo "❌ 无效选择,请输入 1/push、2/pull 或 0/quit" ;; esac done }
m_info() { echo "用法:" echo "一键推送 m push" echo "一键拉取 m pull" echo "Git子命令 m git push | m git pull" echo "帮助信息 m help | m --help| m -h" }
if [ $# -eq 0 ]; then linux_git_menu else case $1 in git) linux_git_menu "${@:2}" ;; push) linux_git_menu "push" ;; pull) linux_git_menu "pull" ;; help|--help|-h) m_info ;; *) echo "未知命令: $1" m_info ;; esac fi
|
六、🎯 实际使用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| $ m >>> Git 管理 1. 推送更新 📤 2. 拉取更新 📥 请输入你的选择: 1 ✅ 执行推送更新...
$ m push ✅ 已推送至 origin/main
$ m git pull ✅ 已拉取最新代码
$ m help 用法: ...
|
七、💡 总结与最佳实践
| 原则 |
落地技巧 |
| 向后兼容 |
新增功能不删旧交互,老用户零感知 |
| 代码复用 |
通用逻辑封装函数,减少重复 |
| 错误处理 |
无效参数给出 🚩 高亮提示 + 帮助文案 |
| 颜色输出 |
成功=绿色 ✅,错误=红色 ❌,警告=黄色 ⚠️ |
| 日志追踪 |
可追加 exec >>~/mobu.log 2>&1 记录全会话 |
🌈 一句话:让脚本既“好看”又“好用”,把重复劳动减到最低,把效率拉满!