CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
02.07.2016

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Окружение :: shell

Tips от Madskull'a: bash

Bash tips

Ожидание запущенных в фоне задач

{ command1 & pid1=$! ;}; \
	{ command2 & pid2=$! ;}; \
	wait $pid1 $pid2

прерывание по таймеру (SIGALRM)

TIME=10	# прерывание через 10 секунд 
trap 'exit' ALRM 
( sleep $TIME && kill -ALRM "$$" ) &

параметры в скриптах и функциях

func()
{
	echo $1
	echo "---"
	for i in "$*"; do echo $i; done
	echo "---"
	for i in "$@"; do echo $i; done
	echo "---"
	for i in $*; do echo $i; done
}

func "aaa bbb" "ccc ddd"

# aaa bbb
# ---
# aaa bbb ccc ddd
# ---
# aaa bbb
# ccc ddd
# ---
# aaa
# bbb
# ccc
# ddd

массивы

array=("aaa bbb" "ccc ddd")

echo ${#array[@]}  # количество элементов
# 2

for i in "${array[@]}"; do echo $i ; done
# aaa bbb
# ccc ddd

for i in "${array[*]}"; do echo $i ; done
# aaa bbb ccc ddd

for i in ${array[@]}; do echo $i ; done
# aaa
# bbb
# ccc
# ddd

for ((i=0; $i<${#array[@]}; i++)); do echo ${array[$i]}; done
#aaa bbb
#ccc ddd

trap: ловим прерывания (updated)

trap 'echo словили ERR' ERR
# псевдосигнал, отрабатывает при ошибке в скрипте

trap 'echo словили EXIT' EXIT
# псевдосигнал, отрабатывает при выходе из скрипта
# EXIT должен быть определен перед остальными ловушками

trap 'echo словили SIGTERM; exit 1' SIGTERM
# kill -15

trap 'echo словили INT; exit 1' INT
# ^C или kill -2

trap 'echo словили HUP; exit 1' HUP
# разрыв соединения или kill -1 

# для для игнорирования сигнала
trap '' INT	# ^C фтопку

# можно определить обработчик и отдельно
trapINT()
{
	echo "убери руки!"
}

trap trapINT INT

Прогрессбар в bash-скриптах

# usage: progress <максимум> <текущее_положение>

PB_NOPERC=1
# если определена, не выводятся проценты

PB_NOITEM=1
# если определена, не выводится текущее_положение/максимум

progress()
{
	local width=50
	local max=$1 curr=$2 pos=$width perc=100
	if [ $curr -lt $max ]; then
		pos=$((curr*width/max))
		perc=$((curr*100/max))
	fi
	local str="\r[$(printf "%${pos}s" \
		| sed 's/ /#/g')$(printf "%$((width-$pos))s" \
		| sed 's/ /-/g')]"
	[ -z "$PB_NOPERC" ] && str="$str $perc%"
	[ -z "$PB_NOITEM" ] && str="$str ($curr/$max)"
	echo -ne $str
	[ $perc -eq 100 ] && echo
}

Чтение конфигов в скрипте

IFS=$'\n'
for str in `cat ini | sed 's/^ *//' | egrep -v '^$|^#'`; do
	eval $(echo $str|sed 's/ *=/=/;s/= */=/')
done
echo $var

ini содержит:
# коммент
var = value

Работа со строками

Длина строки

${#string}

Извлечение подстроки

${string:position}
# с position до конца

${string:position:length}
# с position длиной length символов

${string: -length}
# последние length символов

Удаление части строки

${string#substring}
# до первого с начала

${string##substring}
# до последнего с начала

${string%substring}
# до первого с конца

${string%%substring}
# до последнего с конца
Замена подстроки

${string/substring/replacement}
# первое вхождение

${string//substring/replacement}
# все вхождения

${var/#Pattern/Replacement}
# Если в переменной var найдено совпадение с Pattern,
# причем совпадающая подстрока 
# расположена в начале строки (префикс),
# то оно заменяется на Replacement. 
# Поиск ведется с начала строки

${var/%Pattern/Replacement}
# Если в переменной var найдено совпадение с Pattern,
# причем совпадающая подстрока
# расположена в конце строки (суффикс),
# то оно заменяется на Replacement.
# Поиск ведется с конца строки

Подстановка параметров

Символ : имеет значение только когда parameter инициализирован "пустым" значением.

${!ref}	# косвенная ссылка на переменную
var='str'
ref='var'
echo ${!ref}	# str

${parameter-default}, ${parameter:-default}
# Если параметр отсутствует
# то используется значение по-умолчанию.

${parameter=default}, ${parameter:=default}
# Если значения параметров не задананы явно,
# то они принимают значения по-умолчанию.

${parameter+alt_value}, ${parameter:+alt_value}
# Если параметр имеет какое либо значение, # 
то используется alt_value, 
# иначе -- null ("пустая" строка).

${parameter?err_msg}, ${parameter:?err_msg}
# Если parameter инициализирован, 
# то используется его значение, 
# в противном случае -- выводится err_msg.

${!varprefix*}, ${!varprefix@}
# Поиск по шаблону всех, 
# ранее объявленных переменных, 
# имена которых начинаются с varprefix.

getopts

while getopts ":ab:c" Option
# Начальное объявление цикла анализа опций.
# a, b, c -- это возможные опции (ключи).
# Символ : после опции 'b' указывает на то, 
# что с данной опцией может идти
# дополнительный аргумент.
do
  case $Option in
    a ) 
	# Действия, предусмотренные опцией 'a'.
    b ) # Действия, предусмотренные опцией 'b', 
	# а так же необходимо обработать $OPTARG,
        # в которой находится 
	# дополнительный аргумент этой опции.
    ...
    c ) # Действия, предусмотренные опцией 'c'.
  esac
done
shift $(($OPTIND - 1))

Переменные

$# - количество переданных параметров
обращение к последнему параметру:

args=$#
last=${!args}
! - косвенное обращение к переменным
var1="string"
var2="var1"
echo ${!var2}	# string
$- Список флагов, переданных сценарию (командой set).
$_ Специальная переменная, содержит последний аргумент предыдущей команды.
$! PID последнего, запущенного в фоне, процесса
$$ PID самого процесса-сценария.
$? код завершения.
$FUNCNAME имя текущей функции
$LINENO Номер строки исполняемого сценария.
$OLDPWD прежний рабочий каталог ("OLD-Print-Working-Directory")
$PIPESTATUS Код возврата канала (конвейера).
Переменная $PIPESTATUS может давать неверные значения при вызове из командной строки.
bash$ who | grep nobody | sort
bash$ echo ${PIPESTATUS[*]}
$PPID Переменная $PPID хранит PID (идентификатор) родительского процесса.
$PWD рабочий (текущий) каталог

Цвета ECHO

BOLD='\e[1m'
UNDERLINE='\e[4m'
BLINK='\e[5m'
INVERSE='\e[7m'
BREAK='\e[m'

#Foreground colors:
BLACK='\e[0;30m'
RED='\e[0;31m'
GREEN='\e[0;32m'
BROWN='\e[0;33m'
BLUE='\e[0;34m'
MAGENTA='\e[0;35m'
CYAN='\e[0;36m'
GRAY='\e[0;37m'
DEF='\e[0;39m'
DGRAY='\e[1;30m'
LRED='\e[1;31m'
LGREEN='\e[1;32m'
YELLOW='\e[1;33m'
LBLUE='\e[1;34m'
LMAGENTA='\e[1;35m'
LCYAN='\e[1;36m'
WHITE='\e[1;37m'

# backgrounds colors
BLACK='\e[40m'
RED='\e[41m'
GREEN='\e[42m'
BROWN='\e[43m'
BLUE='\e[44m'
MAGENTA='\e[45m'
CYAN='\e[46m'
GRAY='\e[47m'
DEF='\e[49m'

Спецсимволы

- предыдущий рабочий каталог. Соответствует содержимому внутренней переменной $OLDPWD.
~+ текущий рабочий каталог. Соответствует содержимому внутренней переменной $PWD.
: символ заполнитель в операция с двумя операндами создать пустой файл

: > file
ввод одинарной кавычки в строку в одинарных кавычках:
echo 'str'\''ing'   # str'ing

Специальное назначение некоторых экранированных символов используемых совместно с echo и sed
\n перевод строки (новая строка)
\r перевод каретки
\t табуляция
\v вертикальная табуляция
\b забой (backspace)
\a "звонок" (сигнал)
\0xx ASCII-символ с кодом 0xx в восьмеричном виде)

Некоторые команды

shopt -s expand_aliases
Дает возможность использовать алиасы в скриптах

expand, unexpand
Команда expand преобразует символы табуляции в пробелы. Часто используется в конвейерной обработке текста.
Команда unexpand преобразует пробелы в символы табуляции. Т.е. она является обратной по отношению к команде expand.

fold
Выравнивает текст по ширине, разрывая, если это необходимо, слова. Особый интерес представляет ключ -s, который производит перенос строк по пробелам, стараясь не разрывать слова.

column
Форматирование по столбцам. Эта утилита преобразует текст, например какой либо список, в табличное, более "удобочитаемое", представление, вставляя символы табуляции по мере необходимости.

colrm
Утилита удаления колонок. Удаляет колонки (столбцы) сиволов из файла и выводит результат на stdout. Например,

colrm 2 4 &gt;filename

удалит символы со 2-го по 4-й включительно, в каждой строке в файле filename.

readlink
Возвращает имя файла, на который указывает символическая ссылка.

od
Команда od (octal dump) производит преобразование ввода (или файла) в один или несколько форматов, в соответствии с указанными опциями.

join
Слияние двух файлов по ключам.




Комментарии

Страницы комментариев: 1 :: 2 :: следующая

аноним-с, Tue Nov 10 00:58:37 2009:
Спасибо, пригодилось!!!
yura, Fri Aug 7 16:11:17 2009:
Спасибо, то что надо!
аноним, Tue Aug 4 20:12:25 2009:
у нас принято говорить по-русски!
mkdir /mnt/ass -v
inSane, Tue Aug 4 19:50:48 2009:
Тnxaloт
аноним, Thu Mar 12 09:20:01 2009:
полезно
спасибо
Uri, Thu Feb 26 17:58:53 2009:
Великопно!
Дмитрий, Fri Nov 28 20:35:26 2008:
В закладки!
Krutoy, Fri Oct 17 10:30:54 2008:
Ваще, то что надо!
Михаил, Mon Aug 18 02:02:56 2008:
Спасибо, помогло в трудный момент!
gabbermax, Fri May 23 00:19:38 2008:
информация просто уникальна

Страницы комментариев: 1 :: 2 :: следующая

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds