1

Тема: BASH: проблемы с read в условиях

При запуске скрипта команда read пропускается и я не могу ввести необходимые параметры. Как это исправить?

#!/bin/bash
cat serv|while read -s line
do if ping -q -c 2 $line
  then
#Если сервер отвечает
   echo $line " enabled!" #после успешного пинга выводится это сообщение и начинается следующий пинг
#Данные авторизации
   read -p "login: " username 
   read -p "password: " password 
#Маска файла для скачивания
   read -p "Type of file: " TYPE_FILE 
fi
done

2

Re: BASH: проблемы с read в условиях

Условие <codition> должно завершаться символом "точка-с-запятой"

while <codition>; do
    <statements>
done
( 2 * b ) || ! ( 2 * b )

3

Re: BASH: проблемы с read в условиях

Твое замечание корректно только в твоем же примере. Символ ";" является разделителем команд и нужен только в том случае, если "do" прописывается в одной строке с условием.

4

Re: BASH: проблемы с read в условиях

Хм. Видимо да. Я помню в самом начале у меня были проблемы с запоминанием места где-когда ставить точку-с-запятой в bash. Простой тест запускали? Без всех условий, только echo $line в теле цикла. Или в режиме отладки

sh -x script
bash -x script
( 2 * b ) || ! ( 2 * b )

5

Re: BASH: проблемы с read в условиях

Команда "read" сработала только когда убрал не только условие, но и цикл.

6

Re: BASH: проблемы с read в условиях

Что то неправильно в Ваших скриптах. Нигде нет проблем с маркерами конца строки? Некоторые unix-оболочки не могут работать со скриптами, строки которых завершаются в стиле windows.

( 2 * b ) || ! ( 2 * b )

7

Re: BASH: проблемы с read в условиях

Согласен, то, что в моем скрипте что-то неправильно я тоже заметил:). Маркеры стоят правильно; проблема скорее всего в построчном считывании с файла. Пытался найти альтернативные способы/переделать сам скрипт, но к сожалению пока безрезультатно.

8

Re: BASH: проблемы с read в условиях

Ну а так работает:

echo -e "127.0.0.1\n1.1.1.1\n" | while read -s line
...

Я протестировал все варианты с текстовыми данными - данные обрабатываются. .А Вы проверьте сам файл serv - он текстовый? Может проблема в нем?

( 2 * b ) || ! ( 2 * b )

9

Re: BASH: проблемы с read в условиях

Файл текстовый:) Данные с него считываются прекрасно... Не работали три команды read в конце скрипта. Выкладываю исправление:

for line in `cat serv`; 
 do 
   if ping -q -c 2 $line 
   then
   ...

10

Re: BASH: проблемы с read в условиях

nonamed
То есть Вы хотите сказать, что не работали только эти команды read -p "text" name?

( 2 * b ) || ! ( 2 * b )

11

Re: BASH: проблемы с read в условиях

Да. Извеняюсь за коряво поставленный вопрос, спасибо за помощь!