если [$?-ne 0] затем синтаксическая ошибка, затем неожиданная - PullRequest
7 голосов
/ 31 августа 2010

Я пытался выполнить следующий сценарий оболочки UNIX, который не работает.Я запускаю его с помощью 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, и если он не равен нулю, я должен вызвать функцию с ошибками с заданными параметрами.До этого я пытался поставить точку с запятой, но это тоже не сработало.

Не могли бы вы помочь?

Edit1: На основании введенных данных я изменил код.Тем не менее, существует та же проблема.

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

Edit2: Он работает для тогдашней части, используя двойные квадратные скобки.Я чувствую, что использовал код bash-скрипта для ksh.Я столкнулся с проблемой при вызове функции с ошибкой.Пожалуйста, дайте мне знать подходящий способ вызова функции в ksh для этого примера

Ответы [ 3 ]

6 голосов
/ 31 августа 2010

Это похоже на 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
5 голосов
/ 31 августа 2010

Вы должны быть осторожны.Первая операция на $? обычно очищает ее, так что ваш 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 икакой кш вы на самом деле используете.Моя рабочая версия - Ksh93 под Ubuntu.Ваш пробег может отличаться, если вы используете меньшую версию.


Похоже, из вашего обновления ваша единственная проблема сейчас - это вызов функции.Это, скорее всего, потому что вы определяете его после его использования.Сценарий:

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 голосов
/ 31 августа 2010

вам не хватает точек с запятой в конце строк:

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