Искусство программирования на языке сценариев командной оболочки
Шрифт:
Использование команды cut для получения списка смонтированных файловых систем:
cat /etc/mtab | cut -d ' ' -f1,2
Использование команды cut для получения версии ОС и ядра:
uname -a | cut -d" " -f1,3,11,12
Использование команды cut для извлечения заголовков сообщений из электронных писем:
bash$ grep '^Subject:' read-messages | cut -c10-80
Re: Linux suitable for mission-critical apps?
MAKE MILLIONS WORKING AT HOME3
Spam complaint
Re: Spam complaint
Использование
# Список пользователей в /etc/passwd.
FILENAME=/etc/passwd
for user in $(cut -d: -f1 $FILENAME)
do
echo $user
done
# Спсибо Oleg Philon за этот пример.
cut -d ' ' -f2,3 filename эквивалентно awk -F'[ ]' '{ print $2, $3 }' filename
См. также Пример 12-33.
paste
Используется для объединения нескольких файлов в один многоколоночный файл.
join
Может рассматриваться как команда, родственная команде paste. Эта мощная утилита позволяет объединять два файла по общему полю, что представляет собой упрощенную версию реляционной базы данных.
Команда join оперирует только двумя файлами и объедияет только те строки, которые имеют общее поле (обычно числовое), результат объединения выводится на stdout. Объединяемые файлы должны быть отсортированы по ключевому полю.
File: 1.data
100 Shoes
200 Laces
300 Socks
File: 2.data
100 $40.00
200 $1.00
300 $2.00
bash$ join 1.data 2.data
File: 1.data 2.data
100 Shoes $40.00
200 Laces $1.00
300 Socks $2.00
head
Выводит начальные строки из файла на stdout (по-умолчанию -- 10
Пример 12-9. Какие из файлов являются сценариями?
#!/bin/bash
# script-detector.sh: Отыскивает файлы сценариев в каталоге.
TESTCHARS=2 # Проверяются первые два символа.
SHABANG='#!' # Сценарии как правило начинаются с "sha-bang."
for file in * # Обход всех файлов в каталоге.
do
if [[ `head -c$TESTCHARS "$file"` = "$SHABANG" ]]
# head -c2 #!
# Ключ '-c' в команде "head" выводит заданное
#+ количество символов, а не строк.
then
echo "Файл \"$file\" -- сценарий."
else
echo "Файл \"$file\" не является сценарием."
fi
done
exit 0
Пример 12-10. Генератор 10-значных случайных чисел
#!/bin/bash
# rnd.sh: Генератор 10-значных случайных чисел
# Автор: Stephane Chazelas.
head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p'
# =================================================================== #
# Описание
# --------
# head:
# -c4 -- первые 4 байта.
# od:
# -N4 ограничивает вывод 4-мя байтами.
# -tu4 беззнаковый десятичный формат вывода.
# sed:
# -n, в комбинации с флагом "p", в команде "s",
# выводит только совпадающие с шаблоном строки.
# Автор сценария описывает действия 'sed' таким образом:
# head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p'