Bash / Sh примеры

Баш начинается к настройки скрипта (как он себя должен вести в разных ситуациях), поэтому коротко:

  • -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

10.09.2021 21:22