Bash
Файлы конфигурации: .profile .bash_profile и .bashrc итд
В чем отличие .bash_profile и .bashrc?
.bash_profile загружается только при входе пользователя в систему (консольный вход, ssh), в то время как .bashrc запускается для интерактивных сервисов выполняемых без логина (запуск xterm).
Переменные и параметры
$$ | pid текущего shell (самого процесса-сценария) |
$! | pid последнего процесса в фоновом режиме |
$? | код возврата последнего процесса (функции или скрипта) |
$x | где x — номер параметра, переданного скрипту ($1, $2 и т. д., $0 — последний запущенный скрипт) |
$# | количество аргументов командной строки |
$* | все аргументы в виде одной строки (слова) |
$@ | то же самое, что и $*, но при этом каждый параметр представлен как отдельная строка (слово) |
$- | список флагов, переданных сценарию |
$_ | содержит последний аргумент предыдущей команды |
Потоки вывода и файловые дескрипторы
- du -h 1 > ./log 2>&1
Наименование | Описание |
1 | Поток вывода |
2 | Поток ошибок |
&1 | обозначает файловый дескриптор 1 |
Конструкции
0-9
A
Массивы
array=( one two three )files=("/etc/passwd""/etc/group""/etc/hosts")limits=(10, 20, 26, 39, 48)
ARGV
# ------------- SCRIPT ------------- # #!/bin/bash echoecho"# arguments called with ----> ${@}"echo"# \$1 ----------------------> $1 "echo"# \$2 ----------------------> $2 "echo"# path to me ---------------> ${0}"echo"# parent path --------------> ${0%/*}"echo"# my name ------------------> ${0##*/}"echoexit # ------------- 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 ------------- #
B
C
case
case "$1" in start) esac
cut
микропрограмма для работы с текстом
Параметры:
- -d
- -f(число)
Переименовывает все файлы вида thread_1_seq_35970.1752.876204343 в файлы вида arch_1_0000035970_869578613.arc
#! /bin/bashFOUND=0for filename in*doecho"$filename"|grep-q"thread_1_seq_" if[$?-eq$FOUND]; thenpart=`echo$filename|cut-d"_"-f4|cut-d"." -f1`mv"$filename""arch_1_00000${part}_869578613.arc"fi done
D
debug
Необходимо добавить параметр -x Пример:
# bash -x script.sh
dialog
Представляет из себя интерфейс для библиотеки ncurses. И позволяет строить диалоги из скрипта. Альтернативой dialog может служить whiptail, который даже присутствует в некоторых системах по умолчанию.
#!/usr/bin/bash Choice=`$Dialog--stdout--clear--menu"Выберите файл"207114$Spisok`retval=$? case$retvalin0)esac
E
F
function
function f1{ # params $1echo$1 } f1 A
foreach
for fn in`cat filenames.txt`; doecho"the next file is $fn"cat$fndone
whileread filename doecho"Printing: $filename"cat"$filename"done< filenames.txt
for fn incat filenames.txt; docat"$fn"; done
for i in"${arrayName[@]}"do : # do whatever on $idone
G
H
Choice="Y" 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
Индексы
- [@] - Ссылка на копию массива в переменной $1
- [*] - Строка
- [n]
- var=(1 2 3 4)
- echo ${var[@]}
if
ifчто-то then# делать тот-тоelse# делать тот-тоfi
ifчто-то; then# делать тот-тоelse# делать тот-тоfi
input
Запрос символа от пользователя
echo-n"Продолжить? (y/n) " read item case"$item"in y|Y)echo"Ввели «y», продолжаем...";; n|N)echo"Ввели «n», завершаем..."exit0;;*)echo"Ничего не ввели. Выполняем действие по умолчанию...";;esac
J
K
L
M
N
O
echo
Вывод прогресс бара
$ echo-ne'##### (33%)\r'
P
Q
R
S
select
select action in"Опция 1""Опция 2""Выход"doecho$actiontest$action = "Выход"&&breakdone
T
test
- Параметры:
- -f - Наличие файла
- -d - Наличие директории
- -e -
- -z - Наличие данных в строке
- =
- !=
- Сокращенный вариант [ ]
Применение в коде
if[$daynow!= 1]; then# ....fi if[$daynow-ge1]&&[$daynow-le7]; then# ....fi
Сравнение -eqс ==
$ [ a == a ]; echo$?0 $ [ a -eq a ]; echo$? -bash: [: a: integer expression expected 2
status
Проверка статуса выполнения программы
rm test_file if[$?-eq0]; thenecho-n"$(tput hpa $(tput cols))$(tput cub 6)[OK]"echoelseecho-n"$(tput hpa $(tput cols))$(tput cub 6)[fail]"echofi
tput
Команда tput инициализирует и управляет вашими сеансами работы с терминалом, используя базу данных terminfo. С помощью tput вы можете управлять различными функциями терминала, такими как перемещение или изменение вида курсора, изменение свойств текста и очистка определенных областей экрана терминала.
- tput hpa N — сдвиг курсора на N позиций
- tput cols получает ширину окна терминала
- tput cub 6 — сдвигает курсор на 6 позиций влево
Также можно выставить цвет
- tput setaf 0..7 — цвет текста
- tput setab 0..7 — цвет фона
- tput sgr0 — сброс на дефолтный
Подробнее: http://www.ibm.com/developerworks/ru/library/au-learningtput/