GNU/Linux >> Znalost Linux >  >> Linux

Výukový program funkcí Bash Shell se 6 praktickými příklady

Funkce prostředí Bash jsou způsob, jak seskupit několik příkazů UNIX / Linux pro pozdější spuštění pomocí jediného názvu skupiny . Funkce Bash shell může být spuštěna stejně jako běžný příkaz Unix. Funkce shellu se spouštějí v aktuálním kontextu shellu, aniž by se vytvářel nový proces k jejich interpretaci.

Jak aliasy bash, tak funkce umožňují definovat zkratky pro delší nebo složitější příkazy. Aliasy však neumožňují ovládací toky, argumenty a další triky, které tyto funkce umožní, jak je vysvětleno v tomto tutoriálu.

Tento článek je součástí probíhající série výukových programů bash. Podívejte se na náš dřívější výukový program o úvodu bash, stavu existence bash a příkladech aliasů bash.

Syntaxe pro vytvoření bash funkce:

function functionname()
{
commands
.
.
}
  • funkce je klíčové slovo, které je volitelné.
  • název funkce je název funkce
  • příkazy – Seznam příkazů, které mají být provedeny ve funkcích.

Funkce přijímá argumenty. Během provádění se z argumentů funkce stanou poziční parametry. Poziční parametr 0 bude mít název skriptu, který zůstane nezměněn.

Funkci bash můžete volat z příkazového řádku, jak je znázorněno níže:

$ functionname arg1 arg2
  • Když shell interpretuje příkaz Linuxu, nejprve se podívá na speciální vestavěné funkce, jako je break, continue, eval, exec atd., a poté hledá funkce shellu.
  • Stav ukončení funkce bash je stav ukončení posledního příkazu provedeného v těle funkce.

Poznámka: Umístěte definice funkcí shellu do spouštěcího souboru shellu (například .bash_profile ). Tímto způsobem je funkce shellu vždy dostupná z příkazového řádku. Informace o tom, kdy bude .bash_profile spuštěn, naleznete v našem dřívějším článku o sekvenci provádění bash.

Příklad 1:Funkce pro zobrazení dlouhého seznamu souborů s danou příponou

Funkce „lsext“ slouží k vyhledání seznamu souborů v aktuálním adresáři, který má danou příponu, jak je uvedeno níže. Tato funkce používá kombinaci příkazu find a příkazu ls k dokončení úlohy.

$ function lsext()
{
find . -type f -iname '*.'${1}'' -exec ls -l {} \; ;
}

$ cd ~

$ lsext txt
-rw-r--r-- 1 root root   24 Dec 15 14:00 InMorning.txt
-rw-r--r-- 1 root root  184 Dec 16 11:45 Changes16.txt
-rw-r--r-- 1 root root  458 Dec 18 11:04 Changes18.txt
-rw-r--r-- 1 root root 1821 Feb  4 15:01 ChangesOfDB.txt

Příklad 2. Funkce Bash pro provedení daného příkazu Linuxu na skupině souborů

V následujícím příkladu funkce „batchexec“ vyhledá soubory s danou příponou a na těchto vybraných souborech provede daný příkaz.

$ function batchexec()
{
find . -type f -iname '*.'${1}'' -exec ${@:2}  {} \; ;
}

$ cd ~

$ batchexec sh ls

$ batchexec sh chmod 755

$ ls -l *.sh
-rwxr-xr-x 1 root root  144 Mar  9 14:39 debug.sh
-rwxr-xr-x 1 root root 5431 Jan 25 11:32 get_opc_vers.sh
-rwxr-xr-x 1 root root   22 Mar 18 08:32 t.sh

Ve výše uvedeném příkladu najde všechny soubory skriptů shellu s příponou .sh a změní svá oprávnění na 755. (Všechna oprávnění pro uživatele, skupinu a ostatní oprávnění ke čtení a spouštění). V definici funkce si můžete všimnout „${@:2}“, které udává druhý a následující poziční parametr (funkce rozšíření shellu).

Příklad 3. Funkce Bash pro generování náhodného hesla

Následující funkce slouží ke generování náhodných silných hesel se speciálním znakem pro danou délku. Pokud není ve výchozím nastavení zadána délka, generuje se s délkou 12 znaků.

$ function rpass() {
        cat /dev/urandom | tr -cd '[:graph:]' | head -c ${1:-12}
}

