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)

B

C

case

case "$1" in
start)
esac

cut

микропрограмма для работы с текстом

Параметры:

-d

-f(число)

Переименовывает все файлы вида thread_1_seq_35970.1752.876204343 в файлы вида arch_1_0000035970_869578613.arc

#! /bin/bash FOUND=0 for filename in * do echo "$filename" | grep -q "thread_1_seq_" if [ $? -eq $FOUND ]; then part=`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, который даже присутствует в некоторых системах по умолчанию.

Dialog

#!/usr/bin/bash Choice=`$Dialog --stdout --clear --menu "Выберите файл" 20 71 14 $Spisok` retval=$? case $retval in 0) esac

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

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

J

K

L

M

N

O

echo

Вывод прогресс бара

$ echo -ne '##### (33%)\r'

P

Q

R

S

select

select action in "Опция 1" "Опция 2" "Выход" do echo $action test $action = "Выход" && break done

T

test

Параметры:

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

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

-e -

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

=

!=

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

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

Применение в коде

if [ $daynow != 1 ]; then # .... fi if [ $daynow -ge 1 ] && [ $daynow -le 7 ]; then # .... fi

Сравнение -eq с ==

$ [ a == a ]; echo $? 0 $ [ a -eq a ]; echo $? -bash: [: a: integer expression expected 2

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