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 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 ------------- #

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

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

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