| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия |
| bash:developing [2018/01/29 23:59] – [Применение в коде] mirocow | bash:developing [2023/06/24 12:36] (текущий) – [R] mirocow |
|---|
| files=( "/etc/passwd" "/etc/group" "/etc/hosts" ) | files=( "/etc/passwd" "/etc/group" "/etc/hosts" ) |
| limits=( 10, 20, 26, 39, 48) | limits=( 10, 20, 26, 39, 48) |
| | </code> |
| | |
| | ==== ARGV ==== |
| | |
| | <code bash> |
| | # ------------- SCRIPT ------------- # |
| | |
| | #!/bin/bash |
| | |
| | echo |
| | echo "# arguments called with ----> ${@} " |
| | echo "# \$1 ----------------------> $1 " |
| | echo "# \$2 ----------------------> $2 " |
| | echo "# path to me ---------------> ${0} " |
| | echo "# parent path --------------> ${0%/*} " |
| | echo "# my name ------------------> ${0##*/} " |
| | echo |
| | exit |
| | |
| | # ------------- CALLED ------------- # |
| | |
| | # Notice on the next line, the first argument is called within double, |
| | # and single quotes, since it contains two words |
| | |
| | $ /misc/shell_scripts/check_root/show_parms.sh "'hello there'" "'william'" |
| | |
| | # ------------- RESULTS ------------- # |
| | |
| | # arguments called with ---> 'hello there' 'william' |
| | # $1 ----------------------> 'hello there' |
| | # $2 ----------------------> 'william' |
| | # path to me --------------> /misc/shell_scripts/check_root/show_parms.sh |
| | # parent path -------------> /misc/shell_scripts/check_root |
| | # my name -----------------> show_parms.sh |
| | |
| | # ------------- END ------------- # |
| </code> | </code> |
| ===== B ===== | ===== B ===== |
| ===== Q ===== | ===== Q ===== |
| ===== R ===== | ===== R ===== |
| ===== S ===== | |
| |
| ==== status ==== | |
| |
| Проверка статуса выполнения программы | |
| |
| <code bash> | <code bash> |
| rm test_file | $ IFS=' ' read -r -a DATABASES_SELECTED <<< "$DATABASES_SELECTED" |
| | $ read str <<< " x "; echo "-$str-" |
| if [ $? -eq 0 ]; then | -x- |
| echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" | $ IFS="" read str <<< " x "; echo "-$str-" |
| echo | - x - |
| else | $ IFS= read str <<< " x "; echo "-$str-" |
| echo -n "$(tput hpa $(tput cols))$(tput cub 6)[fail]" | - x - |
| echo | $ _ |
| fi | |
| </code> | </code> |
| | |
| | * IFS=";" выставляем делимитер разбивки (в нашем случае ";") |
| | * set -- $line - разбиваем строку, после чего каждая ее часть будет доступна как $1, $2, ... |
| | ===== S ===== |
| | |
| |
| ==== select ==== | ==== select ==== |
| ====== test ====== | ====== test ====== |
| |
| * Параметры: | * Параметры: |
| * -f - Наличие файла | * ''-b file'' — истина, если file существует и является специальным блочным устройством. |
| * -d - Наличие директории | * ''-c file'' — истина, если file существует и символьное устройство. |
| * -e - | * ''-d file'' — истина, если file существует и является каталогом. |
| * -z - Наличие данных в строке | * ''-e file'' — истина, если file существует. |
| * = | * ''-f file'' — истина, если file существует и является обычным файлом. |
| * != | * ''-g file'' — истина, если file существует и имеет установленным групповой идентификатор (set-group-id). |
| * Сокращенный вариант **[ ]** | * ''-k file'' — истина, если file имеет установленным «sticky» бит. |
| * http://www.ibm.com/developerworks/ru/library/l-bash-test/ | * ''-L file'' — истина, если file существует и является символьной ссылкой. |
| | * ''-p file'' — истина, если file существует и является именованным каналом (pipe). |
| | * ''-r file'' — истина, если file существует и читаем. |
| | * ''-s file'' — истина, если file существует и имеет размер больше, чем ноль. |
| | * ''-S file'' — истина, если file существует и является сокетом. |
| | * ''-t [fd]'' — истина, если fd открыт на терминале. Если fd пропущен, по умолчанию 1 (стандартное устройство вывода). |
| | * ''-u file'' — истина, если file существует и имеет установленным бит пользователя (set-user-id). |
| | * ''-w file'' — истина, если file существует и записываем. |
| | * ''-x file'' — истина, если file существует и исполняем. |
| | * ''-O file'' — истина, если file существует и его владелец имеет эффективный идентификатор пользователя. |
| | * ''-G file'' — истина, если file существует и его владелец имеет эффективный идентификатор группы. |
| | * ''file1 -nt file2'' — истина, если file1 новее (дата модификации), чем file2. |
| | * ''file1 -ot file2'' — истина, если file1 старее, чем file2. |
| | * ''file1 -ef file2'' — истина, если file1 и file2 имеют то же устройство и номер inode. |
| | * ''-z string'' — истина, если длина string равна нулю. |
| | * ''-n string'' — истина, если длина string не ноль. |
| | * ''string1 = string2'' — истина, если строки равны. |
| | * ''string1 != string2'' — истина, если строки не равны. |
| | * ''! expr'' — истина, если выражение expr ложь. |
| | * ''expr1 -a expr2'' — истина, если оба выражения expr1 и expr2 истина. |
| | * ''expr1 -o expr2'' — истина, если хотя бы одно из выражений expr1 или expr2 истина. |
| | * ''arg1 %оператор% arg2 -eq, -ne, -lt, -le, -gt, или -ge'' — эти арифметические бинарные операции возвращают истину, если arg1 равно (-eq), не равно (-ne), меньше чем (-lt), меньше чем или равно (-le), больше чем (-gt), или больше или равно (-ge), чем arg2, соответственно. arg1 и arg2 могут быть положительными целыми, отрицательными целыми, или специальными выражениями -l string, которые вычисляют длину string. |
| | * Сокращенный вариант **[ ]** |
| |
| ===== Применение в коде ===== | ===== Применение в коде ===== |
| 2 | 2 |
| </code> | </code> |
| | |
| | === status === |
| | |
| | Проверка статуса выполнения программы |
| | |
| | <code bash> |
| | rm test_file |
| | |
| | if [ $? -eq 0 ]; then |
| | echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" |
| | echo |
| | else |
| | echo -n "$(tput hpa $(tput cols))$(tput cub 6)[fail]" |
| | echo |
| | fi |
| | </code> |
| | |
| ====== tput ====== | ====== tput ====== |
| |
| ===== Y ===== | ===== Y ===== |
| |
| ====== Ссылки ====== | |
| |
| * [[http://binsh.ru/2008/12/13/bash-pitfalls-part01.html|Частые ошибки программирования на Bash (часть 1)]] | |
| * [[http://binsh.ru/2008/12/18/bash-pitfalls-part02.html|Частые ошибки программирования на Bash (часть 2)]] | |
| * [[http://binsh.ru/2008/12/22/bash-pitfalls-part03.html|Частые ошибки программирования на Bash (часть 3)]] | |
| * [[http://binsh.ru/2008/12/24/bash-pitfalls-part04.html|Частые ошибки программирования на Bash (часть 4)]] | |
| * [[http://binsh.ru/2008/12/29/bash-pitfalls-part05.html|Частые ошибки программирования на Bash (часть 5)]] | |
| * https://ru.wikipedia.org/wiki/Bash | |
| * [[system:shell:bash:Перенаправление вывода|Перенаправление вывода]] | |
| * [[bash:основы_bash._часть_1|Основы BASH. Часть 1]] | |
| * [[bash:основы_bash._часть_2|Основы BASH. Часть 2.]] | |
| * http://bappoy.pp.ru/2008/12/22/bash-pitfalls-part03.html | |
| * [[http://www.opennet.ru/docs/RUS/bash_scripting_guide/|Advanced Bash-Scripting Guide]] | |
| * http://habrahabr.ru/post/151771/ | |
| * [[http://linux.yaroslavl.ru/docs/conf/gnu-util/bash/bash.html|Особенности работы оболочки bash]] | |
| * [[http://www.opennet.ru/docs/RUS/bash_scripting_guide/|Искусство программирования на языке сценариев командной оболочки]] | |
| * http://eddnet.org/?tag=bash | |
| |
| ====== Видео уроки ====== | |
| |
| * https://www.youtube.com/playlist?list=PLLyG9JTjVd9VTEKisukGLJhl8H2YeIN09 | |
| |