number_file ()
#number_file
#вызов: number_file имя_файла {
_FILENAME=$1
# проверка наличия корректных параметров
if [ $# -ne 1 ]; then
echo "number_flie: I need a filename to number"
return 1
fi
loop=1
while read LINE do
echo "$LOOP: $LINE" loop=`expr $LOOP + 1`
done < $_FILENAME
}
Для вызова функции number_file просто укажите имя файла, подлежащего нумерации, в качестве аргумента функции. Вызов функции может также осуществляться из среды интерпретатора shell путем указания имени файла. Например:
$ number_file myfile
Кроме того, функцию можно вызвать из сценария, воспользовавшись с этой целью предыдущим примером. Или вы можете задать оператор:
$.number_file $1
Результат выполнения функции может выглядеть следующим образом:
$ number_file /home/dave/file_listing
1: total 105
2: -rw‑r—r—- 1 dave admin 0 Jun 6 20:03:DT
3: -rw‑r--r-- 1 dave admin 306 May 23 16:00 LPSO. AKS
4: -rw‑r--r-- 1 dave admin 306 May 23 16:00 LPSO. AKS. UC
5: -rw‑r--r-- 1 dave admin 324 May 23 16:00 LPSO. MBB
6: -rw‑r--r-- 1 dave admin 324 May 23 16:00 LPSO. MBB. UC
7: -rw‑r--r-- 1 dave admin 315 May 23 16:00 LPSO. MKQ
Преобразование символов в прописные
Иногда возникает потребность в преобразовании строчных символов в прописные. Например, для создания каталогов в файловой системе используются прописные символы. Кроме того, при вводе данных в поля может выполняться проверка, являются ли все символы прописными.
Ниже приводится соответствующая функция. Эта функция имитирует действие команды tr:
str_to_upper ()
#str_to_upper
# вызов: str_to_upper $1
{
STR=$1
# проверка на наличие корректных параметров
if [ $# -ne 1 ]; then
echo "number_file: I need a string to convert please"
return 1
fi
echo $@ |tr '[a‑z]' '[A‑Z]'
Переменной upper присваивается строка, символы которой преобразованы в прописные символы. Обратите внимание, что снова применяется специальный символ $@ для передачи всех аргументов. Функция str_to_upper может вызываться двумя способами. Можно указать строку в сценарии следующим образом:
UPPER=`str_to_upper "documents.live"`
echo $UPPER
либо указать аргумент функции вместо строки:
UPPER=`str_to_upper $1`
echo $UPPER
В обоих примерах используется подстановка для получения результатов, возвращаемых функцией.
is_upper
Функция str_to_upper осуществляет преобразование регистра символов. Но иногда перед выполнением дальнейшей обработки необходимо только знать, содержатся ли в строке прописные символы. Это может потребоваться для записи информации в текстовое поле файла. Функция i supper выполняет именно эту задачу. Применение
оператора if В сценарии позволит определить, будет ли передаваемая строка включать прописные символы.
Программный код функции:
is_upper ()
#is_upper
#вызов: is_upper $1
{
# проверка на наличие корректных параметров
if [ $# -ne 1 ]; then
echo "is_upper: I need a string to test OK"
return 1
fi
# применение awk для проверки на наличие прописных символов
_IS_UPPER=`echo $1 | awk '{if($0~/[^A‑Z]/) print "1"}`
if [ "$_IS_UPPER" != "" ]
then
# нет, не все символы являются прописными
return 1
else
# да, все символы являются прописными
return 0
fi }
При вызове функции is_upper укажите строковый аргумент. На примере показано, как вызывается функция.
echo -n "Enter the filename :"
read FILENAME
if ls_upper $FILENAME; then
echo "Great it's upper case" else
echo "Sorry it's not upper case" fi
Для проверки наличия в строке строчных символов просто замените существующую конструкцию awk а функции is_upper и измените имя функции на is_lower.
_IS_LOWER=`echo $1 |awk '{ if ($0~/[^a‑z] /) print "1"}`
Преобразование символов строки в строчные символы
В предыдущем разделе мы рассмотрели функцию str_to_upper, а теперь речь пойдет о функции str_to_lower. Вот код самой функции:
str_to_lower ()
#str_to_lower
#вызов: str_to_lower $1
{
#проверка на наличие корректных параметров
if [ $# -ne 1 ]; then
echo "str_to_lower: I need a string to convert please"
return 1
fi
echo $@ | tr '[A‑Z]' '[a~z]'
}
Переменная lower хранит возвращенное значение строки, содержащей строчные символы. Обратите внимание на повторное использование специального параметра $@ для передачи всех аргументов. Функция str_to_lower может быть вызвана двумя способами. Во–neрвых, можно указать строку в сценарии:
LOWER=`str_to_lower "documents.live"`
echo $LOWER
Альтернативный вариант — указать аргумент для функции вместо задания строки: