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

时间:2017-06-26 16:24:18

标签: bash shell

情况如下:我有一个带有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'的方式,而不会被提示做任何事情全局脚本呢? (阅读提示并选择选项)

1 个答案:

答案 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