Почему мой сценарий bash выводит «+ '[' 0 -le 1 ']'» при запуске с bash -x script.sh?

I создали следующий сценарий оболочки для резервного копирования базы данных MySQL, заархивируйте его и затем скопируйте в корзину s3:

#vim /home/ubuntu/backup/mysqlbackup2.sh

#!/bin/bash
## Backup mysql DB, zip it and then copy it to s3 bucket

mysqldump -hhostname -uusername dbName -p'p@ssW0rd' > db.sql

if [ $? -le 1 ] 
then
    # zip the file and copy it s3 bucket
    sudo gzip -9 db.sql
    s3cmd put db.sql.gz s://mys3bucket/
else 
    echo "Fail to backup MySQL DB" >> "backup.log"
fi

Он все делает нормально, и резервная копия копируется в корзину s3. Но я не могу понять вывод сценария оболочки:

enter image description here

Я понимаю предупреждение о пароле, но почему оно показывает: '[' 0 -le 1 ']' ? Что-то не так с моим условием if?

1
задан 21 May 2019 в 08:04

1 ответ

Ваш сценарий:

mysqldump -hhostname -uusername dbName -p'p@ssW0rd' > db.sql

if [ $? -lt 1 ] #<-- if the script exit status value is less than or equal 1, which means it succeeded then execute the if block
then
    # zip the file and copy it s3 bucket
    gzip -9 db.sql #<-- create a zipped folder from the mysql backup file
    s3cmd put db.sql.gz s://mys3bucket/ #<-- Amazon http request PUT command
else 
    echo "Fail to backup MySQL DB" >> "backup.log" #<-- if the backup failed let us know by out putting this message into the backup.log file
fi

'[' 0 -le 1 ']': Ноль здесь означает, что команда для резервного копирования выполнена успешно и читает «меньше или равно». И да, эти строки со знаком «+» показывают различные шаги в процессе выполнения, и это потому, что вы использовали опцию -x в выполнении скрипта bash.

Также, как заметил в desert, параметр sudo и «-le» должны быть удалены и заменены на «-lt» соответственно.

0
ответ дан 21 May 2019 в 08:04

Другие вопросы по тегам:

Похожие вопросы: