- •Bash конспект
- •Замечания об этом документе
- •Запуск bash и выход из него. Конфигурационные файлы
- •Символы ";" и "&" -- выполнение нескольких команд
- •Символы "&&" и "||" -- условное выполнение команд
- •Символы ( )
- •Проверка значения арифметического выражения с помощью (( ))
- •Символ !
- •5. Арифметическая подстановка
- •6. Подстановка процесса (bash specific)
- •7. Разбиение на слова
- •8. Path-экспансия
- •9. Удаление кавычек
- •Кавычки и экранирование специальных символов Метасимволы и их экранирование
- •4. Командная подстановка
- •Двойные и одинарные кавычки. Другие виды кавычек
- •Перенаправление
- •Открытие новых дескрипторов
- •Восстановление перенаправленных дескрипторов
- •Закрытие дескриптора
- •Другие внешние команды
- •Информация о пользователях:
- •Информация о системе:
- •Символ !
- •1.2 Что значит "{некоторое странное название команды}"
- •2.5 Как считать со стандартного ввода один символ
- •2.6 Как переименовать все файлы *.Html в *.Htm
- •2.12 Как обратиться к параметру номер I , если I не константа, а переменная?
- •Последняя версия bash
- •Чем bash отличается от sh
1.2 Что значит "{некоторое странное название команды}"
cat = "catenate"
awk = "Aho, Weinberger and Kernighan"
grep = "Global Regular Expression Print" (аналог команды ed "g/re/p")
fgrep = "Fixed GREP"; fgrep searches for fixed strings only.
Perl = "Pathologically Eclectic Rubbish Lister"
Unics (Unix) = "UNiplexed Information and Computing System"
gecos = "General Electric Comprehensive Operating Supervisor"
biff = "BIFF"
“... This command, which turns on asynchronous mail notification, was actually named after a dog at Berkeley.”
rc (напр. ".bashrc" или "/etc/rc") = "RunCom"
2.5 Как считать со стандартного ввода один символ
Используя команды dd и stty:
stty -icanon
echo -n "Enter a character: "
readchar=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
echo "Thank you for typing a $readchar ."
stty icanon
Про dd см. в документации к SHELL-UTILS
2.6 Как переименовать все файлы *.Html в *.Htm
мой ответ:
find -name '*.html' | while read a; do mv $a ${a%.html}.htm; done
2.12 Как обратиться к параметру номер I , если I не константа, а переменная?
Можно подумать, что это легко и можно написать ${$i}, но это не сработает, и вам напишут bad substitution.
Примечание. Начиная с bash 2.0 можно использовать конструкцию ${!i}.
Зато можно вот так:
eval "param=\${$i}"
echo "Parameter number $i is $param"
А вот программа, которая выводит все свои параметры в обратном порядке.
i=$#
while let i
do
eval "echo \${$i}"
i=$[i-1]
done
BASH FAQ
Источник: bash.faq из comp.unix.shell
Последняя версия bash
Самая последняя версия bash -- 2.01. Она почти не отличается от 2.0, зато довольно сильно отличается от версии 1.14.7, предшествующей 2.0.
Новые возможности по сравнению с 1.14.7:
зарезервированное слово time для вычисления времени выполнения программы
одномерные массивы
новые виды экспансии: ${param:length:offset}, ${param/pat/replace-to}
новые команды disown и shopt
новые виды кавычек для locale-specific translations, обозначения $'...' и $"...".
ссылки на переменные: {$! param_name } будет вычислена переменная с именем, хранящимся в $ param_name (в старом для этого нужен eval)
Чем bash отличается от sh
В SH отсутствуют следующие возможности BASH:
новые возможности BASH 2.0 (см. выше)
long named options (для вызова bash)
отрицание !
слово function (по слухам, в некоторых реализациях sh это слово есть)
команда select
обращение к параметрам больше девятого ${10}
длина параметра ${#param}, "редактирование" ${var#str}, ${var%str}
нет переменных: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY , TIMEFORMAT, PPID, PWD , OLDPWD, SHLVL, RANDOM , SECONDS, LINENO, HISTCMD, HOSTTYPE , OSTYPE , MACHTYPE, HOSTNAME , ENV , PS3 , PS4 , DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE, HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC, SHELLOPTS, OPTERR , HOSTFILE, TMOUT, histchars, auto_resume
перенаправление <>, &>, >|
echo -e (в некоторых реализациях имеется), hash -p (то же), type -apt,
test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
разные конфигурационные файлы для интерактивного или неинтерактивного сеанса: ~/. bashrc и $ENV соотв .
функции и переменные с одинаковыми именами
{ }- экспансия: {префиксы}корень{суффиксы}
обозначение ~ (имеется в некоторых реализациях)
let (в некоторых реализациях есть команда с таким же именем, но отличающимся поведением)
$((expr)) -- только $[] или вообще нет ?
вместо $(...) только `...`
подстановки процессов >(cmd) <(cmd)
alias и unalias (имеются в некоторых реализациях)
local (в некоторых реализациях есть команда с таким же именем, но отличающимся поведением)
история команд (в некоторых реализациях)
команды command, builtin, declare, typeset, dirs, enable, help, logout, popd, pushd
экспортируемые функции
filename generation when using output redirection (command >a*)
