if [$? -ne 0] затем синтаксическая ошибка, затем неожиданная

Я пытался выполнить следующий сценарий оболочки 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"
}

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

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

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

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

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

8
задан geedubb 7 January 2014 в 17:48
поделиться

2 ответа

Это похоже на 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
6
ответ дан 5 December 2019 в 15:16
поделиться

Будьте осторожны . Первая операция над $? обычно очищает его, так что ваш 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
$ _

Обратите внимание на отсутствие вывода в последнем. Это потому, что эхо приняло возвращаемое значение и перезаписало его (поскольку эхо было успешным).

Кроме того, вы должны сообщить нам, какую UNIX и какой ksh вы фактически используете. Моя рабочая версия - 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
5
ответ дан 5 December 2019 в 15:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: