Шрифт:
При работе в составе большой системы может возникнуть необходимость связаться с одним из зарегистрированных пользователей. Что делать в том случае, если вы не помните имя пользователя? Часто системные администраторы наблюдают идентификаторы пользователей, блокирующих какие-либо процессы. Для того чтобы увидеть полное имя пользователя, они должны просмотреть файл passwd с помощью команды grep. И только после этого можно связаться с пользователем, чтобы сделать ему справедливый выговор.
А сейчас мы рассмотрим функцию, которая позволит избежать просмотра файла /etc/passwd с помощью команды grep.
В тестовой системе полное имя пользователя хранится в пятом поле файла passwd; в вашей системе все может быть по–другому, поэтому, возможно, придется изменить номер поля, чтобы обеспечить соответствие с файлом passwd.
Функции передается один либо множество идентификаторов Пользователей, а функция имитирует действие команды grep по отношению к файлу passwd.
Программный код функции:
whois
#whois
#вызов: whois идентификатор_пользователя
{
# проверка на наличие корректных параметров
if [ $# -lt 1 ]; then
echo "whois : need user id's please"
return 1
fi
for loop do
_USER_NAME=`grep $LOOP /etc/passwd | awk -F: '(print $4}'`
if [ "$_USER_NAME"="" ]; then
echo "whois: Sorry cannot find $LOOP"
else
echo "$LOOP is $_USER_NAME" fi
done
}
Функция whois может быть вызвана следующим образом:
$ whois davs peters superman
dave ls David Tansley — admin accts
peter ls Peter Stromer -customer services
whois: Sorry cannot find superman
Использование нумерации в текстовом файле
При использовании редактора vi появляется возможность нумерации строк. Это полезно в целях отладки, но при выводе на печать некоторых файлов с номерами строк потребуется команда nl. Ниже приведена функция, имитирующая действие команды nl (выполняет нумерацию строк файла). Исходный файл при этом не перезаписывается. Вот программный код функции.
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 может вызываться двумя способами. Можно указать строку в сценарии следующим образом: