2016-01-26 2 views
1

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

/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 
+0

Иногда проблема заключается в возврате каретки, который проскальзывает при переходе через окна ... по крайней мере, bash не справляется с этим. –

+0

Я передал его из linux в linux –

+0

, вам не хватает пробела между квадратными скобками для 'if' на строке 29. Также вам кажется, что у вас отсутствует хотя бы один' fi' для вас 'ifs' – 123

ответ

2

Ваша линия 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 

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

+0

проблема решена Большое вам спасибо –

+0

@BobBobson. Добро пожаловать. См. Edit, чтобы понять, как справиться с такой ошибкой. –

+0

спасибо, что я новичок в написании сценариев, поэтому у меня много вопросов. Вид вне темы, но все равно я могу сохранить вывод «apt-get install» в файл? У меня есть «apt-get install $ package -y >>/var/log/installlog», но он все еще печатает вывод в окне, и только первые несколько строк попадают в файл .... Я также попробовал команду tee с аналогичными результатами –

Смежные вопросы