/shell-script: синтаксическая ошибка около неожиданного 'сделанного' маркера

Необходимо использовать команду уничтожения с-9 опциями.

$ kill -9 pid

Я отправляю сигнал SIGKILL уничтожить процесс, который является самым сильным сигналом всех.

1
02.01.2013, 15:14
5 ответов

Вы закрываетесь в то время как перед если.

while read filename 
do 
    echo "$filename" 
    if [ -s $filename ]
    then 
        tail -10 $filename | grep date '+%Y-%m-%d' >> $lastlines1 
        echo "- Next Error File - " >> $lastlines1 
    else 
        echo " no errrors" 
    fi
done
5
27.01.2020, 23:11

Давайте добавим некоторые новые строки и добавление отступа:

1 while read filename; do
2     echo "$filename"
3     if [ -s $filename ]; then
4         tail -10 $filename | grep date '+%Y-%m-%d' >> $lastlines1
5         echo "- Next Error File - " >> $lastlines1
6     done
7 else
8     echo " no errrors"
9 fi

строки 6 и 9, кажется, подкачиваются. Другими словами, while-do-done и if-then-else-fi пункты накладываются. Который является неправильным в оболочке (и большинство других языков программирования).

4
27.01.2020, 23:11

Необходимо использовать vim редактор для сценариев, это будет выставочный текст КРАСНОГО цвета если тот синтаксис неправильно

while read FileName 
do 
        echo "${FileName}" 

        if [ -s "${FileName}" ]; then 
            tail -10 $FileName | grep "date '+%Y-%m-%d'" >> "${lastlines1}"
            echo "- Next Error File - " >> "${lastlines1}"
        else 
            echo " no errrors" 
        fi      
done
1
27.01.2020, 23:11
  • 1
    vim волшебно не исправит код, так же, как другой редактор (кроме, возможно, nano без-w), не повредит его... Это действительно делает синтаксические ошибки открытия легче хотя... Установка vim на некотором не-Linux системы могут быть довольно раздражающими... –  Gert van den Berg 02.01.2013, 14:32
  • 2
    , я не говорю, что он исправит код, но по крайней мере мы можем заметить то же.не так ли? –  Rahul Patil 02.01.2013, 14:34
  • 3
    Это во многом зависит от среды пользователя. Для пользователя root в системе Linux с доступом в Интернет и достойным диспетчером пакетов, переключаясь на энергию, вероятно, легко (если они могут управлять подобным редактору vi)... Не так для обычного пользователя на Солярисе или пользователя во встроенной системе с ограниченным пространством... –  Gert van den Berg 02.01.2013, 14:49

Необходимо завершиться if оператор перед do while. При попытке только отозваться эхом no errors однажды, если никакие файлы не найдены, необходимо использовать флаг для указания на это.

errorCount=0
while read filename 
do 
    echo "$filename" 
    if [ -s $filename ]
    then 
        tail -10 $filename | grep date '+%Y-%m-%d' >> $lastlines1 
        echo "- Next Error File - " >> $lastlines1 
        errorCount=$(($errorCount + 1))
    fi
done
if [[ $errorCount -eq 0 ]]
then
    echo " no errors"
fi
1
27.01.2020, 23:11

Иногда эта ошибка возникает из-за неожиданных символов CR в файле, обычно из-за того, что файл был создан в системе Windows, которая использует окончания строк CR. Вы можете исправить это, запустив dos2unix или tr, например:

tr -d '\015' < yourscript.sh > newscript.sh

Это удалит все символы CR из файла, и в новом файле сценария оболочки вы не получите эту ошибку.

0
27.01.2020, 23:11

Теги

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