Syntax highlighting of linux/bash

<<TableOfContents()>>

= Bash Scripting =

== Статьи ==

[[https://habrahabr.ru/post/99041/|BASH, основы навигации|class=" moin-https"]]

[[https://habrahabr.ru/post/99291/|Управление файлами и директориями|class=" moin-https"]]

[[https://habrahabr.ru/post/99653/|Ссылки, а также удаление файлов и директорий|class=" moin-https"]]

[[https://habrahabr.ru/post/99827/|Glob-подстановки|class=" moin-https"]]

[[http://www.tldp.org/LDP/abs/html/|Advanced Bash Scripting|class=" moin-http"]]

[[https://habr.com/ru/company/ruvds/blog/325522/|Цикл статей на habr|class=" moin-https"]]

[[http://rus-linux.net/MyLDP/BOOKS/abs-guide/flat/abs-book.html|Книга|class=" moin-http"]]

[[https://misc.flogisoft.com/bash/tip_colors_and_formatting|Colors and formatting|class=" moin-https"]]

== .bashrc ==

{{{#!highlight bash
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 ==

[[https://tokmakov.msk.ru/blog/item/50|источник]]

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

'''Проверка типа файла'''
{{{#!highlight bash
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
}}}

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

'''Сравнение целых чисел'''
{{{#!highlight bash
# . число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'''
{{{#!highlight bash
# . expr1 -a expr2 — истина, если оба выражения expr1 и expr2 истина (операция AND)
# . expr1 -o expr2 — истина, если хотя бы одно из выражений expr1 или expr2 истина (операция OR)
# . ! expr — истина, если выражение expr ложно
}}}

== Recipes ==

=== Script Example ===

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

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

}}}

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

{{{#!highlight bash
chmod 755 foo.sh

}}}

Запускаем

{{{#!highlight bash
foo.sh arg4 arg5
#=> command arg1 arg2 arg3 arg4 arg5

}}}

=== Substring ===

{{{#!highlight bash
FOO=release-1.2.3
echo ${FOO#release-}
#=> 1.2.3

}}}

=== Change String ===

{{{#!highlight bash
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 ===

{{{#!highlight bash
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

}}}