синтаксическая ошибка do done

Я работаю над сценарием, который поможет другим людям использовать менеджер пакетов apt. скрипт работал нормально, пока я не перенес его на флешку и не поставил на другой компьютер. ошибка, от которой я не могу избавиться:

/bin/az.sh: строка 57: синтаксическая ошибка рядом с неожиданным токеном "сделано"

/bin/az.sh: строка 57: `готово;'

вот код из скрипта:

#!/bin/bash
procid=$(lsof /var/lib/dpkg/lock > /var/log/az1; sed '1d' /var/log/az1 | awk '{print $2}' )
#kill any process using apt manager 
if [ "`lsof /var/lib/dpkg/lock`" = "" ]; then
    echo "no conflicts"
else
    figlet killed old process
    kill -9 $procid 
fi;
figlet updating package lists
#apt-get update > /var/log/azupdatelog
while [ $input != "q" ]; do
    echo "(1) Find package by name"
    echo "(2) Find package by description"
    echo "(3) Install package"
    echo "(4) Remove package"
    echo "(5) Fix Dependencies"
    echo "(6) Perform an upgade"
    echo "(q) Quit "
    read input
    if [ $input = "1" ]; then 
        echo "enter package name"
        read package
        apt-cache show $package
    elif [ $input = "2" ]; then
        echo "enter search keyword"
        read package
        apt-cache search $package
    elif [ $input = "3" ]; then
        apt-get build-dep $package
        apt-get install $package -y > /var/log/installlog
        exitstatus=$(echo $?)
        if [ $exitstatus = "0" ]; then
            figlet Installation Succesful
        elif [ $exitstatus = "1" ]; then
            figlet Failure check /var/log/installlog
            figlet check now?
            echo "y or n"
            read input2
                if [ $input2 = "y"]; then
                    cat /var/log/installlog
                fi;
    elif [ $input = "4" ]; then
        echo "enter package name"
        read package
        apt-get remove $package
    elif [ $input = "5" ]; then
        echo "enter package name"
        read package
        apt-get build-dep $package
    elif [ $input = "6" ]; then
        echo ""
        apt-get upgrade
    else
        echo "oops check your input"
    fi;
done

person Bob Bobson    schedule 26.01.2016    source источник
comment
Иногда проблема заключается в возврате каретки, который проскальзывал при переходе через окна... по крайней мере, bash не может с этим справиться.   -  person Peter - Reinstate Monica    schedule 26.01.2016
comment
я перекинул с линукса на линукс   -  person Bob Bobson    schedule 26.01.2016
comment
вам не хватает пробела между квадратными скобками для if в строке 29. Также вам не хватает по крайней мере одного fi для вас ifs   -  person 123    schedule 26.01.2016
comment
Большое спасибо за быстрый ответ! исправил проблему, и теперь я знаю, что нужно следить за такими вещами   -  person Bob Bobson    schedule 26.01.2016
comment
Возможный дубликат Как мне сравнить две строковые переменные в операторе if в Bash?   -  person Benjamin W.    schedule 26.01.2016


Ответы (1)


В вашей строке 35 elif [ $exitstatus = "1" ]; then нет соответствующих fi;

В следующий раз, когда вы получите такую ​​​​ошибку, удалите весь шум в текущей области:

while [ $input != "q" ]; do
    if [ $input = "1" ]; then   
    elif [ $input = "2" ]; then 
    elif [ $input = "3" ]; then 
        if [ $exitstatus = "0" ]; then #There is no corresponding fi;  
        elif [ $exitstatus = "1" ]; then   
                if [ $input2 = "y"]; then
                fi;
    elif [ $input = "4" ]; then 
    elif [ $input = "5" ]; then 
    elif [ $input = "6" ]; then
    else
    fi;
done

И вы обнаружите ошибку довольно быстро.

person Thomas Ayoub    schedule 26.01.2016
comment
@BobBobson Не за что. См. редактирование, чтобы понять, как бороться с такого рода ошибками. - person Thomas Ayoub; 26.01.2016
comment
Спасибо, я новичок в написании сценариев, поэтому у меня много вопросов. Немного не по теме, но могу ли я сохранить вывод apt-get install в файл? У меня есть apt-get install $package -y ›› /var/log/installlog, но он все еще печатает вывод в окне, и только первые несколько строк попадают в файл.... Я также пробовал команду tee с аналогичным полученные результаты - person Bob Bobson; 26.01.2016