GNU/Linux >> Znalost Linux >  >> Linux

Bash skriptování (I)

Toto je první článek ze série zaměřené na skriptování Gnu Bash. Není to úplný kurz programování bash, ale na konci byste se měli naučit jednu nebo dvě věci. Myslím tím užitečné věci, které vám usnadní život.

Lenost je klíčem k úspěchu

Někdy potřebuji spustit příkaz1, následovaný příkazem2, poté příkazem3 a nakonec příkazem4. Po chvíli musím zopakovat sekvenci příkazů. Ale protože jsem velmi chytrý, prošel jsem historii příkazů pomocí šipky nahoru, abych nemusel psát znovu.

Potom, po nějaké době, to musím udělat znovu a vím, že to budu muset v budoucnu udělat znovu. Například každý den nabootujete počítač, přihlásíte se k linuxu založenému na debianu a zkontrolujete aktualizace balíčků:

# apt-get update
(...)
# apt-get upgrade
(...)
# apt-get dist-upgrade

Místo psaní těchto 52 znaků pokaždé, můžete to vložit do skriptu, jako je tento:

#!/bin/bash
#this is not a Hello world
apt-get update
apt-get upgrade
apt-get dist-upgrade

Tento skript můžete uložit jako „up.sh“ a následující ráno po přihlášení stačí spustit:./up.sh . Takhle jste ušetřili 44 úhozů, jste líní nebo co?.

Ne, nejsme, pokud se pokusíte spustit „tak jak je“, zobrazí se krásná Chyba odepřeno oprávnění . Je to proto, že jsem nikdy neřekl, že mám nastavit oprávnění ke spuštění:

# chmod +x up.sh

Později vám ukážu, jak být ještě línější.

Kromě příkazů na posledních řádcích jste si všimli číselného znaku (#) na prvních dvou řádcích. Úplně první řádek se nazývá shebang a říká systému, který interpret používá ke spouštění příkazů ve skriptu.

Druhý je jen komentář a můžete ho dát všude:co je za tímto nápisem, bude ignorováno. Například:

# this is a comment
command1 # this also is a comment. Should explain what that command do
#command2. # This was command... but as was commented out, bash would ignore it

Je důležité (alespoň pro mě) přidat alespoň pár komentářů, abyste si zapamatovali, co skript dělá a proč. Ve velkých skriptech také k přidání komentářů k vysvětlení bloků, sekcí nebo částí skriptu. Komentáře vám pomohou, když se o několik měsíců, týdnů nebo dokonce dní později vrátíte ke svému skriptu.

Jak se stát línější

Není třeba psát pokaždé, když se přihlásíme do našich systémů. Můžeme přimět počítač, aby tento skript spustil za nás. Můžete přidat řádek „./up.sh ” na jednom z následujících míst:

  • .bashrc . Toto spustí skript pokaždé, když spustíte nepřihlašovací shell (tj. terminál na ploše, jako je xterm)
  • .bash_profile Toto je pro přihlašovací shell, například když zadáváte své uživatele a heslo na konzoli nebo se přihlašujete do systému přes ssh.
  • .xinitrc jako .bashrc, ale pro grafické relace. Pravděpodobně používáte moderní deskkop s vlastními nástroji pro automatické spouštění aplikací, použijte je.
  • položka v souboru crontab, takže se spouští pravidelně.

Proměnné

Potřebujeme ‚něco‘ k uložení hodnot, například uživatelský vstup, parametr z příkazového řádku. Toto „něco“ je proměnná. Mimochodem, předpokládám, že už víte, co je proměnná.

Chcete-li deklarovat proměnnou, můžete

  • přiřadit hodnotu názvu proměnné. Příklad:x=1
  • zadejte uživateli hodnotu pomocí příkazu read:read x
  • parametr z příkazového řádku. Brzy se k tomu vrátím
  • existují další způsoby, jak definovat proměnnou, které uvidíme později

Chcete-li „zavolat“ proměnnou, zadejte znak dolaru následovaný názvem proměnné. Například pokud chceme na obrazovce vytisknout hodnotu proměnné $x:

echo "x value: $x"
echo "Type y vaue:"
read y
echo "You typed: $y"

Parametry příkazového řádku jsou uloženy v číslovaných proměnných. Například, použijte první argument, zavolejte proměnnou $1. Za 2. zavolejte $2. A tak dále. Proměnná $0 ukládá název souboru skriptu. V mém prvním příkladu ne-ahoj-světe je hodnota 0 $ „up.sh“.

Pole

Pole jsou definována stejným způsobem, ale s hodnotami uzavřenými v kulatých závorkách. Takhle:

array=(uno dos tres)

Později můžete do pole přidat další hodnoty s indexem uzavřeným v hranatých závorkách:

array[3]=cuatro

Prvek pole můžete ‚volat‘ se složenými závorkami pro název pole a hranatými závorkami pro pozici prvku (začínající 0):

$ echo ${array[0]}
uno

Pokud nepoužijete složenou závorku, bash vytiskne doslovný [element position], například:

$ echo $array[0]
uno[0]

Celé pole můžete volat s @ jako index takto:

$ echo ${array[@]}
uno dos tres cuatro

Nakonec můžete získat počet prvků pole se znakem hash (stejný, o kterém jsem dříve řekl, že je pro komentáře) takto:

echo ${#array[@]}
4

Existuje mnoho dalších věcí, které můžeme dělat s poli a dalšími typy polí, jako jsou asociativní pole. Ale pro dnešek to stačí.

Zůstaňte naladěni

Zatím jsem neukázal nic moc „woaaah “. V tomto článku není ani jeden snímek obrazovky. Ale mým záměrem ke konci této série – možná tří nebo více článků – je poskytnout nástroje, jak dělat něco užitečného. Nevím, jestli se z vás stane bash skriptovací guru, ale můžete to zkusit 😉

V dalším se budu věnovat některým řídicím strukturám, potrubím a přesměrování. Mezitím se můžete podívat na manpage bash, ale alespoň pro mě je to trochu matoucí


Linux
  1. Zkontrolujte, zda existuje proměnná v seznamu v Bash

  2. předání grepu do proměnné v bash

  3. Jak odstranit proměnnou pouze pro čtení v bash?

  1. Bash Dynamické (proměnné) názvy proměnných?

  2. Jak porovnávat řetězce ve skriptování Bash Shell

  3. Alias ​​s proměnnou v bash

  1. Bash deklarovat Příkaz:Syntaxe a příklady

  2. Proměnná exportu Bash

  3. bash - shoda proměnné bez ohledu na velikost písmen