基于参数判断调用不同Bash脚本:新手/专家菜单实现求助
嘿,刚接触Bash就能写出这样的新手菜单逻辑,已经很棒了!要实现「检测特定参数切换到专家脚本」的需求其实很直观,咱们一步步来改:
核心思路
在脚本最开头先处理命令行参数——如果用户传入了help/man/status中的任意一个,直接调用专家脚本并退出;如果没有传参数,再继续执行你写好的新手菜单逻辑。
修改后的完整代码
#!/bin/bash # 第一步:优先处理命令行参数,判断是否触发专家模式 # 用正则匹配是否是指定的参数:help/man/status if [[ "$1" =~ ^(help|man|status)$ ]]; then # 调用专家脚本,这里假设你的专家脚本名为expertMenu.sh,可根据实际修改 # 同时把用户传入的参数传递给专家脚本,方便它做针对性处理(比如显示对应帮助) sh ./expertMenu.sh "$1" exit 0 # 执行完专家脚本后直接退出,避免进入新手菜单 fi # 没有传入指定参数,执行新手菜单逻辑 echo -n "Name please? " read name echo "Menu for $name" echo "====================================================" echo -e "Enter ( 1 ) File and Directory Managment Commands\nEnter ( 2 ) Text Processing Commands\nEnter ( 3 ) System Status Commands\nEnter ( 4 ) Exit" echo "Enter your choice :" read en case "$en" in 1)sh ./fileNovice.sh;; 2)sh ./textNovice.sh;; 3)sh ./systemStatusNovice.sh;; 4)echo "Good Bye..." sleep 0;; *)echo "Wrong Option selected" ;; esac
关键细节解释
- 参数检测逻辑:
[[ "$1" =~ ^(help|man|status)$ ]]是用Bash的正则匹配,判断第一个命令行参数$1是否是我们指定的三个值之一,这样比多个if判断更简洁。 - 传递参数给专家脚本:
sh ./expertMenu.sh "$1"把用户传入的参数(比如help)传给专家脚本,这样专家脚本里可以通过$1判断要执行的操作(比如显示帮助文档、输出系统状态)。 - exit 0:执行完专家脚本后立刻退出主脚本,防止代码继续往下走进入新手菜单,这一步很重要哦。
可选优化建议
如果想让参数更灵活,比如支持短选项(比如-h对应help),可以把参数检测改成:
if [[ "$1" =~ ^(help|man|status|-h)$ ]]; then # 统一把短选项转换成对应长参数传给专家脚本 local arg="$1" [[ "$arg" == "-h" ]] && arg="help" sh ./expertMenu.sh "$arg" exit 0 fi
这样用户不管输入./main.sh help还是./main.sh -h,都能触发专家模式的帮助功能啦~
内容的提问来源于stack exchange,提问作者Milan
相关产品推荐
相关产品推荐

