#!/bin/bash
echo
echo "Операции над строками с использованием конструкции \"expr \$string : \" "
echo "========================================================================"
echo
a=1234zipper5FLIPPER43231
echo "Строка, над которой выполняются операции: \"`expr "$a" : '\(.*\)'`\"."
# Экранирование круглых скобок в шаблоне == ==
# Если скобки не экранировать...
#+ то 'expr' преобразует строковый операнд в целое число.
echo "Длина строки \"$a\" равна `expr "$a" : '.*'`." # Длина строки
echo "Количество цифр с начала строки \"$a\" равно `expr "$a" : '[0-9]*'`."
# ------------------------------------------------------------------------- #
echo
echo "Цифры, стоящие в начале строки \"$a\" : `expr "$a" : '\([0-9]*\)'`."
# == ==
echo "Первые 7 символов в строке \"$a\" : `expr "$a" : '\(.......\)'`."
# ====== == ==
# Опять же, необходимо экранировать круглые скобки в шаблоне.
#
echo "Последние 7 символов в строке \"$a\" : `expr "$a" : '.*\(.......\)'`."
# ========= оператор конца строки ^^
# (фактически означает переход через любое количество символов, пока
#+ не будет найдена требуемая подстрока)
echo
exit 0
Этот пример демонстрирует необходимость экранирования оператора группировки -- \( ... \) в регулярных выражениях, при поиске по шаблону командой expr.
Perl, sed и awk имеют в своем распоряжении более мощный аппарат анализа строк. Коротенький скрипт на sedили awk, внутри сценария (см. Section 33.2) -- значительно более привлекательная альтернатива использованию exprпри анализе строк.
Дополнительные примеры, по обработке строк, вы найдете в Section 9.2.
12.3. Команды для работы с датой и временем
Время/дата и измерение интервалов времени
date
Команда dateбез параметров выводит дату и время на стандартное устройство вывода stdout . Она становится гораздо интереснее при использовании дополнительных ключей форматирования вывода.
Пример 12-7. Команда date
#!/bin/bash
# Примеры использования команды 'date'
echo "Количество дней, прошедших с начала года: `date +%j`."
# Символ '+' обязателен при использовании форматирующего аргумента
# %j, возвращающего количество дней, прошедших с начала года.
echo "Количество секунд, прошедших с 01/01/1970 : `date +%s`."
# %s количество секунд, прошедших с начала "эпохи UNIX",
#+ но насколько этот ключ полезен?
prefix=temp
suffix=`eval date +%s` # Ключ "+%s" характерен для GNU-версии 'date'.
filename=$prefix.$suffix
echo $filename
# Прекрасный способ получения "уникального" имени для временного файла,
#+ даже лучше, чем с использованием $$.
# Дополнительную информацию вы найдете в 'man date'.
exit 0
Ключ -u дает UTC время (Universal Coordinated Time -- время по Гринвичу).
bash$ date
Fri Mar 29 21:07:39 MST 2002
bash$ date -u
Sat Mar 30 04:07:42 UTC 2002
zdump
Отображает время для указанной временной зоны.
bash$ zdump EST
EST Tue Sep 18 22:09:22 2001 EST
time
Выводит подробную статистику по исполнению некоторой команды.
time ls -l /даст нечто подобное:
0.00user 0.01system 0:00.05elapsed 16%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (149major+27minor)pagefaults 0swaps
См. так же очень похожую команду times, обсуждавшуюся в предыдущем разделе.
Начиная с версии 2.0 Bash, команда timeстала зарезервированным словом интерпретатора, с несколько измененным поведением в конвейере.
touch
Утилита устанавливает время последнего обращения/изменения файла в текущее системное время или в заданное время, но так же может использоваться для создания нового пустого файла. Команда touch zzzсоздаст новый пустой файл с именем zzz , если перед этим файл zzz отсутствовал. Кроме того, такие пустые файлы могут использоваться для индикации, например, времени последнего изменения в проекте.
Эквивалентом команды touchмогут служить : >> newfileили >> newfile(для обычных файлов).
at
Команда at-- используется для запуска заданий в заданное время. В общих чертах она напоминает crond, однако, atиспользуется для однократного запуска набора команд.
at 2pm January 15-- попросит ввести набор команд, которые необходимо запустить в указанное время. Эти команды должны быть совместимыми со сценариями командной оболочки. Ввод завершается нажатием комбинации клавиш Ctl-D.
Читать дальше