Zsh vs. Bash Scripting. Mi a különbség?

Amikor Unix-szerű operációs rendszereken a shell szkriptekről van szó, két shell dominál: a Bash (Bourne Again Shell) és a Zsh (Z Shell). Ha Ön programozó vagy rendszergazda, a kettő közötti választás jelentősen befolyásolja hatékonyságát és termelékenységét.

A két shell közötti különbségek és hasonlóságok megértése segít optimalizálni a parancssori munkafolyamatot. Az egyes héjak árnyalatainak ismerete segít megalapozott döntéseket hozni.

Mi a Bash és a Zsh?

A Bash népszerű Linux és macOS rendszereken egyaránt. Ez egy hatékony eszköz, amellyel kapcsolatba léphet az operációs rendszerrel és parancsokat futtathat. Használhatja a Bash-t is a shell-szkriptekhez, amely egynél több parancsot tartalmazó szkriptek írásával automatizálja a feladatokat.

A Zsh (Z shell) a Bash kibővített változata, amely sokkal több funkcióval rendelkezik. Ez az alapértelmezett shell a macOS rendszeren. Egyre népszerűbb a Linux rendszereken is.

Hogyan válthatunk Bash-ról Zsh-ra

Ha Linux rendszert használ, és szeretne Zsh-re váltani, először a csomagkezelő használatával telepítse azt. Például Debian vagy Ubuntu rendszeren használja a következő parancsot:

 sudo apt install zsh 

Miután telepítette a rendszerére, váltson rá a következő paranccsal:

 chsh -s $(which zsh) 

Ha macOS-t használ, a Zsh már telepítve van. Az erre való váltáshoz futtassa a következő parancsot:

 chsh -s /bin/zsh 

A Bash-re való visszaváltáshoz cserélje ki a Zsh-t Bash-ra a fenti parancsokban.

A használt shell ellenőrzéséhez futtassa a következő parancsot:

 echo $SHELL 

Ez segít megbizonyosodni arról, hogy a kívánt parancsértelmezőt használja.

  Egy teljes útmutató példákkal

A Zsh és a Bash közötti különbségek

Számos különbség van a Zsh és a Bash között. Ezeknek a különbségeknek a figyelembe vétele segít eldönteni, hogy melyik héj felel meg Önnek a legjobban.

1. Gyors testreszabás

A Zsh egyszerűbb módot kínál a promptok testreszabására %-alapú escape szekvenciákkal. Ez lehetővé teszi a dinamikus promptokat színekkel és információkkal. A shell prompt testreszabásához adja meg a PS1-et (elsődleges prompt).

 PS1="%F{green}%n@%m %F{blue}%~ %f$ "

A fenti egyéni prompt különböző színekben jeleníti meg a felhasználónevet, a gazdagépnevet és az aktuális könyvtárat:

A Zsh-prompt testreszabásának számos más módja is van, így beállíthat egy rendszergazdai jelzőt, megadhatja a dátumot és az időt, és mentheti az új promptot.

A Bash kissé eltérő megközelítést alkalmaz az azonnali testreszabás terén. Escape kódokat használ a szín- és formázásmódosítások megadásához a promptban. A fenti Zsh-vel megegyező testreszabás eléréséhez használhatja a következő egyéni promptot.

 PS1="\[\033[32m\]\u@\h \[\033[34m\]\w \[\033[0m\]\$ "

