Как я могу запустить вторую команду после первого окончания? - PullRequest
0 голосов
/ 15 мая 2018

У меня есть скрипт для поиска значения в значении конфигурации и замены его пользовательским вводом. Это прекрасно работает только с одним оператором if. Но я хотел бы предложить пользователю 3 вопроса (спросить IP1 => заменить значение, попросить IP2 => заменить значение и т. Д.)

Просто скопировать / вставить ту же команду и завершить с помощью fi не работает.

Работает

if read -p "Enter IP1" IP1; then
  sed -i~ -e "s/myip1/${IP1}/g" test.txt
else
  echo Error
fi

не работает

if read -p "Enter IP1" IP1; then
  sed -i~ -e "s/myip1/${IP1}/g" test.txt
else
  echo Error
if read -p "Enter IP2" IP2; then
  sed -i~ -e "s/myip2/${IP2}/g" test.txt
else
  echo Error
fi

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Оболочки не чувствительны к пробелам (в отличие, скажем, от Python). Операторы if завершаются командой fi, а не компоновкой вашего кода. Если у вас есть два if заявления, вам нужно два fi s:

if read -p "Enter IP1" IP1; then
  sed -i~ -e "s/myip1/${IP1}/g" test.txt
else
  echo Error
fi   # <<<<<< Added
if read -p "Enter IP2" IP2; then
  sed -i~ -e "s/myip2/${IP2}/g" test.txt
else
  echo Error
fi

Между прочим, вы не должны использовать все заглавные буквы для имен переменных, потому что имена все заглавные буквы обычно используются оболочкой и ОС. Ваши собственные переменные должны иметь имена в нижнем регистре, чтобы они не конфликтовали.

0 голосов
/ 15 мая 2018

Тестирование это:

if read -p "Please Enter an IP" "$ip":'[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; then
  echo "success"
else
  echo "fail"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...