Proměnné jsou velmi důležité pojmy v jakémkoli programovacím jazyce, se kterým pracujete. Představte si proměnnou jako kontejner v paměti, který ukládá data určitého typu. Hlavním účelem proměnných je uložit hodnotu a později k ní přistupovat pro zpracování. Pokud jste někdo z jiných programovacích jazyků, jako je Java, C, C++, můžete najít rozdíly v tom, jak se liší definice proměnné, protože Bash nemá silný typový systém.
Bash zpracovává dva typy proměnných. Jsou to:
- Uživatelem definované proměnné :Proměnné, které vytvoříte a s nimiž manipulujete.
- Proměnné prostředí :Vytvořeno a uloženo bash nebo aplikacemi pro účely systému/aplikace.
Začneme pracovat s uživatelsky definovanými proměnnými následovanými proměnnými prostředí.
1. Jak vytvořit proměnnou
Proměnná by měla mít identifikátor (název proměnné) a přiřazenou hodnotu, jak je uvedeno níže. Identifikátor (název proměnné) je "site_name"
a přiřazená hodnota je "OSTechnix"
.
$ site_name="OSTechnix" $ this_year=2021 $ value_of_pi=3.14
Při vytváření proměnných je třeba pamatovat na několik věcí.
- Mezi názvem proměnné a hodnotou by neměla být mezera.
- Snažte se vyhnout používání názvů, které se již používají, jako jsou vyhrazená klíčová slova bash, názvy proměnných a funkcí, které způsobí konflikt.
- Vytvořte popisné názvy proměnných a názvy proměnných mohou obsahovat písmena, čísla, podtržítka a číslice.
Konvence pojmenovávání proměnných je diskutabilní, protože jsem viděl, že různí lidé používají různé konvence k vytváření jmen proměnných. Někteří vytvářejí uživatelem definované proměnné pomocí hadího případu, jak jsem vytvořil v předchozím příkladu, a někteří vytvářejí názvy proměnných s velkými písmeny. Bash nemá žádná přísná pravidla, ale buďte důslední ať už zvolíte jakoukoli metodu. Dávám přednost pojmenování proměnných ve tvaru hada a konstant ve velkých písmenech.
2. Jak získat přístup k proměnným Bash
Existují dva způsoby přístupu k proměnné. Jedním z nich je použití "$ symbol"
následuje název proměnné a druhá metoda používá "$ symbol"
následované složenými závorkami a názvem proměnné uvnitř složených závorek.
$ echo $site_name
OSTechnix
$ echo ${this_year} 2021
$ echo ${this_year} $value_of_pi
2021 3.14

3. Znovu přiřaďte hodnotu proměnné
Bash nemá žádný silný typový systém, což znamená, že neexistují žádná přísná pravidla pro definování datového typu při vytváření proměnných. Proměnná Bash ukládá všechny hodnoty jako řetězce a chytře ví, kdy pracujeme s numerickým výpočtem.
Jakékoli hodnoty můžete znovu přiřadit proměnné, která je již vytvořena.
$ os_name="PoP_OS!"
$ echo ${os_name} PoP_OS!
$ os_name="Linux Mint" $ echo ${os_name} Linux Mint

4. Deklarování datového typu pro proměnnou
Můžete použít declare
příkaz k vytvoření proměnné se specifickým datovým typem. Přejděte do části nápovědy declare
Chcete-li se o něm dozvědět více.
$ declare --help

Například pokud chcete vytvořit proměnnou s int
datový typ, můžete použít declare
pomocí -i
vlajka.
$ declare -i pi
$ pi=3
$ echo $pi 3
$ pi=3.14 bash: 3.14: syntax error: invalid arithmetic operator (error token is ".14")

Pamatujte, že declare
příkaz je způsob, jak manipulovat s atributem vaší proměnné, ale neočekávejte silný typový systém od declare
příkaz jako v jiných programovacích jazycích.
5. Výstup příkazu do proměnné
Můžete spustit libovolné příkazy bash a uložit výstup příkazu do proměnné. Příkaz musíte spustit v rámci $()
jako níže a později použijte proměnnou pro další zpracování.
$ today_date=$(date)
$ echo ${today_date} Saturday 11 September 2021 08:53:25 PM IST