\[\033[0m\] kulcsfontosságú, mivel biztosítja, hogy a színváltozások ne befolyásolják a felszólítást követő szöveget.

2. Az asszociatív tömbök támogatása

A Zsh natívan támogatja az asszociatív tömböket. Ezek a tömbök kényelmes módot biztosítanak az adatok társítására, ami megkönnyíti az információk rendszerezését és visszakeresését. Használja a deklaráció -A parancsot egy asszociatív tömb kifejezett deklarálásához:

 # Declare an associative array in Zsh 
declare -A my_assoc_array

Ezután értékeket rendelhet az asszociatív tömbhöz:

 my_assoc_array=(key1 value1 key2 value2)  

És végül érje el az értékeket a kulcsaikkal:

 echo $my_assoc_array[key1] # Outputs: value1 

A Bash a 4.0-s verzió óta tartalmazza az asszociatív tömbök natív támogatását. Ugyanúgy deklarálsz és rendelsz értékeket, mint a Zsh-ben. De amikor a tömbértékek eléréséről van szó, a kulcsot zárójelek közé kell csomagolnia:

 echo "${my_assoc_array[key1]}"  

A fő különbség az, hogy a Zsh asszociatív tömbök támogatása funkciókban gazdagabb és fejlettebb, mint a Bash. A Zsh lehetővé teszi, hogy az asszociatív tömbök különféle adattípusú kulcsokkal rendelkezzenek, nem csak karakterláncok. A Bash csak a karakterlánc-billentyűket támogatja.

  A JavaScript letiltása (és engedélyezése) a Google Chrome-ban

A Bash korábbi verzióiban ki kell találnia a kerülő megoldások módját, vagy külső eszközökkel kell rendelkeznie az asszociatív tömbök használatához.

3. Kiterjesztett gömbölyű minták

A kiterjesztett gömbölyű minták hatékony és rugalmas módot biztosítanak a fájlok és könyvtárak különféle kritériumok alapján történő kiválasztására és kezelésére. Hasznosak, ha összetett fájlstruktúrákkal dolgozik, vagy ha pontos vezérlésre van szüksége a fájlkijelölések felett.

A Zsh-szkriptben ezeket a mintákat a setopt paranccsal engedélyezheti. Például az aktuális könyvtár összes .txt fájljának megfeleltetéséhez:

 setopt extended_glob
txt_files=(*.txt)

Az összes fájl megfeleltetése, kivéve a .log kiterjesztésűeket:

 setopt extended_glob
non_log_files=^(*.log)

A Bashban engedélyeznie kell őket a shopt paranccsal az extglob opcióval. Például az aktuális könyvtár összes .txt fájljának megfeleltetéséhez:

 shopt -s extglob
txt_files=(*.txt)

Az összes fájl megfeleltetése, kivéve a .log kiterjesztésűeket:

 shopt -s extglob
non_log_files=!(*.log)

A fő különbség a Zsh és a Bash között, amikor a globbing mintákról van szó, az engedélyezésükhöz használt parancs. Figyelje meg azonban, hogy egyes operátorok eltérnek a két shell között.

4. Speciális paraméterbővítés

A Zsh támogatja a paraméterek közvetett bővítését. Ez lehetővé teszi egy olyan változó értékének kiterjesztését, amelynek neve egy másik változóban van tárolva. Ennek eléréséhez a változó nevét egy felkiáltójellel kell !

 name="foo"
result="${!name}"
echo "$result"

A Bash viszont nem teszi lehetővé a közvetett terjeszkedést natívan. Ennek megoldása az eval beépített parancs vagy a közvetett változóhivatkozások ${!var} szintaxisa.

 name="world"
var="name"
echo ${!var} # This will output: world

Hasonlóságok Bash és Zsh között

Bár vannak különbségek a Bash és a Zsh között, vannak hasonlóságok is.

1. Parancssori szintaxis

A Bash és a Zsh hasonló parancssori szintaxist használ. Ez nagyszerű, mert azt jelenti, hogy a legtöbb parancs és parancsfájl, amelyet ír, bármelyik shellben működik, módosítás nélkül. A Zsh a Bash tetejére épül, így ugyanazokat az alapvető parancsokat és funkciókat tartalmazza.

  A jelszavak/FIDO-hitelesítés megvalósítása az alkalmazásaiban [8 Solutions]

Vannak azonban nagyon apró szintaxisbeli különbségek, amelyeket azonosítania és módosítania kell.

2. Parancshelyettesítési konzisztencia

A parancshelyettesítés az egyik parancs kimenetének a másikba való beágyazásának folyamata. Konzisztens a két héj között.

 result=$(ls)  

A Bash-ban és a Zsh-ban is használhatja a $(command) szintaxist, hogy a parancs kimenetét változóval helyettesítse. Ez lehetővé teszi a szkriptek könnyű hordozhatóságát a két shell között.

3. Script hibakeresési lehetőség

A Bash és a Zsh is -x jelzőt használ a szkriptek hibakereséséhez. Ha egy parancsfájlt ezzel a jelzővel futtat, az minden parancsot megjelenít a futás előtt. Ez segít azonosítani a szkriptekben lévő hibákat.

 # Debugging a script in both Bash and Zsh
#!/bin/bash -x

echo "Debugging Bash script"

Ebben a Bash szkriptben az -x jelző lehetővé teszi a hibakeresést. Hasonló megközelítést használhat a Zsh-ban; csak cseréld ki a bash-t zsh-ra.

Szempontok a Zsh és a Bash közötti választáshoz

  • Kompatibilitás és hordozhatóság: A Bash sok Unix-alapú rendszer alapértelmezett shellje. Ez biztonságosabb választássá teszi a többplatformos szkriptekhez. Ha arra van szüksége, hogy szkriptjei sokféle rendszeren fussanak módosítás nélkül, a Bash jobb választás.
  • Szkriptek bonyolultsága és speciális szolgáltatások: A Zsh olyan fejlett funkciókat kínál, mint az asszociatív tömbök, a kiterjesztett gömbölyű minták és a fejlett paraméterbővítés. Ez leegyszerűsíti az összetett szkriptelési feladatokat. Ha a szkriptjei speciális karakterlánc-kezelést vagy adatstruktúrákat igényelnek, a Zsh jobb választás.
  • Közösségi és beépülő modulok ökoszisztémája: Mind a Bash, mind a Zsh rendelkezik aktív közösségekkel, de a Zsh erősebb közösséggel és kiterjedt beépülő modulokkal és témákkal rendelkezik. Ha értékeli a testreszabást, a Zsh élénk közössége és a bővítmények támogatása jelentős előnyt jelenthet.
  • Könnyű betanulás: Ha még nem ismeri a shell szkripteket, a Bash könnyebben elérhető kiindulópont. Kiterjedt dokumentációval és forrásokkal rendelkezik a kezdők számára. Ez megkönnyíti a shell scriptelés alapjainak elsajátítását.

Feladatok automatizálása Shell Scriptek használatával

Nagyon fontos tudni, hogyan automatizálhatók a feladatok shell-szkriptek segítségével. Automatizálhatja az ismétlődő feladatokat, és sok időt takaríthat meg.

Ezeket a parancsfájlokat felhasználói fiókok kezelésére, rendszererőforrások figyelésére, adatok biztonsági mentésére és rutin karbantartásra is használhatja. Gondosan megírva csökkenthetik az emberi hibák lehetőségét is.