Bash почему не корректно работает скрипт?

День добрый. Имею следующий скрипт (в bash не силён делаю только первые шаги)

#!/bin/bash
d=$(date)

if [ ! -f /script/scriptDPlog ];

touch /script/scriptDPlog

#chown postgres:dracon /script/scriptDPlog

echo $d >/script/scriptDPlog
echo "Skript run" >> /script/scriptDPlog
for DBNAME in $(psql -q -c "\t" -c "\a" -c "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres';")
do
dropdb -f $DBNAME
echo "Logical Replication Master-Slave start" >> /script/scriptDPlog
#pg_dumpall --host=192.168.250.161 --no-password  --no-privileges | psql >>  /script/scriptDPlog
pg_dumpall --database=postgres --host=192.168.250.160 --no-password --globals-only --no-privileges | pg_dump --dbname "automat" --host=192.168.250.160 --no-password --create  | psql >>  /script/scriptDPlog

done

then

echo $d >/script/scriptDPlog
echo "Skript run" >> /script/scriptDPlog
for DBNAME in $(psql -q -c "\t" -c "\a" -c "SELECT datname FROM pg_database WHERE NOT datistemplate AND datname <> 'postgres';")
do

dropdb -f $DBNAME

echo "Logical Replication Master-Slave start" >> /script/scriptDPlog
#pg_dumpall --host=192.168.250.161 --no-password  --no-privileges | psql >>  /script/scriptDPlog
pg_dumpall --database=postgres --host=192.168.250.160 --no-password --globals-only --no-privileges | pg_dump --dbname "automat" --host=192.168.250.160 --no-password --create  | psql >>  /script/scriptDPlog

done

fi


Проблема в следующем - команда
pg_dumpall --database=postgres --host=192.168.250.160 --no-password --globals-only --no-privileges | pg_dump --dbname "automat" --host=192.168.250.160 --no-password --create  | psql >>  /script/scriptDPlog

Отрабатывает дважды. И в if и в then.
То есть создан или не фйал лога (/script/scriptDPlog) без разницы - pg_dumpall отрабатывает 2 раза.
Подскажите где ошибся ?
  • Вопрос задан
  • 64 просмотра
Решения вопроса 1
karabanov
@karabanov
Системный администратор
Не then, а else

Парвильный синтаксис:

if условие
then
  Действие если условие истинно
else
  Действие если условие ложно
fi


PS
Пропиши в шебанг #!/bin/bash -e, чтобы падало при возникновении ошибки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы