Благодаря стандартизации набора команд UNIX-систем, сценарии, на языке командной оболочки, могут быть легко перенесены из системы в систему практически без изменений. Мощь сценариев складывется из наборв системных команд и директив командной оболочки с простыми программными конструкциями.
Первая команда, с которой сталкиваются новички
ls
Команда вывода "списка" файлов. Многие недооценивают всю мощь этой скромной команды. Например, с ключом -R , рекурсивный обход дерева каталогов, командв lsвыводит содержимое каталогов в виде древовидной структуры. Вот еще ряд любопытных ключей (опций) команды ls: -S -- сортировка по размеру файлов, -t -- сортировка по времени последней модификации файла и -i -- выводит список файлов с их inode (см. Пример 12-3).
Пример 12-1. Создание оглавления диска для записи CDR, с помощью команды ls
#!/bin/bash
# burn-cd.sh
# Сценарий, автоматизирующий процесс прожигания CDR.
SPEED=2 # Если ваше "железо" поддерживает более высокую скорость записи -- можете увеличить этот параметр
IMAGEFILE=cdimage.iso
CONTENTSFILE=contents
DEFAULTDIR=/opt # В этом каталоге находятся файлы, которые будут записаны на CD.
# Каталог должен существовать.
# Используется пакет "cdrecord" от Joerg Schilling.
# (http://www.fokus.gmd.de/nthp/employees/schilling/cdrecord.html)
# Если этот сценарий предполагается запускать с правами обычного пользователя,
#+ то необходимо установить флаг suid на cdrecord
#+ (chmod u+s /usr/bin/cdrecord, эта команда должна быть выполнена root-ом).
if [ -z "$1" ]
then
IMAGE_DIRECTORY=$DEFAULTDIR
# Каталог по-умолчанию, если иной каталог не задан из командной строки.
else
IMAGE_DIRECTORY=$1
fi
# Создать файл "table of contents".
ls -lRF $IMAGE_DIRECTORY > $IMAGE_DIRECTORY/$CONTENTSFILE
# Ключ "l" -- "расширенный" формат вывода списка файлов.
# Ключ "R" -- рекурсивный обход дерева каталогов.
# Ключ "F" -- добавляет дополнительные метки к именам файлов (к именам каталогов добавдяет оконечный символ /).
echo "Создано оглавление."
# Создать iso-образ.
mkisofs -r -o $IMAGFILE $IMAGE_DIRECTORY
echo "Создан iso-образ файловой системы ISO9660 ($IMAGEFILE)."
# "Прожигание" CDR.
cdrecord -v -isosize speed=$SPEED dev=0,0 $IMAGEFILE
echo "Запись диска."
echo "Наберитесь терпения, это может потребовать некоторого времени."
exit 0
cat, tac
cat-- это акроним от concatenate , выводит содержимое списка файлов на stdout . Для объединения файлов в один файл может использоваться в комбинации с операциями перенаправления (> или >>).
cat filename cat file.1 file.2 file.3 > file.123
Ключ -n , команды cat, вставляет порядковые номера строк в выходном файле. Ключ -b -- нумерут только не пустые строки. Ключ -v выводит непечатаемые символы в нотации с символом ^. Ключ -s заменяет несколько пустых строк, идущих подряд, одной пустой строкой.
см. также Пример 12-21 and Пример 12-17.
tac-- выводит содержимое файлов в обратном порядке, от последней строки к первой.
rev
выводит все строки файла задом наперед на stdout . Это не то же самое, что tac. Команда revсохраняет порядок следования строк, но переворачивает каждую строку задом наперед.
bash$ cat file1.txt
Это строка 1.
Это строка 2.
bash$ tac file1.txt
Это строка 2.
Это строка 1.
bash$ rev file1.txt
.1 акортс отЭ
.2 акортс отЭ
cp
Команда копирования файлов. cp file1 file2скопирует file1 в file2 , перезаписав file2 если он уже существовал (см. Пример 12-5).
С флагами -a и -r , или -R выполняет копирование дерева каталогов.
mv
Команда перемещения файла. Эквивалентна комбинации команд cpи rm. Может использоваться для перемещения большого количества файлов или для переименования каталогов. Примеры использования команды mvвы найдете в Пример 9-17 и Пример A-3.
При использовании в неинтерактивных сценариях, команде mvследует передавать ключ -f , чтобы подавить запрос подтверждения на перемещение.
Если в качестве каталога назначения указан существующий каталог, то перемещаемый каталог становится подкаталогом каталога назначения..
Читать дальше