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.