Поиск по сайту:

Как писать и использовать пользовательские функции и библиотеки оболочки


В 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, а также делитесь своими мыслями об этом руководстве через форму обратной связи ниже.