$ rpass 6
-Ju.T[[

$ rpass
Gz1f!aKN^""k

Ve výše uvedeném příkladu, když se rpass provede s argumentem 6, vygeneruje náhodné heslo se 6 znaky a rpass bez argumentu vygeneruje heslo o délce 12 znaků. ${1:-12} znamená, že pokud není $1 nastaveno nebo bude vráceno null 12, jinak bude nahrazena hodnota $1.

Příklad 4. Funkce Bash pro získání IP adresy daného rozhraní

Následující příklad definuje funkci nazvanou ‚getip‘, která přijímá název rozhraní jako argument a poskytuje IP adresu přiřazenou danému rozhraní ve stroji. (ve výchozím nastavení vrací eth0 ip adresu). Toto používá příkaz ifconfig k získání ip-adresy.

$ function getip()
{
/sbin/ifconfig ${1:-eth0} | awk '/inet addr/ {print $2}' | awk -F: '{print $2}';
}

$ getip
15.110.106.86

$ getip eth0
15.110.106.86

$ getip lo
127.0.0.1

Příklad 5. Funkce Bash pro tisk podrobností o stroji

Tento příklad definuje funkci, která poskytuje všechny požadované informace o stroji. Uživatelé mohou tuto funkci definovat a volat ve spouštěcích souborech, takže tyto informace získáte během spouštění.

$ function mach()
{
    echo -e "\nMachine information:" ; uname -a
    echo -e "\nUsers logged on:" ; w -h
    echo -e "\nCurrent date :" ; date
    echo -e "\nMachine status :" ; uptime
    echo -e "\nMemory status :" ; free
    echo -e "\nFilesystem status :"; df -h
}

$ mach
Machine information:
Linux dev-db 2.6.18-128.el5 #1 SMP Wed Dec 17 11:41:38 EST 2008 x86_64 GNU/Linux

Users logged on:
root     pts/2    ptal.mot Wed10    0.00s  1.35s  0.01s w -h

Current date :
Thu Mar 18 11:59:36 CET 2010

Machine status :
 11:59:36 up 7 days, 3 min,  1 user,  load average: 0.01, 0.15, 0.15

Memory status :
             total       used       free     shared    buffers     cached
Mem:       2059768    2033212      26556          0      81912     797560
-/+ buffers/cache:    1153740     906028
Swap:      4192956      48164    4144792

Filesystem status :
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              12G   12G     0 100% /
tmpfs                1006M  377M  629M  38% /dev/shm
/dev/sdc5             9.9G  409M  9.0G   5% /mydisk

Příklad 6:Funkce Bash pro lepší formátování výstupu

Následující funkce vymaže obrazovku, umístí kurzor do horní části obrazovky, provede ls a poté umístí kurzor na konec obrazovky.

$ function ll ()
{
    clear;
    tput cup 0 0;
    ls --color=auto -F --color=always -lhFrt;
    tput cup 40 0;
}

$ ll

Zobrazte kód funkce pomocí příkazu typu

type je vestavěný shell používaný k zobrazení kódu funkce.

Syntax:
type function-name
$ type ll
ll is a function
ll ()
{
    clear;
    tput cup 0 0;
    ls --color=auto -F --color=always -lhFrt;
    tput cup 40 0;
    alias ls="ls --color=auto -F"
}

Pro snadnou orientaci získejte všech 6 funkcí zmíněných v tomto článku z tohoto ukázkového souboru funkcí .bash_profile.

Přidejte všechny tyto funkce do svého souboru ~/.bash_profile, abyste měli jistotu, že k těmto funkcím budete mít neustále přístup, aniž byste je museli pokaždé vytvářet.


Linux
  1. Bash Beginner Series #9:Použití funkcí v Bash

  2. Bash Shell Exit Status Tutorial s praktickými příklady

  3. Výukový program Ultimate Bash Array s 15 příklady

  1. Funkce v proměnných Shell?

  2. Bash If-Else prohlášení s příklady

  3. Perl Array Reference a Dereference Tutorial s praktickými příklady

  1. Jak napsat Bash skript s příklady

  2. Výukový program Awk:Pochopte proměnné Awk pomocí 3 praktických příkladů

  3. 15 užitečných vestavěných příkazů Bash Shell (s příklady)