Баш начинается к настройки скрипта (как он себя должен вести в разных ситуациях), поэтому коротко:
-e exits on error-u errors on undefined variables-x prints commands before execution-o (for option) pipefail exits on command pipe failuresДетальнее here. Пример с применением -e и -o:
#!/bin/sh -e
# чтобы печатались выполняемые команды:
set -o xtrace
echo 123А ниже просто разные примеры.
Проверка что данные есть:
SOME_CONTENT=`cat /my/file`
if [ "$SOME_CONTENT" != "" ]; then
echo "data: $SOME_CONTENT";
exit 1;
fiУстановка в переменную последней строки из всех строк, которые будут выведены командой:
$ docker exec -it backup-storage-mysql ls
bin docker-entrypoint-initdb.d home media proc sbin tmp
boot entrypoint.sh lib mnt root srv usr
dev etc lib64 opt run sys var
OUTPUT=$(docker exec -it backup-storage-mysql ls)
$ echo $OUTPUT
dev etc lib64 opt run sys varot srv usra proc sbin tmpПроверить статус завершения команды:
docker exec backup-storage-mysql /tmp/db-dumps-checker-in-docker.sh
exit_code=$?
if [ $exit_code -ne 0 ]; then
XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send --urgency=critical --expire-time=0 "db-dumps-checker" "SQL HAS PROBLEMS"
exit $exit_code
fiИтерация по файлам директории:
for file in $(find /tmp/mysqldumps/schema -type f)
do
echo $file
gunzip < $file | mysql -h 127.0.0.1 -u root -pmy-secret-pw
doneИгнорируя код возврата, сравниваем то, что выдала команда с пустой строкой:
# build php-fpm for prod if not exists:
if [[ "$(docker images -q banki-local/php-fpm-prod:latest 2> /dev/null)" == "" ]]; then
make docker-build-php-fpm-for-prod
fi