Oba shelly ponúkajú výkonné skriptovacie jazyky, ale nie sú úplne kompatibilné.
Pokiaľ ide o skriptovanie shellu na operačných systémoch podobných Unixu, dominujú dva shelly: Bash (Bourne Again Shell) a Zsh (Z Shell). Ak ste programátor alebo správca systému, výber medzi týmito dvoma výrazne ovplyvňuje vašu efektivitu a produktivitu.
Pochopenie rozdielov a podobností medzi týmito dvoma shellmi vám pomôže optimalizovať pracovný tok príkazového riadka. Vedieť o nuansách každej škrupiny vám pomôže robiť informované rozhodnutia.
Čo sú Bash a Zsh?
Bash je populárny na systémoch Linux aj MacOS. Je to výkonný nástroj, ktorý môžete použiť na interakciu s operačným systémom a spúšťanie príkazov. Môžete tiež použite Bash na skriptovanie shellu, ktorý automatizuje úlohy písaním skriptov obsahujúcich viac ako jeden príkaz.
Zsh (Z shell) je rozšírená verzia Bash, ktorá má oveľa viac funkcií. Je to predvolený shell v systéme MacOS. Stáva sa čoraz populárnejším aj na systémoch Linux.
Ako prejsť z Bash na Zsh
Ak používate systém Linux a chceli by ste prejsť na Zsh, začnite tým na inštaláciu pomocou správcu balíkov. Napríklad na Debiane alebo Ubuntu použite nasledujúci príkaz:
sudo apt install zsh
Po nainštalovaní do systému sa naň prepnite spustením nasledujúceho príkazu:
chsh -s $(which zsh)
Ak používate macOS, Zsh je už nainštalovaný. Ak ho chcete prepnúť, spustite nasledujúci príkaz:
chsh -s /bin/zsh
Ak chcete prepnúť späť na Bash, nahraďte Zsh vo vyššie uvedených príkazoch Bash.
Ak chcete skontrolovať, ktorý shell používate, spustite nasledujúci príkaz:
echo $SHELL
To vám pomôže potvrdiť, že používate shell, ktorý ste zamýšľali.
Rozdiely medzi Zsh a Bash
Medzi Zsh a Bash je niekoľko rozdielov. Zohľadnenie týchto rozdielov vám pomôže rozhodnúť sa, ktorá škrupina vám najlepšie vyhovuje.
1. Rýchle prispôsobenie
Zsh ponúka jednoduchší spôsob prispôsobenia vašich výziev pomocou %-založené únikové sekvencie. To umožňuje dynamické výzvy s farbou a informáciami. Ak chcete prispôsobiť výzvu shellu, definujte PS1 (Hlavná výzva).
PS1="%F{green}%n@%m %F{blue}%~ %f$ "
Vyššie uvedená vlastná výzva zobrazuje používateľské meno, názov hostiteľa a aktuálny adresár v rôznych farbách:
Je ich veľa iné spôsoby prispôsobenia výzvy Zsh, ktorá vám umožní nastaviť indikátor správcu, zahrnúť dátum a čas a uložiť novú výzvu.
Bash používa trochu iný prístup, pokiaľ ide o rýchle prispôsobenie. Používa únikové kódy na zadanie zmien farby a formátovania vo výzve. Ak chcete dosiahnuť rovnaké prispôsobenie ako Zsh vyššie, môžete použiť nasledujúcu vlastnú výzvu.
PS1="\[\033[32m\]\u@\h \[\033[34m\]\w \[\033[0m\]\$ "
Použitím \[\033[0m\] je veľmi dôležité, pretože zaisťuje, že zmeny farieb neovplyvnia text, ktorý nasleduje po výzve.
2. Podpora pre asociatívne polia
Zsh natívne podporuje asociatívne polia. Tieto polia poskytujú pohodlný spôsob spájania údajov, ktorý uľahčuje organizáciu a získavanie informácií. Použite vyhlásiť-A príkaz na explicitné deklarovanie asociatívneho poľa:
# Declare an associative array in Zsh
declare -A my_assoc_array
Potom môžete asociatívnemu poľu priradiť hodnoty:
my_assoc_array=(key1 value1 key2 value2)
A nakoniec pristupujte k hodnotám pomocou ich kľúčov:
echo $my_assoc_array[key1] # Outputs: value1
Bash zahrnul natívnu podporu pre asociatívne polia od verzie 4.0. Hodnoty deklarujete a priraďujete rovnakým spôsobom ako v Zsh. Ale pokiaľ ide o prístup k hodnotám poľa, musíte kľúč zabaliť do zložených zátvoriek:
echo "${my_assoc_array[key1]}"
Hlavným rozdielom je, že podpora Zsh pre asociatívne polia je bohatšia a pokročilejšia ako Bash. Zsh umožňuje, aby asociatívne polia mali kľúče rôznych dátových typov, nielen reťazce. Bash podporuje iba reťazcové kľúče.
V predchádzajúcich verziách Bash musíte nájsť spôsob, ako vyriešiť tento problém, alebo mať externé nástroje na používanie asociatívnych polí.
3. Rozšírené guľové vzory
Rozšírené guľové vzory poskytujú výkonný a flexibilný spôsob výberu a manipulácie so súbormi a adresármi na základe rôznych kritérií. Sú užitočné, keď pracujete so zložitými štruktúrami súborov alebo keď potrebujete presnú kontrolu nad výberom súborov.
V skripte Zsh môžete tieto vzory povoliť pomocou setopt príkaz. Napríklad, aby sa zhodovali so všetkými .TXT súbory v aktuálnom adresári:
setopt extended_glob
txt_files=(*.txt)
Ak chcete priradiť všetky súbory okrem súborov s príponou .log:
setopt extended_glob
non_log_files=^(*.log)
V Bash ich musíte povoliť pomocou nakupovať príkaz s extglob možnosť. Napríklad, aby sa zhodovali so všetkými .TXT súbory v aktuálnom adresári:
shopt -s extglob
txt_files=(*.txt)
Na priradenie všetkých súborov okrem tých s .log rozšírenie:
shopt -s extglob
non_log_files=!(*.log)
Hlavným rozdielom medzi Zsh a Bash, pokiaľ ide o globbingové vzory, je príkaz používaný na ich povolenie. Všimnite si však, že niektorí operátori sa medzi týmito dvoma shellmi líšia.
4. Rozšírené rozšírenie parametrov
Zsh podporuje nepriame rozšírenie parametrov. To vám umožňuje rozšíriť hodnotu premennej, ktorej názov je uložený v inej premennej. Aby ste to dosiahli, musíte pred názov premennej pridať výkričník !.
name="foo"
result="${!name}"
echo "$result"
Bash na druhej strane neumožňuje natívne nepriamu expanziu. Riešením tohto problému je použitie eval vstavaný príkaz alebo ${!var} syntax odkazov na nepriame premenné.
name="world"
var="name"
echo ${!var} # This will output: world
Podobnosti medzi Bash a Zsh
Aj keď existujú rozdiely medzi Bash a Zsh, zdieľajú aj niektoré podobnosti.
1. Syntax príkazového riadku
Bash a Zsh zdieľajú podobnú syntax príkazového riadku. To je skvelé, pretože to znamená, že väčšina príkazov a skriptov, ktoré napíšete, bude fungovať v oboch prostrediach bez úprav. Zsh je postavený na Bash, takže obsahuje všetky rovnaké základné príkazy a funkcie.
Existujú však veľmi malé rozdiely v syntaxi, ktoré budete musieť identifikovať a upraviť.
2. Konzistencia nahrádzania príkazov
Náhrada príkazov je proces vkladania výstupu jedného príkazu do druhého. Je konzistentný medzi oboma škrupinami.
result=$(ls)
V Bash aj Zsh môžete použiť $ (príkaz) syntax na nahradenie výstupu príkazu do premennej. To umožňuje jednoduchú prenosnosť skriptov medzi dvoma shellmi.
3. Možnosť ladenia skriptov
Používajú sa Bash aj Zsh -X príznak pre ladenie skriptov. Keď spustíte skript s týmto príznakom, pred spustením sa zobrazí každý príkaz. To vám pomôže identifikovať problémy vo vašich skriptoch.
# Debugging a script in both Bash and Zsh
#!/bin/bash -x
echo "Debugging Bash script"
V tomto skripte Bash je -X príznak umožňuje ladenie. Podobný prístup môžete použiť v Zsh; len vymeniť bash s zsh.
Úvahy o výbere medzi Zsh a Bash
- Kompatibilita a prenosnosť: Bash je predvolený shell na mnohých systémoch založených na Unixe. Vďaka tomu je bezpečnejšou voľbou pre multiplatformové skriptovanie. Ak potrebujete, aby vaše skripty bežali na širokej škále systémov bez úprav, Bash je lepšou voľbou.
- Zložitosť skriptu a pokročilé funkcie: Zsh poskytuje pokročilé funkcie, ako sú asociatívne polia, rozšírené guľové vzory a pokročilé rozšírenie parametrov. To zjednodušuje zložité skriptovacie úlohy. Ak vaše skripty vyžadujú pokročilú manipuláciu s reťazcami alebo dátové štruktúry, Zsh je lepšou voľbou.
- Ekosystém komunity a doplnkov: Bash aj Zsh majú aktívne komunity, ale Zsh má silnejšiu komunitu a rozsiahly ekosystém doplnkov a tém. Ak si ceníte prispôsobenie, živá komunita Zsh a podpora doplnkov môže byť významnou výhodou.
- Jednoduchosť učenia: Ak ste novým shell skriptovaním, Bash je prístupnejším východiskovým bodom. Pre začiatočníkov má k dispozícii rozsiahlu dokumentáciu a zdroje. To uľahčuje osvojenie si základov shell skriptovania.
Automatizácia úloh pomocou skriptov Shell
Vedieť, ako automatizovať úlohy pomocou shell skriptov, je veľmi dôležité. Môžete automatizovať opakujúce sa úlohy a ušetriť veľa času.
Tieto skripty môžete použiť aj na správu používateľských účtov, monitorovanie systémových prostriedkov, zálohovanie údajov a vykonávanie bežnej údržby. Keď sú starostlivo napísané, môžu tiež znížiť možnosť ľudskej chyby.