Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
bash:developing [2018/01/29 23:58] – [Применение в коде] mirocowbash:developing [2023/06/24 12:36] (текущий) – [R] mirocow
Строка 44: Строка 44:
 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 =====
Строка 243: Строка 279:
 ===== Q ===== ===== Q =====
 ===== R ===== ===== R =====
-===== S ===== 
- 
-==== status ==== 
- 
-Проверка статуса выполнения программы 
  
 <code bash> <code bash>
-rm test_file +IFS=' ' read --a DATABASES_SELECTED <<< "$DATABASES_SELECTED" 
- +read str <<< x  "; echo "-$str-
-if [ $-eq 0 ]; then +-x- 
-    echo -"$(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 ====
Строка 274: Строка 309:
 ====== test ====== ====== test ======
  
-    * Параметры:  +  * Параметры: 
-      * -f - Наличие файла +      * ''-b file'' — истина, если file существует и является специальным блочным устройством. 
-      * -d - Наличие директории +      * ''-c file'' — истина, если file существует и символьное устройство. 
-      * --  +      * ''-d file'' — истина, если file существует и является каталогом. 
-      * -Наличие данных в строке +      * ''-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. 
 +  * Сокращенный вариант **[ ]** 
  
 ===== Применение в коде ===== ===== Применение в коде =====
Строка 295: Строка 353:
 fi fi
 </code> </code>
 +
 +Сравнение **-eq** с **==**
  
 <code bash> <code bash>
Строка 304: Строка 364:
 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 ======
  
Строка 325: Строка 402:
 ===== 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