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.
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.