Получение ошибки для непредвиденного else в bash

#bash #if-statement

#bash #оператор if

Вопрос:

[РЕШЕНО] Я довольно новичок в написании сценариев bash / shell и пытаюсь настроить проверку ip-адреса на сервере, который примерно раз в неделю получает новый ip. Затем скрипт отправит пользователям новый IP-адрес.

Моя проблема в том, что я получаю синтаксическую ошибку в последнем операторе if-else для «неожиданного» else и могу понять, почему.

Моя первая итерация не использовала функции, а вместо этого один многострочный if-else, который выдал мне ту же ошибку. Функции сами по себе, похоже, работают просто отлично.

 #!/bin/bash

# script to send the new server ip to the users

# get the recent ip address of the system
new_ip=$(ip route get 8.8.8.8 | awk -F"src " 'NR==1{split($2,a," ");print a[1]}')

file=old_ip.txt

function ip_mail(){
 source $file
 if [ $new_ip != $old_ip ]
  then
  # email-address changed for obvious reasons
  mail -s "New Server IP" [hidden]@[hidden].com <<< "$new_ip"
  echo "old_ip=$new_ip" > old_ip.txt
  exit 0
  fi
    
    exit 0
}

function set_old(){
 touch old_ip.txt
 echo "old_ip=$new_ip" > old_ip.txt
 exit 0
}

if [ $file ]
then
 ip_mail()
else
 set_old()
fi
  

Комментарии:

1. if [ $file ] должно быть if [ -f "$file" ]

2. Используйте https://www.shellcheck.net / чтобы выявить эти простые синтаксические ошибки 😉 Посмотрите на последнее if [ $file ] !

3. Кроме того, все () неверны / не нужны в bash. Это так, function set_old { ... } и вы называете это как set_old , а не set_old() как.

4. @toydarian : спасибо, не знал этого

5. Вместо добавления [Решаемая] в текст было бы здорово, если бы вы могли ответить на свой собственный вопрос, а затем (вам нужно подождать день или два, прежде чем вы сможете это сделать) пометьте свой собственный ответ как правильный