6. Použití uvozovek s proměnnou
V bash se jednoduché a dvojité uvozovky chovají dvěma různými způsoby. Jednoduché uvozovky zabrání rozšíření a budou s hodnotou zacházet jako s doslovnou. Dvojité uvozovky umožní rozšíření.
Podívejte se na níže uvedený příklad. Vytvořil jsem proměnnou s názvem "which_year"
a spuštění příkazu spolu s řetězcem. Když použiji dvojité uvozovky, date
příkaz bude rozšířen, ale při použití jednoduchých uvozovek bude date
příkaz se nespustí a je uložen tak, jak je v proměnné.
$ which_year="I am in year : $(date +%Y)" $ echo ${which_year} I am in year : 2021
$ which_year='I am in year : $(date +%Y)' $ echo ${which_year} I am in year : $(date +%Y)'

7. Odebrání proměnné
Proměnnou můžete odstranit pomocí unset
příkaz.
Unset
příkaz odebere hodnoty a atributy proměnných a funkcí.
Můžete buď použít unset
s -v
příznak, který ukazuje na proměnnou nebo jen unset
příkaz, který ve výchozím nastavení nejprve zkontroluje definici proměnné a zruší její nastavení.
$ echo ${which_year}
$ unset -v which_year (or) unset which_year
$ echo ${which_year}

Další podrobnosti naleznete v části unset
sekce nápovědy k příkazům.
$ unset --help
8. Proměnná pouze pro čtení
Stav pouze pro čtení znamená, že nemůžete změnit hodnotu ani odstranit proměnnou, jakmile je vytvořena. Proměnnou pouze pro čtení lze vytvořit dvěma způsoby.
Použijte vestavěný bash readonly
pro vytvoření proměnné pouze pro čtení.
$ readonly var1="This is a readonly variable"
Případně můžete použít declare
pomocí -r
vlajka.
$ declare -r var2="This is a readonly variable too"
Nemůžete změnit přiřazení ani zrušit nastavení readonly
hodnotu proměnné, vyvolá to chybu.
$ var2="Reassigning with new value" bash: var2: readonly variable
$ unset var1 bash: unset: var1: cannot unset: readonly variable

9. Bash vestavěné speciální proměnné
Bash má některé speciální vestavěné proměnné, které jsou vyhrazeny pro ukládání určitých výsledků. Podívejte se na níže uvedený seznam proměnných.
$? = Stores exit status of last ran the command. $$ = Stores process ID for your bash session. $0 = Script name. $1 .. $9 = Arguments passed to the script. $# = Count the length of values [email protected], $* = Stores array of all values.
9.1. Stav ukončení ($?)
Každý příkaz Linuxu, který spustíte, má přidružený ukončovací kód od (0-255). Nula ukazuje na úspěch a zbytek ukazuje na neúspěch s jiným významem.
$ whoami
$ echo $?
0
$ asdf # WRONG COMMAND
$ echo $?
127

9.2. ID procesu ($$)
Pomocí $$
operátora, můžete získat ID procesu bash. Pokud jej spustíte z terminálu, poskytne vám ID procesu pro vaši aktuální relaci.
$ echo $$ 195777 # PROCESS ID OF MY CURRENT TERMINAL SESSION

9.3. Název skriptu a argumenty ($0-$9)
Argumenty lze předat vašim skriptům a možná je již používáte ve svém každodenním životě. Podívejte se na id
příkaz, který akceptuje uživatelské jméno jako argument.
$ id karthick
uid=1000(karthick) gid=1000(karthick) groups=1000(karthick),4(adm),27(sudo),119(lpadmin),998(docker)
Podobně můžete vytvářet skripty, které přijímají argumenty. Vytvořte ukázkový skript shellu a zkopírujte/vložte do něj následující fragment.
cat > main.sh #!/bin/bash echo "+ script_name=$0 " echo "+ first_argument=$1 " echo "+ second_argument=$2 " echo "+ third_argument=$3 "
Nyní spusťte skript a předejte argumenty. Jako argumenty předávám 1 až 3. $0
převezme název skriptu s absolutní cestou, protože jsem předal absolutní cestu a $1
na $3
je přiřazena s příslušnými předávanými argumenty.
$ /home/karthick/main.sh 1 2 3 + script_name=/home/karthick/main.sh + first_argument=1 + second_argument=2 + third_argument=3

