GNU/Linux >> Znalost Linux >  >> Linux

Skriptování prostředí 2. část:Přijímání vstupů a provádění aritmetiky prostředí

Ahoj! Tento článek je druhou částí série výukových programů skriptování Shell Howtoforge. V tuto chvíli předpokládám, že jste přečetli první díl série a víte, jak vytvořit jednoduchý skript a spustit jej. Ve druhé části se dozvíte, jak přijímat vstupy od uživatele a zpracovávat je pomocí skriptování shellu. Začněme!

Proměnné v Linuxu

Stejně jako programovací jazyky má linuxový shell schopnost ukládat data do proměnných. Proměnná je kontejner, který dočasně ukládá data, která budou zpracována prostřednictvím programovacího jazyka. V Linuxu existují dva typy proměnných:proměnné prostředí a proměnné prostředí.

Proměnné prostředí

Proměnné prostředí jsou výchozí proměnné v Linuxu a používají se k předávání informací mezi procesy v shellu. Proměnné prostředí rozlišují malá a velká písmena a pro přístup k nim by měly být vždy velká písmena.

Níže uvedená tabulka ukazuje běžné proměnné prostředí v prostředí Linux shell:

Název proměnné Použití
BASH Uchovává úplnou cestu k interpretru příkazů pro skripty Bash
BASH_VERSION Uchovává verzi bash aktuálně používaného počítače
DOMŮ Uchovává relativní cestu k domovskému adresáři.
LOGNAME Uchovává název účtu aktuálně přihlášeného uživatele
OSTYPE Uchovává řetězec, který popisuje aktuální operační systém použitého počítače
PATH Uchovává absolutní cestu ke spustitelným souborům v Linuxu oddělenou dvojtečkou
PWD Uchovává aktuální pracovní adresář shellu
SHELL Uchovává preferovaný shell příkazového řádku
UŽIVATEL Funguje podobně jako LOGNAME. Obsahuje název účtu aktuálně přihlášeného uživatele
Uchovává název naposledy použitého příkazu v shellu

Aby se zobrazila hodnota proměnné prostředí, musí uživatel před proměnnou, ke které má získat přístup, přidat znak dolaru ($). Například pro zobrazení některých systémových informací, jako je aktuální pracovní adresář, přihlášený uživatel a typ OS pomocí echo, používáme:

#!/bin/bash
echo $PWD
echo $LOGNAME
echo $OSTYPE

Výsledek je:

Chcete-li získat celý seznam proměnných prostředí v Linuxu, použijte příkaz env.

Změna hodnot proměnných prostředí

Pro zajištění flexibility systému lze s těmito proměnnými prostředí manipulovat. Chcete-li nastavit hodnotu proměnné prostředí, použijte výraz přiřazení (rovná se).

Příklad:

#!/bin/bash
echo $USER
USER="new user"
echo $USER

Výsledek skriptu je:

Když skript spustíte, nejprve $USER v řádku echo $USER zobrazí hodnotu proměnné USER. Pomocí operátoru přiřazení (=) mění proměnná USER svou hodnotu. Pokud však uživatel přiřadí neznámé hodnoty proměnné prostředí, shell vytvoří další proměnnou prostředí podobnou proměnné prostředí v místním kontextu skriptu, ale neovlivní to chování jiných aplikací. To znamená, že jakmile bude náš skript uzavřen, proměnná USER si zachová výchozí hodnotu.

Všimněte si, že v našem předchozím příkladu vynecháváme znak dolaru ($) v názvu proměnné při manipulaci s hodnotami proměnných prostředí, jako je řádek USER="nový uživatel". Také při použití operátoru přiřazení nesmí být mezi USER a =žádná mezera. Přidáním mezery mezi ně dojde k chybě.

Proměnné prostředí

Shell také umožňuje uživateli deklarovat proměnné. Stejně jako v PHP, pro deklaraci proměnné ve skriptech shellu se uživatel nemusí starat o deklaraci jejího datového typu; interpret automaticky zjistí datový typ proměnné na základě dat, která do ní uživatel ukládá během běhu.

Pravidla pro pojmenování proměnných shellu

Stejně jako každý programovací jazyk existují pravidla pro pojmenování proměnných shellu. Následující shrnutí pravidel:

  1. Názvy proměnných musí začínat písmenem nebo podtržítkem.
  2. Musí obsahovat pouze alfanumerické znaky nebo podtržítko.
  3. V proměnných se rozlišují velká a malá písmena, takže proměnné path, PATH a Path se liší.

Abychom toto pravidlo dokázali, vytvoříme níže jednoduchý skript:

#!/bin/bash
12abc=10
abc#*=10
_abc=10
_ABC=2
echo $12abc $abc#* $_abc $_ABC

Řádky 2 a 3 vrátí chybu „příkaz nenalezen“, protože proměnná 12abc začíná číselným znakem a proměnná abc#* obsahuje nepovolené znaky. Také jsme dokázali, že _abc a _ABC jsou různé proměnné a řádek _ABC=2 nepřepisuje hodnotu _abc.

Přiřazení hodnot proměnným prostředí pomocí příkazu read:

read je příkaz, který umožňuje přijímat vstupy od uživatele. Syntaxe při použití příkazu read je:

read <variable_name>

