Wyszukiwanie w witrynie

Jak pisać i używać niestandardowych funkcji powłoki i bibliotek


W systemie Linux skrypty powłoki pomagają nam na wiele różnych sposobów, w tym w wykonywaniu lub nawet automatyzowaniu niektórych zadań administracyjnych systemu, tworzeniu prostych narzędzi wiersza poleceń i wielu innych.

W tym przewodniku pokażemy nowym użytkownikom Linuksa, gdzie bezpiecznie przechowywać niestandardowe skrypty powłoki, wyjaśnimy, jak pisać niestandardowe funkcje i biblioteki powłoki oraz wykorzystywać funkcje z bibliotek w innych skryptach.

Gdzie przechowywać skrypty powłoki

Aby uruchomić skrypty bez wpisywania pełnej/absolutnej ścieżki, muszą one być przechowywane w jednym z katalogów w zmiennej środowiskowej #96 PATH.

Aby sprawdzić &96 PATH, wydaje poniższe polecenie:

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Zwykle, jeśli katalog bin istnieje w katalogu domowym użytkownika, jest on automatycznie dołączany do jego ŚCIEŻKI 96. Tutaj możesz przechowywać swoje skrypty powłoki.

Dlatego utwórz katalog bin (w którym mogą być również przechowywane skrypty Perl, Awk, Python lub dowolne inne programy):

mkdir ~/bin

Następnie utwórz katalog o nazwie lib (skrót od bibliotek), w którym będziesz przechowywać własne biblioteki. Możesz także przechowywać w nim biblioteki dla innych języków, takich jak C, Python i tak dalej. Pod nim utwórz kolejny katalog o nazwie sh; będzie to szczególnie przechowywać biblioteki powłoki:

mkdir -p ~/lib/sh 

Twórz własne funkcje powłoki i biblioteki

Funkcja powłoki to grupa poleceń wykonujących specjalne zadanie w skrypcie. Działają podobnie do procedur, podprogramów i funkcji w innych językach programowania.

Składnia pisania funkcji jest następująca:

function_name() { list of commands }

Możesz na przykład napisać w skrypcie funkcję wyświetlającą datę w następujący sposób:

showDATE() {date;}

Za każdym razem, gdy chcesz wyświetlić data, po prostu wywołaj powyższą funkcję, używając jej nazwy:

showDATE

Biblioteka powłoki to po prostu skrypt powłoki, można jednak napisać bibliotekę przechowującą tylko funkcje, które można później wywołać z innych skryptów powłoki.

Poniżej znajduje się przykład biblioteki o nazwie libMYFUNCS.sh w moim katalogu ~/lib/sh z większą liczbą przykładów funkcji:

#!/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
}

Zapisz plik i spraw, aby skrypt był wykonywalny.

Jak wywołać funkcje z biblioteki

Aby skorzystać z funkcji w lib, należy przede wszystkim zawrzeć lib w skrypcie powłoki, w którym funkcja będzie używana, w poniższej formie:

./path/to/lib
OR
source /path/to/lib

Można więc użyć funkcji printUSERDETS z biblioteki ~/lib/sh/libMYFUNCS.sh w innym skrypcie, jak pokazano poniżej.

Nie musisz pisać kolejnego kodu w tym skrypcie, aby wydrukować dane konkretnego użytkownika, wystarczy wywołać istniejącą funkcję.

Otwórz nowy plik o nazwie test.sh:

#!/bin/bash 

#include lib
.  ~/lib/sh/libMYFUNCS.sh

#use function from lib
printUSERDETS

#exit script
exit 0

Zapisz go, a następnie uczyń skrypt wykonywalnym i uruchom go:

chmod 755 test.sh
./test.sh 

W tym artykule pokazaliśmy, gdzie bezpiecznie przechowywać skrypty powłoki, jak pisać własne funkcje i biblioteki powłoki, wywoływać funkcje z bibliotek w normalnych skryptach powłoki.

Następnie wyjaśnimy prosty sposób konfiguracji Vima jako IDE dla skryptów Bash. Do tego czasu pozostań w kontakcie z TecMint i podziel się swoimi przemyśleniami na temat tego przewodnika za pomocą poniższego formularza opinii.