Искусство программирования на языке сценариев командной оболочки - [5]
В выражениях с подстановкой параметра, символ ? проверяет -- установлена ли переменная.
?
сивол-шаблон. Символ ? обозначает одиночный символ при подстановке в имена файлов. В регулярных выражениях служит для обозначения одиночного символа.
$
Подстановка переменной.
var1=5
var2=23skidoo
echo $var1 # 5
echo $var2 # 23skidoo
Символ $, предшествующий имени переменной, указывает на то, что будет получено значение переменной.
$
end-of-line (конец строки). В регулярных выражениях, символ "$" обозначает конец строки.
${}
Подстановка параметра.
$*, $@
параметры командной строки.
$?
код завершения. Переменная $? хранит код завершения последней выполненной команды, функции или сценария.
$$
id процесса. Переменная $$ хранит id процесса сценария.
()
группа команд.
(a=hello; echo $a)
Команды, заключенные в круглые скобки исполняются в дочернем процессе -- subshell-е.
Переменные, создаваемые в дочернем процессе не видны в "родительском" сценарии. Родительский процесс-сценарий, не может обращаться к переменным, создаваемым в дочернем процессе.
a=123
( a=321; )
echo "a = $a" # a = 123
# переменная "a" в скобках подобна локальной переменной.
инициализация массивов.
Array=(element1 element2 element3)
{xxx,yyy,zzz,...}
Фигурные скобки.
grep Linux file*.{txt,htm*}
# Поиск всех вхождений слова "Linux"
# в файлах "fileA.txt", "file2.txt", "fileR.html", "file-87.htm", и пр.
Команда интерпретируется как список команд, разделенных точкой с запятой, с вариациями, представленными в фигурных скобках.[ 11 ] При интерпретации имен файлов (подстановка) используются параметры, заключенные в фигурные скобки.
Использование неэкранированных или неокавыченных пробелов внутри фигурных скобок недопустимо.echo {file1,file2}\ :{\ A," B",' C'}
file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C
{}
Блок кода. [фигурные скобки] Известен так же как "вложенный блок", эта конструкция, фактически, создает анонимную функцию. Однако, в отличии от обычных функций, переменные, создаваемые во вложенных блоках кода, доступны объемлющему сценарию.
bash$ { local a; a=123; }
bash: local: can only be used in a function
a=123
{ a=321; }
echo "a = $a" # a = 321 (значение, присвоенное во вложенном блоке кода)
# Спасибо, S.C.
Код, заключенный в фигурные скобки, может выполнять перенаправление ввода-вывода.
Пример 3-1. Вложенные блоки и перенаправление ввода-вывода
#!/bin/bash
# Чтение строк из файла /etc/fstab.
File=/etc/fstab
{
read line1
read line2
} < $File
echo "Первая строка в $File :"
echo "$line1"
echo
echo "Вторая строка в $File :"
echo "$line2"
exit 0
Пример 3-2. Сохранение результата исполнения вложенного блока в файл
#!/bin/bash
# rpm-check.sh
# Запрашивает описание rpm-архива, список файлов, и проверяется возможность установки.
# Результат сохраняется в файле.
#
# Этот сценарий иллюстрирует порядок работы со вложенными блоками кода.
SUCCESS=0
E_NOARGS=65
if [ -z "$1" ]
then
echo "Порядок использования: `basename $0` rpm-file"
exit $E_NOARGS
fi
{
echo
echo "Описание архива:"
rpm -qpi $1 # Запрос описания.
echo
echo "Список файлов:"
rpm -qpl $1 # Запрос списка.
echo
rpm -i --test $1 # Проверка возможности установки.
if [ "$?" -eq $SUCCESS ]
then
echo "$1 может быть установлен."
else
echo "$1 -- установка невозможна!"
fi
echo
} > "$1.test" # Перенаправление вывода в файл.
echo "Результаты проверки rpm-архива находятся в файле $1.test"
# За дополнительной информацией по ключам команды rpm см. man rpm.
exit 0
В отличие от групп команд в (круглых скобках), описаных выше, вложенные блоки кода, заключенные в {фигурные скобки} исполняются в пределах того же процесса, что и сам скрипт (т.е. не вызывают запуск дочернего процесса -- subshell).[ 12 ]{} \;
pathname -- полное имя файла (т.е. путь к файлу и его имя). Чаще всего используется совместно с командой find.
Обратите внимание на то, что символ ";", которым завершается ключ -exec команды find, экранируется обратным слэшем. Это необходимо, чтобы предотвратить его интерпретацию.[ ]
test.
Проверка истинности выражения, заключенного в квадратные скобки [ ]. Примечательно, что [ является частью встроенной команды test (и ее синонимом), И не имеет никакого отношения к "внешней" утилите /usr/bin/test.
[[ ]]
test.
Проверка истинности выражения, заключенного между [[ ]] (зарезервированное слово интерпретатора).
См. описание конструкции [[ ... ]] ниже.
[ ]
элемент массива.
При работе с массивами в квадратных скобках указывается порядковый номер того элемента массива, к которому производится обращение.
Array[1]=slot_1
echo ${Array[1]}
[ ]
диапазон символов.
В регулярных выражениях, в квадратных скобках задается диапазон искомых символов.
(( ))
двойные круглые скобки.
Вычисляется целочисленное выражение, заключенное между двойными круглыми скобками (( )).
См. обсуждение, посвященное конструкции (( ... )) .
> &> >& >> <
перенаправление.
Конструкция scriptname >filename перенаправляет вывод scriptname в файл filename. Если файл filename уже существовал, то его прежнее содержимое будет утеряно.
Конструкция command &>filename перенаправляет вывод команды command, как со
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.