2013-11-27 59 views
0

我得到了這兩個腳本採購if語句如預期在bash

我的第一個劇本,script1.sh

#!/bin/bash 
question() 
{ 
    q=1 
} 
main() 
{ 
    question 
} 
if [ "${1}" != "--source-only" ]; then 
    main "${@}" 
fi 

,第二個沒有工作,script2.sh

#!/bin/bash 

. ./script1.sh --source-only 
func() 
{ 
    if [ "$q" = "1" ]; then 
     echo "Questions = 1" 
    else 
     echo "Question is != 1" 
    fi 
} 

爲什麼腳本返回Question is != 1?我無法弄清楚這一點。

更新* 我使用script1.sh來配置script2.sh。是否有可能獲得q的價值?

+2

你的意思是從'script2.sh'調用'script1.sh'嗎? – chepner

+0

@chepner是的,更新的以及'$ question'應該是'$ q'。 – Benji

回答

2

script1.sh如果第一個參數是--source-only,則不會執行任何操作,但您正在使用該參數獲取腳本,因此從不設置q。降--source-only選項,或更改script1.sh

if [ "${1}" = "--source-only" ]; then 
    main "${@}" 
fi 

問題的答案之前的版本。

question是一個函數,而不是一個變量。假設您要撥打script2.sh哪個來源script1.sh,您想在if語句中測試q而不是question的值。

另外,if語句及其else子句中不需要{...}

+0

更新了問題,但它仍在輸出'Question is!= 1' – Benji

+2

如果'$ 1' *不是*'--source-only',所以'q'沒有設置,script1.sh'只運行'main'到'script2.sh'中的一個。 – chepner

+0

更新了問題 – Benji

0

您從未定義名爲question的變量,因此$question是空字符串。你定義一個名爲question功能,但試試這個:

foo() { echo "blah"; } 
echo $foo 

也許你想測試這個[ "$q" = "1" ]

呼叫script1.sh有:

沒有--source-only。你現在通過--source-only的方式確保main不被調用。

0

您指定--source-only作爲第一個參數,將不會調用script1.sh中的任何方法,並且q仍爲空字符串。更多的,你正在檢查$question(不是$q),並且根本不參與腳本,因此它也是一個空字符串,不是「1」。

+0

我該如何解決這個問題,使'問題'函數運行,從而使'q = 1'? – Benji

+0

更改'「$ {1}」!=「--source-only」'condition或script1 arguments –