BASH:如何静默调用将变量传递给'case'的外部脚本



情况如下:我具有带有交互式tui的全局脚本,以及几个函数和中间脚本,这些脚本必须仅使用全局脚本中的1个函数。例如:

#!/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'的方式向中间脚本提供参数,而无需提示进行全局脚本做任何事情?(读取提示并选择选择(

将选项作为命令行参数以命令行参数,并在设置的情况下跳过提示。为避免重复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

最新更新