Mindkét shell erőteljes szkriptnyelveket kínál, de nem teljesen kompatibilisek.

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 interakcióba léphet az operációs rendszerrel és parancsokat futtathat. Te is használja a Bash-t 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.

instagram viewer

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

Ha Linux rendszert használ, és szeretne Zsh-re váltani, kezdje ezzel telepítéséhez használja a csomagkezelőt. 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.

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ák. Ez lehetővé teszi a dinamikus promptokat színekkel és információkkal. A shell prompt testreszabásához adja meg a PS1 (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:

Sokan vannak a Zsh prompt testreszabásának egyéb módjai, amellyel beállíthat egy adminisztrátori 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\]\$ "

Használata \[\033[0p\] 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álat kijelent-A parancs 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 beépítette az asszociatív tömbök natív támogatását 4.0 verzió óta. 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 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.

Egy Zsh-szkriptben engedélyezheti ezeket a mintákat a setopt parancs. Például, hogy megfeleljen az összesnek .txt fájlok az aktuális könyvtárban:

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 Bash-ban engedélyeznie kell őket a shopt parancsot a extglob választási lehetőség. Például, hogy megfeleljen az összesnek .txt fájlok az aktuális könyvtárban:

shopt -s extglob
txt_files=(*.txt)

Az összes fájl megfeleltetéséhez, kivéve azokat, amelyekhez .log kiterjesztés:

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 felkiáltójellel kell előtagolni !.

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

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

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.

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) 

Bash-ban és Zsh-ban is használhatja a $(parancs) szintaxis, 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

Bash és Zsh is használható -x zászló a szkript 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 a -x flag lehetővé teszi a hibakeresést. Hasonló megközelítést használhat a Zsh-ban; csak cseréld ki bash val vel zsh.

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

  • Kompatibilitás és hordozhatóság: A Bash az alapértelmezett shell sok Unix-alapú rendszeren. 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: A Bash-nak és a Zsh-nek is vannak aktív közösségei, de a Zsh-nek erősebb közössége és kiterjedt pluginek és témák ökoszisztémája van. 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ű tanulá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.