我有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
'test.sh'似乎沒有正確的格式(見最後一行)。另外,如何初始化'$ FILES'?此外,在'test.sh'中測試'$?'看起來沒有必要,因爲你已經在使用'-f'測試'$ FILES'的存在了。 – ajk
你的'test.sh'在語法上是無效的 - 'nawk'程序缺少一個結束的單引號,最後一行將不起作用,除非你至少在單獨一行中加上'fi'。如果你確實在你的'echo'語句的同一行有'exit 1',那麼它就會成爲另一個輸出字符串,這就解釋了爲什麼退出代碼沒有設置。 – mklement0
當你避免顯式測試'$?'時,這類問題通常會消失。不用測試'$?',只需檢查實際的呼叫。換句話說,只需編寫'if ./test.sh;然後在裏面回聲; ...; fi' –