Bash Scripting

Статьи

BASH, основы навигации

Управление файлами и директориями

Ссылки, а также удаление файлов и директорий

Glob-подстановки

Advanced Bash Scripting

Цикл статей на habr

Книга

Colors and formatting

.bashrc

alias is='docker images'
alias cs='docker ps'
alias csa='docker ps -a'
alias rmcs='docker rm $(docker ps -a -q)'
alias rmis="docker rmi $(docker images | grep '<none>' | awk '{print $3}')"

test

источник

Предназначена для проверки типа файла и сравнения чисел и строк. Возвращает код возврата 0 (истина) или 1 (ложь) в зависимости от вычисления выражения. Выражения могут быть как унарными, так и бинарными.

Проверка типа файла

test expression
# test -d file — истина, если file существует и является каталогом
# . -e file — истина, если file существует
# . -f file — истина, если file существует и является обычным файлом
# . -r file — истина, если file существует и доступен для чтения
# . -s file — истина, если file существует и имеет размер больше, чем ноль
# . -w file — истина, если file существует и доступен для записи
# . -x file — истина, если file существует и доступен для выполнения
# . -L file — истина, если file существует и является символьной ссылкой
# . file1 -nt file2 — истина, если file1 новее (дата модификации), чем file2
# . file1 -ot file2 — истина, если file1 старее, чем file2

if [ -f "$HOME/.bashrc" ]; then
    echo "Файл существует!"
else
    echo "Файл не существует!"
fi

Сравнение строк

# . -z string — истина, если длина string равна нулю
# . -n string — истина, если длина string не ноль
# . string1 = string2 — истина, если строки равны
# . string1 != string2 — истина, если строки не равны

Сравнение целых чисел

# . число1 -eq число2 — истина, если число1 равно число2
# . число1 -gt число2 — истина, если число1 больше число2
# . число1 -ge число2 — истина, если число1 больше или равно число2
# . число1 -lt число2 — истина, если число1 меньше число2
# . число1 -le число2 — истина, если число1 меньше или равно число2
# . число1 -ne число2 — истина, если число1 не равно число2

if [ 3 -lt 6 ]; then
    echo "Истина"
else
    echo "Ложь"
fi

Операции AND и OR

# . expr1 -a expr2 — истина, если оба выражения expr1 и expr2 истина (операция AND)
# . expr1 -o expr2 — истина, если хотя бы одно из выражений expr1 или expr2 истина (операция OR)
# . ! expr — истина, если выражение expr ложно

Recipes

Script Example

Небольшой сценарий - псевдоним Создаем файл foo.sh

#!/usr/bin/env bash
# комментарий
command arg1 arg2 arg3  "$@"

Назначаем режим исполнения

chmod 755 foo.sh

Запускаем

foo.sh arg4 arg5
#=> command arg1 arg2 arg3 arg4 arg5

Substring

FOO=release-1.2.3
echo ${FOO#release-}
#=> 1.2.3

Change String

export SRC_FILE=kube-linter/config.yaml
export ENCODED_SRC_FILE=$(echo $SRC_FILE | awk '{gsub("/", "%2F"); print}' | awk '{gsub("\.", "%2E"); print}')
echo $ENCODED_SRC_FILE
# kube-linter%2Fconfig%2Eyaml

Join search result

export FOO=$(find . -name 'jacoco*.xml' | paste -s -d ',' -)
echo $FOO
# ./calc-impl/build/reports/jacoco/test/jacocoTestReport.xml,./calc-api/build/reports/jacoco/test/jacocoTestReport.xml

export BAR=$(find . -not -regex '.*/tmp/.*' -name '*.jar' | paste -s -d ',' -)
echo $BAR
# ./calc-impl/build/libs/calc-impl.jar,./calc-library/build/libs/calc-library.jar,./buildSrc/build/libs/buildSrc.jar,./calc-api/build/libs/calc-api.jar