情况如下:我有一个带有Interactive TUI的全局脚本和几个函数,以及中间脚本,它们必须只使用全局脚本中的一个函数。 例如:
#!/bin/bash
echo " INSTRUCTIONS:"
read -rsp $'Press any key to continue... \n' -n1 key
function1 {
}
function2 {
}
function3 {
}
read -r -p "Let's go? [yes/no]: " input
if [[ "$input" != "yes" ]]
then
echo "Process aborted." &&
exit
fi
PS3='(hit the number): '
OPT=("1" "2" "3")
select opt in "${OPT[@]}"
do
case $opt in "1")
function1
break
;;
"2")
function2
break
;;
"3")
function3
break
;;
*)
echo invalid option, please retry
;;
esac
done
exit 0
问题是如何向中级脚本提供它只会静默使用'function3'的方式,而不会被提示做任何事情全局脚本呢? (阅读提示并选择选项)
答案 0 :(得分:1)
将该选项作为命令行参数,如果已设置则跳过提示。为避免重复case
代码,请将其放入函数中,以便可以从主线代码和select
循环中调用它。
#!/bin/bash
function1() {
}
function2() {
}
function3() {
}
do_func() {
opt=$1
case $opt in
"1")
function1
;;
"2")
function2
;;
"3")
function3
;;
*)
echo invalid option, please retry
;;
esac
}
if [ -n "$1" ]
then
do_func "$1"
exit 0
fi
echo " INSTRUCTIONS:"
read -rsp $'Press any key to continue... \n' -n1 key
read -r -p "Let's go? [yes/no]: " input
if [[ "$input" != "yes" ]]
then
echo "Process aborted." &&
exit
fi
PS3='(hit the number): '
OPT=("1" "2" "3")
select opt in "${OPT[@]}"
do
do_func "$opt"
done
exit 0
然后您将使用:
scriptname 3
运行function3
。