GNU/Linux >> Znalost Linux >  >> Linux

Bash Beginner Series #3:Předávání argumentů Bash skriptům

Argumenty mohou být užitečné, zvláště s Bash!

Doposud jste se naučili, jak používat proměnné k tomu, aby byly vaše bash skripty dynamické a obecné, takže reagují na různá data a různé uživatelské vstupy.

V tomto tutoriálu se naučíte, jak můžete předávat proměnné do bash skriptů z příkazového řádku.

Kupte si e-knihu „Učte se Bash rychle“.

Předávání argumentu skriptu bash shell

Následující skript count_lines.sh vypíše celkový počet řádků, které existují v jakémkoli souboru, který uživatel zadá:

#!/bin/bash

echo -n "Please enter a filename: "
read filename
nlines=$(wc -l < $filename)

echo "There are $nlines lines in $filename"

Uživatel může například zadat soubor /etc/passwd a skript v důsledku toho vyplivne počet řádků:

Tento skript funguje dobře; existuje však mnohem lepší alternativa!

Namísto výzvy uživatele k zadání názvu souboru můžeme přimět uživatele, aby při spouštění skriptu jednoduše předal název souboru jako argument příkazového řádku:

./count_lines.sh /etc/passwd

První argument bash (také známý jako poziční parametr) je přístupný ve vašem skriptu bash pomocí $1 proměnná.

Takže ve skriptu count_lines.sh můžete nahradit proměnnou názvu souboru $1 takto:

#!/bin/bash

nlines=$(wc -l < $1)
echo "There are $nlines lines in $1"

Všimněte si, že jsem se také zbavil příkazu read a first echo, protože již nejsou potřeba!

Nakonec můžete spustit skript a předat libovolný soubor jako argument:

./count_lines.sh    /etc/group
There are 73 lines in /etc/group

Předávání více argumentů skriptu bash shell

Svému bash skriptu můžete předat více než jeden argument. Obecně platí, že zde je syntaxe předávání více argumentů libovolnému bash skriptu:

script.sh arg1 arg2 arg3  …

Na druhý argument bude odkazovat $2 proměnná, na třetí argument se odkazuje $3 , .. atd.

$0 proměnná obsahuje název vašeho bash skriptu pro případ, že by vás to zajímalo!

Nyní můžeme upravit náš count_lines.sh bash skript, aby mohl počítat řádky více než jednoho souboru:

#!/bin/bash

n1=$(wc -l < $1)
n2=$(wc -l < $2)
n3=$(wc -l < $3)

echo "There are $n1 lines in $1"
echo "There are $n2 lines in $2"
echo "There are $n3 lines in $3"

Nyní můžete spustit skript a předat tři soubory jako argumenty skriptu bash:

Jak můžete vidět, skript vydává počet řádků každého ze tří souborů; a netřeba dodávat, že na pořadí argumentů samozřejmě záleží.

Tvořivost pomocí argumentů v prostředí Bash

Linuxových příkazů je celá řada.

Některé z nich jsou trochu komplikované, protože mohou mít dlouhou syntaxi nebo dlouhé pole možností, které můžete použít.

Naštěstí můžete použít argumenty bash, abyste z tvrdého příkazu udělali docela snadný úkol!

Chcete-li to demonstrovat, podívejte se na následující find.sh bash skript:

#!/bin/bash

find / -iname $1 2> /dev/null

Je to velmi jednoduchý skript, který se však může ukázat jako velmi užitečný! Jako argument skriptu můžete zadat libovolný název souboru a skript zobrazí umístění vašeho souboru:

Vidíte, jak je to nyní mnohem jednodušší než psát celý příkaz find! Toto je důkaz, že můžete použít argumenty k přeměně jakéhokoli dlouhého komplikovaného příkazu v Linuxu na jednoduchý bash skript.

Pokud vás zajímá 2> /dev/null , to znamená, že na obrazovce se nezobrazí žádné chybové hlášení (např. soubor nelze získat). Doporučuji přečíst si o přesměrování stderr v Linuxu, abyste získali více znalostí o tomto tématu.

Bonusový tip:Speciální proměnné v prostředí Bash

Bash má mnoho vestavěných speciálních proměnných, které jsou docela praktické a jsou vám k dispozici.

Níže uvedená tabulka zdůrazňuje nejběžnější speciální vestavěné bash proměnné:

Speciální proměnná Popis
0 $ Název bash skriptu.
1 $, 2 $...$n Argumenty skriptu bash.
$$ ID procesu aktuálního shellu.
$# Celkový počet argumentů předávaných skriptu.
[email protected] Hodnota všech argumentů předávaných skriptu.
$? Stav ukončení posledního provedeného příkazu.
$! ID procesu posledního provedeného příkazu.

Chcete-li vidět tyto speciální proměnné v akci; podívejte se na následující variables.sh bash skript:

#!/bin/bash

echo "Name of the script: $0"
echo "Total number of arguments: $#"
echo "Values of all the arguments: [email protected]"

Nyní můžete předat libovolné argumenty a spustit skript:

Dobře, tím se dostáváme na konec této kapitoly. Doufám, že si nyní uvědomujete, jak mocné a užitečné mohou být argumenty bash.

Potřebujete trochu praxe, stáhněte si toto PDF a procvičte si předávání argumentů bash skriptům pomocí jednoduchých skriptovacích výzev. Jejich řešení jsou také zahrnuta.

Bash Kapitola 3 Cvičné otázkyProblémy a jejich řešení k procvičení toho, co jste se právě naučili v této kapitole Bash-Kapitola-3-Procvičení-otázek-Linux-Příručka.pdf30 KB

Poté se podívejte na další kapitolu, kde ukážu, že můžete vytvářet a používat pole ve svých bash skriptech.


Linux
  1. Jak zvýraznit Bash skripty ve Vimu?

  2. automatizace relace telnet pomocí bash skriptů

  3. Spusťte příkaz bash na jenkins pipeline

  1. Zpracování chyb ve skriptech Bash

  2. Předat argumenty příkazového řádku skriptu Bash?

  3. Použít rozšíření .sh nebo .bash pro skripty Bash?

  1. Přidání argumentů a voleb do vašich Bash skriptů

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

  3. Bash Beginner Series #8:Loops in Bash