Книга: Искусство программирования на языке сценариев командной оболочки
Пример 12-6. Пример работы с expr
Пример 12-6. Пример работы с expr
#!/bin/bash
# Демонстрация некоторых приемов работы с командой 'expr'
# =======================================
echo
# Арифметические операции
# -------------- --------
echo "Арифметические операции"
echo
a=`expr 5 + 3`
echo "5 + 3 = $a"
a=`expr $a + 1`
echo
echo "a + 1 = $a"
echo "(инкремент переменной)"
a=`expr 5 % 3`
# остаток от деления (деление по модулю)
echo
echo "5 mod 3 = $a"
echo
echo
# Логические операции
# ---------- --------
# Возвращает 1 если выражение истинноо, 0 -- если ложно,
#+ в противоположность соглашениям, принятым в Bash.
echo "Логические операции"
echo
x=24
y=25
b=`expr $x = $y` # Сравнение.
echo "b = $b" # 0 ( $x -ne $y )
echo
a=3
b=`expr $a > 10`
echo 'b=`expr $a > 10`, поэтому...'
echo "Если a > 10, то b = 0 (ложь)"
echo "b = $b" # 0 ( 3 ! -gt 10 )
echo
b=`expr $a < 10`
echo "Если a < 10, то b = 1 (истина)"
echo "b = $b" # 1 ( 3 -lt 10 )
echo
# Обратите внимание на необходимость экранирования операторов.
b=`expr $a <= 3`
echo "Если a <= 3, то b = 1 (истина)"
echo "b = $b" # 1 ( 3 -le 3 )
# Существует еще оператор ">=" (больше или равно).
echo
echo
# Операции сравнения
# -------- ---------
echo "Операции сравнения"
echo
a=zipper
echo "a is $a"
if [ `expr $a = snap` ]
then
echo "a -- это не zipper"
fi
echo
echo
# Операции со строками
# -------- -- --------
echo "Операции со строками"
echo
a=1234zipper43231
echo "Строка над которой производятся операции: "$a"."
# length: длина строки
b=`expr length $a`
echo "длина строки "$a" равна $b."
# index: позиция первого символа подстроки в строке
b=`expr index $a 23`
echo "Позиция первого символа "2" в строке "$a" : "$b"."
# substr: извлечение подстроки, начиная с заданной позиции, указанной длины
b=`expr substr $a 2 6`
echo "Подстрока в строке "$a", начиная с позиции 2,
и длиной в 6 символов: "$b"."
# При выполнении поиска по шаблону, по-умолчанию поиск
#+ начинается с ***начала*** строки.
#
# Использование регулярных выражений
b=`expr match "$a" '[0-9]*'` # Подсчет количества цифр.
echo Количество цифр с начала строки "$a" : $b.
b=`expr match "$a" '([0-9]*)'` # Обратите внимание на экранирование круглых скобок
# == ==
echo "Цифры, стоящие в начале строки "$a" : "$b"."
echo
exit 0
#!/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-2. Badname, удаление файлов в текущем каталоге, имена которых содержат недопустимые символы и пробелы.
- Пример 12-3. Удаление файла по его номеру inode
- Пример 12-4. Использование команды xargs для мониторинга системного журнала
- Пример 12-5. copydir, копирование файлов из текущего каталога в другое место, с помощью xargs
- Пример 12-6. Пример работы с expr
- Создание калькулятора
- Функции для работы с подтипами данных
- Пароли Outlook Express
- Скрытие возможности редактирования списка учетных записей Outlook Express
- Рис. 243. Nero Express.
- Поиск данных в программе Outlook Express
- 17.4. Использование Outlook Express
- Культивирование отношений с клиентом
- 1.3.9. Слоты расширения: PCI и PCI Express
- Пример установочного скрипта
- Пример из практики
- Типы данных для работы с датой и временем