我问过StackOverflow 上的这个问题昨天,把它弄得一团糟,而且由于我对 Linux 缺乏了解,通常浪费了人们的时间。
希望我现在能做得更好。我尝试了很多不同的方式来解决这个问题,但最终只是让这里的人们对我真正需要的东西感到困惑。
我需要制作一个脚本,根据用户是否传递了任何参数来调用其他子菜单脚本。如果参数是“help”,我需要清除屏幕并显示一条短消息,告诉用户如何使用帮助命令。否则,脚本将显示相应的子菜单
其他参数是“文件”“文本”“状态”,如果使用它们将调用专家脚本,否则它将从用户菜单调用新手脚本。
我创建了总共 6 个其他脚本占位符的模型,名为 fileExpert、fileNovice、textExpert、textNovice 等,我想根据用户是否传递了某些参数的条件来执行这些占位符。
到目前为止,根据我的研究,我知道我需要设置一个类似的条件测试,
if $>0 then go into expert or if there are no arguments execute novice
除此之外我完全迷失了。
希望这听起来不像是完全胡说八道,而且有一定道理。
答案1
希望这里的逻辑没问题,您可以使用短版本和长版本:
测试用例 :
./Main.sh ## Error
./Main.sh -i Text ## Expert
./Main.sh -i dummy ## Novice
./Main.sh -i File foobar ## Error
./Main.sh -i ## Error
./Main.sh -h ## Help
主要.sh:
#!/bin/bash
usage="############################ HELP ############################
Main.sh [-h] [-i input] -- call submenus
Where:
-h,--help : Show this helper
-i,--input : Could be either File | Text | Status\n"
unset -v INPUT
err=false
POS=()
while [[ $# -gt 0 ]]
do
opt="$1"
case $opt in
-i|--input)
INPUT="$2"
if [ -z "${INPUT}" ]; then
echo "Syntax Error : Argument for ${opt} cannot be empty "
printf "$usage"
exit 1
fi
shift 2
;;
-h|--help)
printf "$usage"
echo -e "\r"
exit 0
;;
*)
POS+=("$1")
shift
err=true
echo "Syntax Error : Additional argument not used"
printf "$usage"
exit 1
;;
esac
done
set -- "${POS[@]}"
## Your logic here
if [ -z "${INPUT}" ] && [ "${err}" = false ] ; then
echo "Syntax Error : -i option is necessary"
printf "$usage"
exit 1
elif [ -z "${INPUT}" ] && [ "${err}" = true ] ; then
echo "Syntax Error : -i option is necessary"
exit 1
elif [ "${INPUT}" == "File" ] || [ "${INPUT}" == "Text" ] || [ "${INPUT}" == "Status" ] ; then
# call Expert scripts
<path_to_fileExpert>
<path_to_textExpert>
exit 0
else
# call Novice scripts
<path_to_fileNovice>
<path_to_textNovice>
exit 0
fi