Vytvoříme například skript, který umožní uživateli zadat jeho jméno a příjmení a zobrazit je. Aby uživatel věděl, co má dělat, zobrazíme uživatelskou výzvu s příkazem echo.

#!/bin/bash
echo "Your first name: "
read fname
echo "Your last name:"
read lname 
echo "Hello $fname $lname ! I am learning how to create shell scripts."

Výsledek je:

Upozorňujeme, že stejně jako v našem předchozím příkladu nemusíme proměnnou deklarovat, abychom ji mohli použít. Interpret také automaticky vytvoří proměnnou, která se používá v příkazu čtení. V příkladu jsme však opakovaně použili příkaz echo k vytvoření výzvy pro uživatele. Příkaz read má také schopnost vytvořit výzvu při přijímání uživatelských vstupů. Syntaxe použití prompt v příkazu read je:

read -p "Your prompt: " <variable_name>

Pro zjednodušení našeho předchozího kódu můžeme kód rekonstruovat na:

#!/bin/bash
read -p "Your first name: " fname
read -p "Your last name: " lname
echo "Hello $fname $lname ! I am learning how to create shell scripts"

Další výhodou příkazu read je, že příkazový řádek je hned za textem a ne na řádku níže.

Příkaz read lze také použít k přijetí hesel. Na rozdíl od běžných vstupů jsou hesla pro zajištění bezpečnosti maskována. Syntaxe při přijímání hesla je:

read -s -p "your prompt" <variable_name>

Provádění jednoduché aritmetiky pomocí shellu

Kromě přijímání vstupů a zobrazování výstupu má bash shell také vestavěnou aritmetiku. Níže uvedená tabulka shrnuje vestavěné aritmetické operátory shellu Bash.

Operátor Popis Syntaxe Použití
+ Dodatek a=$((b+c)) Přidá hodnotu b a c a uloží ji do proměnné a
- Odčítání a=$((b-c)) Odečte hodnotu c od b a uloží ji do proměnné a
* Násobení a=$((b*c)) Vynásobí hodnotu b a c a uloží ji do proměnné a
/ Divize a=$((b/c)) Vydělí hodnotu b c a uloží ji do proměnné a
% Modul a=$((b%c)) Provede modulo dělení b a c a uloží je do proměnné a
++ Předběžné zvýšení $((++aa)) Okamžitě zvýší hodnotu proměnné a
++ Po zvýšení $((a++)) Zvyšuje hodnotu proměnné a a odráží změny na dalším řádku
-- Předběžné snížení $((--a)) Okamžitě sníží hodnotu proměnné a
-- Po snížení $((a--)) Sníží hodnotu proměnné a a zohlední změny na dalším řádku
** Umocnění $((a**2)) Zvyšte hodnotu a na exponent 2
+= Plus se rovná $((a+=b)) Přidá hodnotu aab a uloží ji do proměnné a
-= Mínus se rovná $((a-=b)) Odečte hodnotu b od a a uloží ji do proměnné a
*= Časy stejné $((a*=b)) Vynásobí hodnotu aab a uloží ji do proměnné a
/= Lomítko rovné $((a/=b)) Vydělí hodnotu a b a uloží ji do proměnné a
%= Mod-equal $((a%=b)) Proveďte modulo dělení mezi a a b a uložte jej do proměnné a

Všimněte si, že pokaždé, když provedete aritmetické instrukce, všechny naše proměnné budou uzavřeny znakem dolaru a dvojitou závorkou. Tímto způsobem interpret zachází s hodnotami našich proměnných jako s celými čísly. Bez něj interpret zachází s hodnotami proměnné jako s řetězcem. Příklad naleznete ve skriptu níže:

#!/bin/bash
read -p "Enter int1: " a
read -p "Enter int2: " b
echo $((a+b))
c=$a+$b
echo $c

Když spustíme náš příklad, řádek $((a+b)) přidá uživatelské hodnoty, které jsou uloženy v proměnných a a b, zatímco c=$a+$b zachází s proměnnými a a b jako s řetězci.

Závěr

Probrali jsme, jak přijímat vstupy a ukládat je do proměnné a jak provádět aritmetické operace ve skriptování bash shell. V příštím díle si představíme řídící struktury a zejména rozhodovací strukturu.

Odkazy:

Informační projekt pro Linux. (2007). Získáno 29. dubna 2015 z Linfo.org: http://www.linfo.org/

Cooper, M. (n.d.). Advanced Bash Scripting Guide. Získáno 29. dubna 2015 z http://www.tldp.org/LDP/abs/html/

Proměnné prostředí. (n.d.). Získáno 29. dubna 2015 z dokumentace Ubuntu: https://help.ubuntu.com/community/EnvironmentVariables


Linux
  1. Linux C výuka programování, část 11 - Aritmetické, relační a logické operátory

  2. Najít a nahradit ve skriptování shellu

  3. Atribut SPEC %files a proměnné Shell

  1. Jak nastavit/vytvořit proměnné prostředí a prostředí v Linuxu

  2. Rozdíl v použití mezi proměnnými shellu a proměnnými prostředí?

  3. Shell skript s funkcí a parametrem jako proměnnými?

  1. Proměnné uživatelského prostředí S „su“ a „sudo“ v Linuxu

  2. Chování polí ve skriptování bash a shellu zsh (počáteční index 0 nebo 1?)

  3. jiný shell pro uživatele root a uživatele bez root