Bash没有按预期采购代码

时间:2013-11-28 02:13:35

标签: bash

我有两个脚本,configScript.shgenScript.sh。第一个就像我想要的那样工作。它会将正确的值添加到options.shecho正确的消息中。但是,我希望genScript.sh接受options.sh中的当前参数并输出正确的echo。就像现在我运行genScript.sh时它返回null而我无法找出原因。

#!/bin/bash -x
#configScript.sh
func()
{
echo "
Choose
1 - Option 1
2 - Option 2
"
echo -n "   Enter selection: "
read select
case $select in
            1 ) 
            echo "  Option 1 chosen"
            . ./genScript.sh one
            cat << EOF >options.sh
OPTION=$OPTION
EOF
            ;;
            2 )
            echo "  Option 2 chosen"
            . ./genScript.sh two
            cat << EOF >options.sh
OPTION=$OPTION
EOF
            ;;
esac
}
func

#!/bin/bash -x
#genScript.sh
. options.sh
OPTION=$1
func2()
{
    if [ "$OPTION" == one ] ; then
        echo "Option one"
    elif [ "$OPTION" == two ] ; then
        echo "Option two"
    else
        echo "null"
    fi
}
func2

我设法通过删除genScript.shOPTION=$1以我想要的方式工作。当我这样做时,genScript.sh会接受options.sh中的值并输出正确的echo。但是,当我移除OPTION=$1 configScript.sh时,它会停止正常工作,但不再使用新值更新options.sh

2 个答案:

答案 0 :(得分:1)

问题在于您希望调用genScript的方式。我想你想用命令行参数运行genScript,以及从options.sh中获取源代码。

以下对genScript.sh的更改将达到目的。当命令行和options.sh都有值时,它会优先使用命令行。

#!/bin/bash -x
#genScript.sh
OPTION=""
. options.sh
[ "$1" ] && OPTION=$1
func2()
{
    if [ "$OPTION" == one ] ; then
        echo "Option one"
    elif [ "$OPTION" == two ] ; then
        echo "Option two"
    else
        echo "null"
    fi
}
func2

答案 1 :(得分:0)

只需在第二个脚本和第一个脚本中放置“one”和“two”的引号,然后在第一个脚本中生成options.sh,并在第二个脚本中为OPTION var添加默认值$ OPTION,这样它就可以了。

#!/bin/bash -x
#configScript.sh
func()
{
echo "
Choose
1 - Option 1
2 - Option 2
"
echo -n "   Enter selection: "
read select
case $select in
            1 )
            echo "  Option 1 chosen"
            . ./genScript.sh one
            cat << EOF >options.sh
OPTION="$OPTION"
EOF
            ;;
            2 )
            echo "  Option 2 chosen"
            . ./genScript.sh two
            cat << EOF >options.sh
OPTION="$OPTION"
EOF
            ;;
esac
}
func

#!/bin/bash -x
#genScript.sh
. options.sh
OPTION=${1-$OPTION}
func2()
{
    if [ "$OPTION" == "one" ] ; then
        echo "Option one"
    elif [ "$OPTION" == "two" ] ; then
        echo "Option two"
    else
        echo "null"
    fi
}
func2

这是最烦人的问题之一。我不知道你是否正在使用带有语法高亮的编辑器,但最好还是让你在这类问题上轻松运行。