Содержание

, ,

Bash

Файлы конфигурации: .profile .bash_profile и .bashrc итд

В чем отличие .bash_profile и .bashrc?

.bash_profile загружается только при входе пользователя в систему (консольный вход, ssh), в то время как .bashrc запускается для интерактивных сервисов выполняемых без логина (запуск xterm).

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

$$ pid текущего shell (самого процесса-сценария)
$! pid последнего процесса в фоновом режиме
$? код возврата последнего процесса (функции или скрипта)
$x где x — номер параметра, переданного скрипту ($1, $2 и т. д., $0 — последний запущенный скрипт)
$# количество аргументов командной строки
$* все аргументы в виде одной строки (слова)
$@ то же самое, что и $*, но при этом каждый параметр представлен как отдельная строка (слово)
$- список флагов, переданных сценарию
$_ содержит последний аргумент предыдущей команды

Потоки вывода и файловые дескрипторы

НаименованиеОписание
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

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

Параметры:

Переименовывает все файлы вида 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

Индексы

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

$ IFS=' ' read -r -a DATABASES_SELECTED <<< "$DATABASES_SELECTED"
$ read str <<< "  x  "; echo "-$str-"
-x-
$ IFS="" read str <<< "  x  "; echo "-$str-"
-  x  -
$ IFS= read str <<< "  x  "; echo "-$str-"
-  x  -
$ _

S

select

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

T

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 вы можете управлять различными функциями терминала, такими как перемещение или изменение вида курсора, изменение свойств текста и очистка определенных областей экрана терминала.

Также можно выставить цвет

Подробнее: http://www.ibm.com/developerworks/ru/library/au-learningtput/

U

V

W

X

Y