GNU/Linux >> Znalost Linux >  >> Linux

Bash skriptování – proměnné vysvětlené s příklady

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.

  1. Vytvořte proměnnou site_name="OSTechnix" z vašeho aktuálního shellu a přístup k proměnné.
  2. Použijte $$ variable abyste viděli, ve které relaci se nacházíte.
  3. Vytvořte novou bash relaci zadáním "bash" .
  4. 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.
  5. 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

Linux
  1. Bash skriptování (I)

  2. Bash If-Else prohlášení s příklady

  3. Alias ​​s proměnnou v bash

  1. Jak napsat Bash skript s příklady

  2. Rozdíl mezi definováním proměnných Bash s exportem a bez exportu

  3. Příkaz Bash Echo vysvětlený s příklady v Linuxu

  1. Bash přesměrování vysvětleno s příklady

  2. Skriptování Bash – smyčka dokud a dokud vysvětlená s příklady

  3. Bash skriptování – pro smyčku vysvětlenou s příklady