Как писать и использовать пользовательские функции и библиотеки оболочки
В Linux сценарии оболочки помогают нам во многих отношениях, включая выполнение или даже автоматизацию определенных задач системного администрирования, создание простых инструментов командной строки и многое другое.
В этом руководстве мы покажем новым пользователям Linux, где можно надежно хранить пользовательские сценарии оболочки, объясним, как писать собственные функции и библиотеки оболочки, использовать функции из библиотек в других сценариях.
Где хранить сценарии оболочки
Чтобы запускать сценарии без ввода полного/абсолютного пути, они должны храниться в одном из каталогов в переменной среды ` PATH.
Чтобы проверить ваш ` PATH, введите следующую команду:
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Обычно, если каталог bin существует в домашнем каталоге пользователя, он автоматически включается в его/ее ` PATH. Здесь вы можете хранить свои сценарии оболочки.
Поэтому создайте каталог bin (в котором также могут храниться скрипты Perl, Awk или Python или любые другие программы):
mkdir ~/bin
Затем создайте каталог с именем lib (сокращение от «библиотеки»), в котором вы будете хранить свои собственные библиотеки. Вы также можете хранить в нем библиотеки для других языков, таких как C, Python и т. д. В нем создайте еще один каталог с именем sh; это, в частности, сохранит ваши библиотеки оболочки:
mkdir -p ~/lib/sh
Создайте свои собственные функции и библиотеки оболочки
Функция оболочки – это группа команд, выполняющих специальную задачу в сценарии. Они работают аналогично процедурам, подпрограммам и функциям в других языках программирования.
Синтаксис написания функции следующий:
function_name() { list of commands }
Например, вы можете написать в скрипте функцию для отображения даты следующим образом:
showDATE() {date;}
Каждый раз, когда вы хотите отобразить дату, просто вызывайте приведенную выше функцию, используя ее имя:
showDATE
Библиотека оболочки – это просто сценарий оболочки, однако вы можете написать библиотеку только для хранения функций, которые впоследствии можно будет вызывать из других сценариев оболочки.
Ниже приведен пример библиотеки под названием libMYFUNCS.sh в моем каталоге ~/lib/sh с дополнительными примерами функций:
#!/bin/bash
#Function to clearly list directories in PATH
showPATH() {
oldifs="$IFS" #store old internal field separator
IFS=: #specify a new internal field separator
for DIR in $PATH ; do echo $DIR ; done
IFS="$oldifs" #restore old internal field separator
}
#Function to show logged user
showUSERS() {
echo -e “Below are the user logged on the system:\n”
w
}
#Print a user’s details
printUSERDETS() {
oldifs="$IFS" #store old internal field separator
IFS=: #specify a new internal field separator
read -p "Enter user name to be searched:" uname #read username
echo ""
#read and store from a here string values into variables using : as a field delimiter
read -r username pass uid gid comments homedir shell <<< "$(cat /etc/passwd | grep "^$uname")"
#print out captured values
echo -e "Username is : $username\n"
echo -e "User's ID : $uid\n"
echo -e "User's GID : $gid\n"
echo -e "User's Comments : $comments\n"
echo -e "User's Home Dir : $homedir\n"
echo -e "User's Shell : $shell\n"
IFS="$oldifs" #store old internal field separator
}
Сохраните файл и сделайте скрипт исполняемым.
Как вызвать функции из библиотеки
Чтобы использовать функцию в lib, вам необходимо сначала включить lib в сценарий оболочки, где будет использоваться функция, в форме ниже:
./path/to/lib
OR
source /path/to/lib
Поэтому вам следует использовать функцию printUSERDETS из библиотеки ~/lib/sh/libMYFUNCS.sh в другом скрипте, как показано ниже.
Вам не нужно писать в этом скрипте еще один код, чтобы распечатать данные конкретного пользователя, просто вызовите существующую функцию.
Откройте новый файл с именем test.sh:
#!/bin/bash
#include lib
. ~/lib/sh/libMYFUNCS.sh
#use function from lib
printUSERDETS
#exit script
exit 0
Сохраните его, затем сделайте скрипт исполняемым и запустите его:
chmod 755 test.sh
./test.sh
В этой статье мы показали вам, где надежно хранить сценарии оболочки, как писать собственные функции и библиотеки оболочки, вызывать функции из библиотек в обычных сценариях оболочки.
Далее мы объясним простой способ настройки Vim в качестве IDE для сценариев Bash. А до тех пор всегда оставайтесь на связи с TecMint, а также делитесь своими мыслями об этом руководстве через форму обратной связи ниже.