[Решено] Syntax error: "elif" unexpected (не понятно)

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
bars
Сообщения: 634
ОС: BSD/LINUX

[Решено] Syntax error: "elif" unexpected

Сообщение bars »

привет.
Система ubuntu 20.04.3 LTS.
Простенький скрипт проверки сети сервера.

Код: Выделить всё

#!/usr/bin/bash
CUR="curl -Is --connect-timeout 15"
if $CUR https://www.google.com /dev/null 2>&1; then
elif sleep 120 && $CUR https://www.google.com /dev/null 2>&1; then
else
echo 'DOWN SERV.'
reboot
fi
exit 0
При запуске скрипта выдает ошибку.

Код: Выделить всё

sh /root/up_down.sh
/root/up_down.sh: 4: Syntax error: "elif" unexpected
Не пойму что не так, пробовал убирать elif, оставлять только else, тогда ругается на else.
Последний раз редактировалось bars 11.02.2022 18:54, всего редактировалось 1 раз.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 1988
ОС: Gentoo

Re: Syntax error: "elif" unexpected

Сообщение ormorph »

bars писал:
11.02.2022 09:52
Не пойму что не так, пробовал убирать elif, оставлять только else, тогда ругается на else
После then должен выполняться какой нибудь оператор. Добавьте хотя бы после каждого then:

Код: Выделить всё

echo >/dev/null
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 634
ОС: BSD/LINUX

Re: Syntax error: "elif" unexpected

Сообщение bars »

Код: Выделить всё

#!/bin/bash
CUR="curl -Is --connect-timeout 15"

if $CUR https://www.google.com /dev/null 2>&1; then
echo >/dev/null
else
echo 'DOWN SERV.'
fi
exit 0
Странно почему условие else выполняется если гугл доступен по сети.

Код: Выделить всё

sh /root/up_down.sh
HTTP/2 200 
content-type: text/html; charset=ISO-8859-1
p3p: CP="This is not a P3P policy! See g.co/p3phelp for more info."
date: Fri, 11 Feb 2022 07:43:14 GMT
server: gws
x-xss-protection: 0
x-frame-options: SAMEORIGIN
expires: Fri, 11 Feb 2022 07:43:14 GMT
cache-control: private
set-cookie: CONSENT=PENDING+427; expires=Sun, 11-Feb-2024 07:43:14 GMT; path=/; domain=.google.com; Secure
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"

DOWN SERV.
Странная интерпритация bash в убунту.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 1988
ОС: Gentoo

Re: Syntax error: "elif" unexpected

Сообщение ormorph »

bars писал:
11.02.2022 10:46
Странная интерпритация bash в убунту.
Ни чего тут странного, сами посмотрите свой код, по правилам у вас не должно быть вывода. Вывод у вас присутствует, так как вы не послали вывод в /dev/null, а /dev/null выполняется как параметр curl, от сюда и ошибка. Добавьте знак >.
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 634
ОС: BSD/LINUX

Re: Syntax error: "elif" unexpected

Сообщение bars »

Сделал так.

Код: Выделить всё

#!/bin/bash
CUR=$(curl -LI --connect-timeout 15 https://www.google.com -o /dev/null -w '%{http_code}\n' -s)

if [ ${CUR} -eq "200" ]
then
  echo >/dev/null
elif sleep 60 && curl -LI --connect-timeout 15 https://www.google.com -o /dev/null; then
  echo >/dev/null
else
  reboot
fi

exit 0
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19413
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Syntax error: "elif" unexpected

Сообщение Bizdelnick »

ormorph писал(а):
11.02.2022 10:31
Добавьте хотя бы после каждого then:

Код: Выделить всё

echo >/dev/null
Лучше true или его синоним :. Зачем лишний раз файл открывать-закрывать и что-то писать?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19413
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Syntax error: "elif" unexpected

Сообщение Bizdelnick »

bars писал:
11.02.2022 12:10
Сделал так.

Код: Выделить всё

#!/bin/bash
CUR=$(curl -LI --connect-timeout 15 https://www.google.com -o /dev/null -w '%{http_code}\n' -s)

if [ ${CUR} -eq "200" ]
then
  echo >/dev/null
elif sleep 60 && curl -LI --connect-timeout 15 https://www.google.com -o /dev/null; then
  echo >/dev/null
else
  reboot
fi

exit 0
Это ужасно. Совершенно нечитаемо. Почему не сделать хотя бы так?

Код: Выделить всё

#!/bin/sh
CUR=$(curl -LI --connect-timeout 15 https://www.google.com -o /dev/null -w '%{http_code}\n' -s)

if [ "${CUR}" -ne 200 ]; then
  sleep 60
  if ! curl -LI --connect-timeout 15 https://www.google.com -o /dev/null; then
    reboot
  fi
fi
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 634
ОС: BSD/LINUX

Re: Syntax error: "elif" unexpected

Сообщение bars »

Bizdelnick писал:
11.02.2022 14:05
if ! curl
Хмм, что то запутался, а что это означает ! в данном случае?
Добавлено (15:35):
Bizdelnick писал:
11.02.2022 13:54
Лучше true или его синоним :. Зачем лишний раз файл открывать-закрывать и что-то писать?
Можете пояснить по этому поводу, не пойму.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 19413
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Syntax error: "elif" unexpected

Сообщение Bizdelnick »

bars писал:
11.02.2022 15:34
Хмм, что то запутался, а что это означает ! в данном случае?
Логическое отрицание. Код выхода меняется с 0 на 1 или с ненулевого значения на 0.
bars писал:
11.02.2022 15:34
Можете пояснить по этому поводу, не пойму.
Не могу. Попробуйте перечитать ещё раз.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали: