Как исправить этот сценарий bash?

#bash #if-statement #nested #sh #nested-if

Вопрос:

У меня есть этот сценарий здесь:

 killall -q $1
#turns out system already has a method for this, yey
#-q because we already have a error handling
returned=$?
#does this so that it doesn't read the success state of the ifs
if [ $returned = 0 ]
then 
    printf "Process kill attempt returned "
    echo $returned
    echo "Process killed sucessfully."
    #yey we did it
else
    #oh noes it failed
    printf "Process kill attempt returned "
    echo $returned
    echo "Process kill attempt failed."
    printf "Most likely cause of failure: "
    if [ $returned = 1 ]
    then
        echo "process does not exist or is not running"
    elif [ $returned = 2 ]
        echo "process is system task; insufficient permissions"
    else
        echo "unknown failure " $returned "; no known fail in database has this value"
    fi
fi
 

Когда я смотрю на него, я не вижу никаких проблем, но при запуске я получаю эту ошибку.

 nathan@HAL-LINUX:~$ xscreensaver
nathan@HAL-LINUX:~$ killproc xscreensaver
/usr/local/bin/killproc: line 23: syntax error near unexpected token `else'
/usr/local/bin/killproc: line 23: ` else'
nathan@HAL-LINUX:~$ 

 

Мой оригинальный сценарий опустил вложенное «если», просто сообщив вам, что он потерпел неудачу с ошибкой 3, 1 или 2.

Может, мне вернуться? Или есть способ это исправить?

Комментарии:

1. shellcheck.net нашел бы проблему.

2. @Socowi: Если честно, я даже не читал код. Я просто проверил его, и он сказал мне, в чем ошибка 😀

Ответ №1:

Ты забыл then , что после твоего elif :

 if [ $returned = 1 ]
    then
        echo "process does not exist or is not running"
    elif [ $returned = 2 ]
    then
        echo "process is system task; insufficient permissions"
    else
        echo "unknown failure " $returned "; no known fail in database has this value"
    fi