2014-02-20 58 views
2

我有test.sh其中有多個返回條件,test1.sh只是echo echo語句。當我運行test2.sh時,我的邏輯應該運行test.sh處理文件,即「文件成功」和調用test1.sh腳本。當其他條件執行時,不應運行test1.sh腳本。「文件不成功」,「目錄中不存在輸入文件」在Unix shell腳本中設置退出代碼

我面臨的問題是它正在執行其他條件,如「文件不成功」,「目錄中不存在輸入文件」,它不會將指定的退出代碼重新調入「1」,而是返回0,即從OS意味着作業成功。所以,我得到「0」 test.sh所有不同的條件,使測試1 .SH獲取調用無論如果文件處理失敗etc.Pls諮詢與返回代碼

test.sh 
FILES=/export/home/input.txt 
cat $FILES | nawk -F '|' '{print $1 "|" $2 "|" }' $f > output.unl 
if [[ -f $FILES ]]; 
then if [[ $? -eq 0 ]]; then 
echo "File successfully" 
else 
echo "File not successfully" 
exit 1 
fi 
else 
echo "Input file doesn't exists in directory" exit 1 fi 

====== ================================================== ================

test1.sh 
echo "Input file exists in directory" 

test2.sh 

echo "In test2 script" 
./test.sh 
echo "return code" $? 
if [[ $? -eq 0 ]]; then 
echo "inside" 
./test1.sh 
fi 

+0

'test.sh'似乎沒有正確的格式(見最後一行)。另外,如何初始化'$ FILES'?此外,在'test.sh'中測試'$?'看起來沒有必要,因爲你已經在使用'-f'測試'$ FILES'的存在了。 – ajk

+1

你的'test.sh'在語法上是無效的 - 'nawk'程序缺少一個結束的單引號,最後一行將不起作用,除非你至少在單獨一行中加上'fi'。如果你確實在你的'echo'語句的同一行有'exit 1',那麼它就會成爲另一個輸出字符串,這就解釋了爲什麼退出代碼沒有設置。 – mklement0

+1

當你避免顯式測試'$?'時,這類問題通常會消失。不用測試'$?',只需檢查實際的呼叫。換句話說,只需編寫'if ./test.sh;然後在裏面回聲; ...; fi' –

回答

2

你覆蓋$? WH你在echo中使用它 - 在那之後,它包含echo本身的退出代碼。將它存儲在一個變量中以避免這種情況。

echo "In test2 script" 
./test.sh 
testresult=$? 
echo "return code" $testresult 
if [[ $testresult -eq 0 ]]; then 
    echo "inside" 
    ./test1.sh 
fi 

編輯補充:這是很難告訴你從test.sh想要的東西,你貼的代碼是不完整的,甚至不運行。它看起來像你的意思是catif,因爲否則它錯誤時輸入文件丟失,並且你的$?測試什麼也不做。所以,我重新安排這樣的:

FILES=input.txt 

if [[ -f $FILES ]]; then 
    cat $FILES | awk -F '|' '/bad/{ exit 1 }' 
    if [[ $? -eq 0 ]]; then 
    echo "File processed successfully" 
    else 
    echo "File processing failed" 
    exit 1 
    fi 
else 
    echo "Input file doesn't exist in directory" 
    exit 1 
fi 

我已經改變了awk腳本演示條件的所有工作:現在,如果我把這個詞bad在input.txt中,你會看到「文件處理失敗」消息,否則你會看到成功;刪除文件,你會看到輸入文件不存在的消息。

+0

我試過這個選項,但它沒有奏效。它仍然返回「0」的所有其他條件 – user3326101

+0

我認爲你的意思是在test.sh中的其他條件。我已經更新瞭解決該問題的答案,但很難說出你在那裏想要做什麼。 – bazzargh

+0

@hi所有 - 我已經更新了腳本,以瞭解我在做什麼,但沒有多大意義。如果貓命令是成功的,它將一直返回「0」。我的問題是否它將要任何其他的塊都會阻止爲什麼它仍在重新調整「0」。 – user3326101