2010-08-31 48 views
4

我一直在嘗試執行下面的UNIX shell腳本不工作。 我正在通過KornShell(ksh)運行它。

echo $?; 
if [ $? -ne 0 ] 
then 
failed $LINENO-2 $5 $6 
fi 
failed() 
{ 
     echo "$0 failed at line number $1"; 
echo "moving $2 to failed folder" 
} 

這是給出錯誤說Syntax error:then unexpected.。基本上我必須檢查上次執行的ksh腳本的最高/最後一個語句的返回碼,如果它不等於零,我必須使用給定參數調用函數失敗。在那之前我曾嘗試過使用分號,但那也沒有奏效。

你能幫忙嗎?

編輯1:基於輸入我改變了代碼。仍存在同樣的問題。

ksh ../prescript/Pre_process $1 $2 $3 
rc=$?; 
if [[ $rc -ne 0 ]];then 
    echo "failed"; 
     exit 1; 

EDIT2: 這是工作的,然後通過使用雙方括號部分。我覺得我使用bash腳本的代碼來處理ksh。我在失敗的函數調用中遇到問題。請讓我知道在KSH函數調用適當的方式在這個例子中

回答

3

這看起來像bash而不是KSH

failed() { 
    echo "$0 failed at line number $1"; 
    echo "moving $2 to failed folder" 
} 

if [[ $? -ne 0 ]] 
then 
    failed $LINENO-2 $5 $6 
fi 
+0

可以請讓我知道如何使它在korn外殼上工作。 – 2010-08-31 11:33:03

+0

使用雙方括號 – 2010-08-31 11:38:49

+0

感謝它的工作部分,但我面臨着「失敗」函數調用的不同問題。你能告訴我korn shell調用函數的方式嗎 – 2010-08-31 11:55:56

0

你在線路末端缺少分號:

if [ $? -ne 0]; then 
    # … 
+2

只有當你把'then'放在同一行上時。把它放在一個單獨的行是好的。 – paxdiablo 2010-08-31 11:24:53

+0

是的。我保持着;然後如上圖所示那麼它沒有工作,所以我回到新線,然後 – 2010-08-31 11:35:07

5

你必須要小心。對$?的第一個操作通常會將其清除,以便您的if無法正常工作。

你會使用會更好:

rc=$? 
echo $rc 
if [ $rc -ne 0 ] 
: 

除此之外,它工作正常,我:

$ grep 1 /dev/null 

$ if [ $? -ne 0 ] 
> then 
> echo xx 
> fi 
xx 

$ grep 1 /dev/null 

$ echo $?; 
1 

$ if [ $? -ne 0 ] 
> then 
> echo yy 
> fi 
$ _ 

注意,在最後一個缺乏輸出。這是因爲echo已經吸收了返回值並覆蓋了它(因爲回波成功了)。

另外,你應該讓我們知道你正在使用哪個UNIX和哪個ksh。我的工作版本是Ubuntu下的ksh93。如果您使用的版本較小,您的里程可能會有所不同。


它看起來像,從你的更新,你的唯一的問題是現在的函數調用。這很可能是因爲你在之後使用它來定義它。該腳本:

grep 1 /dev/null 
rc=$? 
if [ $rc -ne 0 ] 
then 
     failed $rc 
fi 

failed() 
{ 
     echo Return code was $1 
} 

生產:

qq.ksh[6]: failed: not found 

同時:

failed() 
{ 
     echo Return code was $1 
} 

grep 1 /dev/null 
rc=$? 
if [ $rc -ne 0 ] 
then 
     failed $rc 
fi 

產生

Return code was 1 
+0

我檢查,但至少獲取作爲$的零值?我在頂部使用了回聲。我的問題仍然沒有起作用。是否有任何事情要做,使它在ksh上工作 – 2010-08-31 11:34:24