Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
| bash:developing [2015/12/11 11:12] – [Ссылки] mirocow | bash:developing [2023/06/24 12:36] (текущий) – [R] mirocow | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | {{tag> | ||
| + | |||
| ====== Bash ====== | ====== Bash ====== | ||
| + | |||
| + | ===== Файлы конфигурации: | ||
| + | |||
| + | ==== В чем отличие .bash_profile и .bashrc? ==== | ||
| + | |||
| + | .bash_profile загружается только при входе пользователя в систему (консольный вход, ssh), | ||
| + | в то время как | ||
| + | логина (запуск xterm). | ||
| + | ===== Переменные и параметры ===== | ||
| + | |||
| + | |||
| + | |$$ |pid текущего shell (самого процесса-сценария)| | ||
| + | |$! |pid последнего процесса в фоновом режиме| | ||
| + | |$? |код возврата последнего процесса (функции или скрипта)| | ||
| + | |$x |где x — номер параметра, | ||
| + | |$# | ||
| + | |$* |все аргументы в виде одной строки (слова)| | ||
| + | |$@ |то же самое, что и $*, но при этом каждый параметр представлен как отдельная строка (слово)| | ||
| + | |$- |список флагов, | ||
| + | |$_ |содержит последний аргумент предыдущей команды| | ||
| ===== Потоки вывода и файловые дескрипторы ===== | ===== Потоки вывода и файловые дескрипторы ===== | ||
| * du -h 1 > ./log 2>&1 | * du -h 1 > ./log 2>&1 | ||
| - | * 1 - Поток вывода | + | |
| - | | + | |Наименование|Описание| |
| - | | + | |1| Поток вывода| |
| + | |2| Поток ошибок| | ||
| + | |&1|обозначает файловый дескриптор 1| | ||
| Строка 20: | Строка 44: | ||
| files=( "/ | files=( "/ | ||
| limits=( 10, 20, 26, 39, 48) | limits=( 10, 20, 26, 39, 48) | ||
| + | </ | ||
| + | |||
| + | ==== ARGV ==== | ||
| + | |||
| + | <code bash> | ||
| + | # ------------- SCRIPT ------------- # | ||
| + | |||
| + | #!/bin/bash | ||
| + | |||
| + | echo | ||
| + | echo "# arguments called with ----> | ||
| + | echo "# \$1 ----------------------> | ||
| + | echo "# \$2 ----------------------> | ||
| + | echo "# path to me ---------------> | ||
| + | echo "# parent path --------------> | ||
| + | echo "# my name ------------------> | ||
| + | echo | ||
| + | exit | ||
| + | |||
| + | # ------------- CALLED ------------- # | ||
| + | |||
| + | # Notice on the next line, the first argument is called within double, | ||
| + | # and single quotes, since it contains two words | ||
| + | |||
| + | $ / | ||
| + | |||
| + | # ------------- RESULTS ------------- # | ||
| + | |||
| + | # arguments called with ---> | ||
| + | # $1 ----------------------> | ||
| + | # $2 ----------------------> | ||
| + | # path to me --------------> | ||
| + | # parent path -------------> | ||
| + | # my name -----------------> | ||
| + | |||
| + | # ------------- END ------------- # | ||
| </ | </ | ||
| ===== B ===== | ===== B ===== | ||
| ===== C ===== | ===== C ===== | ||
| - | * case | + | ==== case ==== |
| - | * синтаксис: | + | |
| - | * case in< | + | < |
| case " | case " | ||
| start) | start) | ||
| esac | esac | ||
| + | </ | ||
| + | |||
| + | ==== cut ==== | ||
| + | |||
| + | микропрограмма для работы с текстом | ||
| + | |||
| + | Параметры: | ||
| + | * -d | ||
| + | * -f(число) | ||
| + | |||
| + | Переименовывает все файлы вида thread_1_seq_35970.1752.876204343 в файлы вида arch_1_0000035970_869578613.arc | ||
| + | <code bash> | ||
| + | #! /bin/bash | ||
| + | FOUND=0 | ||
| + | for filename in * | ||
| + | do | ||
| + | echo " | ||
| + | |||
| + | if [ $? -eq $FOUND ]; then | ||
| + | part=`echo $filename | cut -d " | ||
| + | mv " | ||
| + | fi | ||
| + | |||
| + | done | ||
| </ | </ | ||
| ===== D ===== | ===== D ===== | ||
| + | |||
| + | ==== debug ==== | ||
| + | |||
| + | Необходимо добавить параметр -x | ||
| + | Пример: | ||
| + | < | ||
| + | |||
| + | ==== dialog ==== | ||
| + | |||
| + | Представляет из себя интерфейс для библиотеки ncurses. И позволяет строить диалоги из скрипта. Альтернативой dialog может служить whiptail, который даже присутствует в некоторых системах по умолчанию. | ||
| + | |||
| + | [[system: | ||
| + | |||
| + | <code bash> | ||
| + | # | ||
| + | |||
| + | Choice=`$Dialog --stdout --clear --menu " | ||
| + | retval=$? | ||
| + | |||
| + | case $retval in | ||
| + | 0) | ||
| + | esac | ||
| + | </ | ||
| ===== E ===== | ===== E ===== | ||
| ===== F ===== | ===== F ===== | ||
| Строка 78: | Строка 185: | ||
| ===== G ===== | ===== G ===== | ||
| ===== H ===== | ===== H ===== | ||
| + | |||
| + | <code bash> | ||
| + | |||
| + | Choice=" | ||
| + | |||
| + | cat << EOF_CONFIG > $config | ||
| + | client | ||
| + | remote xxxxx | ||
| + | port 1194 | ||
| + | proto udp | ||
| + | dev tun | ||
| + | ns-cert-type server | ||
| + | tls-client | ||
| + | reneg-sec 60 | ||
| + | mtu-test | ||
| + | cipher AES-256-CBC | ||
| + | comp-lzo | ||
| + | persist-key | ||
| + | persist-tun | ||
| + | keysize 256 | ||
| + | nobind | ||
| + | explicit-exit-notify 2 | ||
| + | pkcs12 yyy/$Choice | ||
| + | EOF_CONFIG | ||
| + | |||
| + | echo $config | ||
| + | </ | ||
| ===== I ===== | ===== I ===== | ||
| Строка 92: | Строка 226: | ||
| - | * if | ||
| - | * Синтаксис: | ||
| - | * if | ||
| - | * if else | ||
| <code bash> | <code bash> | ||
| if что-то | if что-то | ||
| Строка 104: | Строка 234: | ||
| fi | fi | ||
| </ | </ | ||
| - | *if []; then | + | |
| <code bash> | <code bash> | ||
| if что-то; | if что-то; | ||
| Строка 112: | Строка 242: | ||
| fi | fi | ||
| </ | </ | ||
| + | |||
| + | === input === | ||
| + | |||
| + | Запрос символа от пользователя | ||
| + | |||
| + | <code bash> | ||
| + | echo -n " | ||
| + | |||
| + | read item | ||
| + | case " | ||
| + | y|Y) echo " | ||
| + | ;; | ||
| + | n|N) echo " | ||
| + | exit 0 | ||
| + | ;; | ||
| + | *) echo " | ||
| + | ;; | ||
| + | esac | ||
| + | </ | ||
| + | |||
| ===== J ===== | ===== J ===== | ||
| ===== K ===== | ===== K ===== | ||
| Строка 118: | Строка 268: | ||
| ===== N ===== | ===== N ===== | ||
| ===== O ===== | ===== O ===== | ||
| + | |||
| + | ==== echo ==== | ||
| + | |||
| + | Вывод прогресс бара | ||
| + | <code bash> | ||
| + | $ echo -ne '##### | ||
| + | </ | ||
| + | |||
| ===== P ===== | ===== P ===== | ||
| ===== Q ===== | ===== Q ===== | ||
| ===== R ===== | ===== R ===== | ||
| + | |||
| + | <code bash> | ||
| + | $ IFS=' ' read -r -a DATABASES_SELECTED <<< | ||
| + | $ read str <<< | ||
| + | -x- | ||
| + | $ IFS="" | ||
| + | - x - | ||
| + | $ IFS= read str <<< | ||
| + | - x - | ||
| + | $ _ | ||
| + | </ | ||
| + | |||
| + | * IFS=";" | ||
| + | * set -- $line - разбиваем строку, | ||
| ===== S ===== | ===== S ===== | ||
| + | |||
| + | |||
| + | ==== select ==== | ||
| + | |||
| + | <code bash> | ||
| + | select action in " | ||
| + | do | ||
| + | echo $action | ||
| + | test $action = " | ||
| + | done | ||
| + | </ | ||
| ===== T ===== | ===== T ===== | ||
| - | * test | + | ====== |
| - | * Параметры: | + | |
| - | * -f - Наличие файла | + | |
| - | * -d - Наличие директории | + | * '' |
| - | * -e - | + | * '' |
| - | * -z - Наличие данных в строке | + | * '' |
| - | * Сокращенный вариант [] | + | * '' |
| - | * http:// | + | * '' |
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * Сокращенный вариант | ||
| + | |||
| + | |||
| + | ===== Применение в коде ===== | ||
| + | |||
| + | <code bash> | ||
| + | if [ $daynow != 1 ]; then | ||
| + | # .... | ||
| + | fi | ||
| + | |||
| + | if [ $daynow -ge 1 ] && [ $daynow -le 7 ]; then | ||
| + | # .... | ||
| + | fi | ||
| + | </ | ||
| + | |||
| + | Сравнение **-eq** с **==** | ||
| + | |||
| + | <code bash> | ||
| + | $ [ a == a ]; echo $? | ||
| + | 0 | ||
| + | |||
| + | $ [ a -eq a ]; echo $? | ||
| + | -bash: [: a: integer expression expected | ||
| + | 2 | ||
| + | </ | ||
| + | |||
| + | === status === | ||
| + | |||
| + | Проверка статуса выполнения программы | ||
| + | |||
| + | <code bash> | ||
| + | rm test_file | ||
| + | |||
| + | if [ $? -eq 0 ]; then | ||
| + | | ||
| + | echo | ||
| + | else | ||
| + | echo -n " | ||
| + | echo | ||
| + | fi | ||
| + | </ | ||
| + | |||
| + | ====== tput ====== | ||
| + | |||
| + | Команда tput инициализирует и управляет вашими сеансами работы с терминалом, | ||
| + | |||
| + | | ||
| + | * tput cols получает ширину окна терминала | ||
| + | * tput cub 6 — сдвигает курсор на 6 позиций влево | ||
| + | |||
| + | Также можно выставить цвет | ||
| + | |||
| + | * tput setaf 0..7 — цвет текста | ||
| + | * tput setab 0..7 — цвет фона | ||
| + | * tput sgr0 — сброс на дефолтный | ||
| + | |||
| + | Подробнее: | ||
| ===== U ===== | ===== U ===== | ||
| ===== V ===== | ===== V ===== | ||
| Строка 138: | Строка 402: | ||
| ===== Y ===== | ===== Y ===== | ||
| - | ====== Ссылки ====== | ||
| - | |||
| - | * [[: | ||
| - | * [[: | ||
| - | * [[system: | ||
| - | * [[: | ||
| - | * [[bash: | ||
| - | * [[bash: | ||
| - | * http:// | ||
| - | * [[http:// | ||
| - | * http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * http:// | ||
| - | |||
| - | ====== Видео уроки ====== | ||
| - | * https:// | ||