#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. Вместо добавления [Решаемая] в текст было бы здорово, если бы вы могли ответить на свой собственный вопрос, а затем (вам нужно подождать день или два, прежде чем вы сможете это сделать) пометьте свой собственный ответ как правильный