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