2013-11-28 114 views
0

我有這兩個腳本,configScript.shgenScript.sh。第一個按我想要的方式工作。它將正確的值添加到options.shecho正確的消息中。但是,我想要genScript.sh接受options.sh中的當前參數並輸出正確的echo。因爲它現在是我運行genScript.sh它返回null,我不明白爲什麼。Bash沒有按預期採購代碼

#!/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.sh通過去除OPTION=$1工作,我想要的方式。當我這樣做genScript.sh將接受options.sh內的值,並將輸出正確的echo。但當我刪除OPTION=$1configScript.sh停止工作,因爲它應該不更新options.sh一個新的價值了。

+0

您是否嘗試過在'genScript.sh'中回顯'$ 1'?我可能會在引號中加上'one'和'two' ... – John3136

+0

當我echo $ 1時,它不會返回任何東西,但我不知道如何讓它返回'options.sh中的值' – Benji

回答

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 
+0

太棒了!謝謝 – Benji

0

只需在第二個腳本和第一個腳本中放置引號,它將生成options.sh,並將默認值$ OPTION添加到第二個腳本中的OPTION var中,以便它現在可以工作。

#!/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 

這是最讓人頭疼的問題之一。我不知道你是否使用語法突出顯示的編輯器,但最好是這樣,你可以輕鬆地運行這類問題。

+0

它不適合我。 'genScript.sh'仍然在shell中運行時返回'null' – Benji

+0

我正在GNU bash 4.1.2版本上測試它,它在我執行./configScript.sh後輸入** 1 **或** 2 **然後回車。 –

+0

噢,我首先得到了它的工作原理,但在你輸入./genScript.sh之後就不起作用,請給我一分鐘修復。 –