9.4. Délka hodnoty ($#)
Pomocí $#
, můžete vypočítat celkový počet předaných argumentů nebo spočítat délku libovolných hodnot. Podívejte se na níže uvedený příklad. Před názvem proměnné uveďte #
a vypíše délku hodnoty místo skutečné hodnoty.
$ site_name="OSTechnix"
$ echo ${#site_name}
9

10. Variabilní rozsah
Je důležité, abyste rozuměli rozsahu proměnné. Když vytvoříte proměnnou buď v terminálu, nebo pomocí skriptu shellu, je tato proměnná svázána a dostupná pouze pro danou relaci. Můžete to také říci jako místní proměnnou. Pokud se pokusíte o přístup k proměnné z jiných relací, proměnná nebude dostupná.
Podívejte se na níže uvedený obrázek, který vám dobře porozumí tomu, co se děje.
- Vytvořte proměnnou
site_name="OSTechnix"
z vašeho aktuálního shellu a přístup k proměnné. - Použijte
$$ variable
abyste viděli, ve které relaci se nacházíte. - Vytvořte novou bash relaci zadáním
"bash"
. - Zkuste získat přístup k proměnné
site_name
z této relace. Získáte prázdný výstup, což je výchozí chování v bash. - Ukončete novou relaci zadáním
"Exit"
a nyní zkuste přistupovat k proměnné a budete mít přístup k proměnné.

Pokud chcete k proměnné přistupovat globálně z jakékoli relace, musíte použít export
příkaz, který zpřístupní proměnnou pro přístup ve všech podřízených relacích/procesech vytvořených z vaší aktuální relace.
$ site_name="OSTechnix"
$ export site_name
Nebo
$ export site_name="OSTechnix"
$ bash
$ echo ${site_name}

Seznam proměnných k exportu získáte zadáním "export"
z terminálu. Získáte jak environmentální, tak uživatelsky definované seznamy proměnných.
$ export

11. Proměnná prostředí
Doposud jsme viděli, jak pracovat s uživatelsky definovanými proměnnými. V úvodní části jsem zmínil, že bash podporuje proměnné prostředí. Tato sada proměnných se načte, když spustíte relace bash a jsou spravovány bashem. Tyto proměnné prostředí používají aplikace k rozhodování o chování.
Například nano je nastaven jako výchozí editor pro úpravy crontab . Pokud chci použít Vim místo nano mohu nastavit prostředí EDITOR proměnnou a crontab zkontroluje tuto proměnnou prostředí a použije ji.
$ export EDITOR="vim"
$ crontab -e
Pozor: Vaše proměnná je vázána pouze na vaši aktuální relaci. Pokud chcete, aby byla trvalá, musíte ji vložit do ~/.bashrc
nebo ~/.bash_profile
.
Seznam proměnných prostředí získáte spuštěním "printenv"
příkaz. Uvidíte, že proměnné prostředí jsou definovány velkými písmeny.
$ printenv

Ke konkrétní proměnné prostředí můžete také přistupovat pomocí příkazu printenv. Níže jsou uvedeny některé běžné proměnné prostředí, se kterými se setkáte.
$ printenv USER # PRINTS USER NAME
karthick
$ printenv HOME # USER HOME DIRECTORY LOCATION
/home/karthick
$ printenv PWD # PRESSENT WORKING DIRECTORY
/home/karthick
$ printenv SHELL # WHICH SHELL I AM USING NOW
/bin/bash
$ printenv PATH # PATH WHICH IS USED BY BASH TO CHECK AND RUN COMMANDS
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Závěr
V tomto průvodci proměnnými Bash jsme začali stručným úvodem o proměnných a o tom, jak je vytvářet, přistupovat, měnit a deaktivovat v jejich příslušné části. A pak jsme viděli, jaký je rozdíl mezi proměnnými definovanými uživatelem a proměnnými prostředí. Pokuste se prozkoumat seznam proměnných prostředí, které jsou načteny ve vašich relacích, což vám dá dobré porozumění Bash.
Související čtení:
- Bash Scripting – pro smyčku vysvětlenou na příkladech
- Bash Scripting – smyčka Zatímco a dokud není vysvětlena příklady
- Bash Scripting – funkce vysvětlené na příkladech
- Příkaz Bash Echo vysvětlený s příklady v Linuxu
- Výukový program Bash Heredoc pro začátečníky
- Přesměrování Bash vysvětleno na příkladech
- Rozdíl mezi definováním proměnných Bash s exportem a bez exportu