Bash

Переменные и параметры

$$	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)

B

C

case

case "$1" in
start)
esac

D

debug

Необходимо добавить параметр -x Пример:

# bash -x script.sh

dialog

Представляет из себя интерфейс для библиотеки ncurses. И позволяет строить диалоги из скрипта. Альтернативой dialog может служить whiptail, который даже присутствует в некоторых системах по умолчанию.

Dialog

E

F

function

function f1{ # params $1 echo $1 } f1 A

foreach

for fn in `cat filenames.txt`; do echo "the next file is $fn" cat $fn done
while read filename do echo "Printing: $filename" cat "$filename" done < filenames.txt
for fn in cat filenames.txt; do cat "$fn"; done
for i in "${arrayName[@]}" do : # do whatever on $i done

G

H

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», завершаем..." exit 0 ;; *) echo "Ничего не ввели. Выполняем действие по умолчанию..." ;; esac

J

K

L

M

N

O

P

Q

R

S

status

Проверка статуса выполнения программы

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

T

test

Параметры:

-f - Наличие файла

-d - Наличие директории

-e -

-z - Наличие данных в строке

Сокращенный вариант [ ]

http://www.ibm.com/developerworks/ru/library/l-bash-test/

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/

U

V

W

X

Y

Ссылки

Частые ошибки программирования на Bash (часть 1)

Частые ошибки программирования на Bash (часть 2)

Частые ошибки программирования на Bash (часть 3)

Частые ошибки программирования на Bash (часть 4)

Частые ошибки программирования на Bash (часть 5)

https://ru.wikipedia.org/wiki/Bash

Перенаправление вывода

Основы BASH. Часть 1

Основы BASH. Часть 2.

http://bappoy.pp.ru/2008/12/22/bash-pitfalls-part03.html

Advanced Bash-Scripting Guide

http://habrahabr.ru/post/151771/

Особенности работы оболочки bash

Искусство программирования на языке сценариев командной оболочки

http://eddnet.org/?tag=bash

Видео уроки

https://www.youtube.com/playlist?list=PLLyG9JTjVd9VTEKisukGLJhl8H2YeIN09