Obje ljuske nude moćne skriptne jezike, ali nisu potpuno kompatibilne.

Kada je u pitanju skriptiranje ljuske na operativnim sustavima sličnim Unixu, dominiraju dvije ljuske: Bash (Bourne Again Shell) i Zsh (Z Shell). Ako ste programer ili administrator sustava, izbor između ovo dvoje značajno utječe na vašu učinkovitost i produktivnost.

Razumijevanje razlika i sličnosti između ove dvije ljuske pomoći će vam optimizirati tijek rada naredbenog retka. Poznavanje nijansi svake školjke pomoći će vam u donošenju informiranih odluka.

Što su Bash i Zsh?

Bash je popularan i na Linux i na macOS sustavima. To je moćan alat koji možete koristiti za interakciju s operativnim sustavom i pokretanje naredbi. Također možete koristite Bash za skriptiranje ljuske, koji automatizira zadatke pisanjem skripti koje sadrže više od jedne naredbe.

Zsh (Z shell) je proširena verzija Basha koja ima puno više mogućnosti. To je zadana ljuska na macOS-u. Također postaje sve popularniji na Linux sustavima.

Kako se prebaciti s Basha na Zsh

instagram viewer

Ako koristite Linux sustav i želite se prebaciti na Zsh, počnite s koristeći svoj upravitelj paketa da ga instalirate. Na primjer, na Debianu ili Ubuntuu koristite sljedeću naredbu:

sudo apt install zsh

Nakon što ga instalirate na svoj sustav, prebacite se na njega pokretanjem sljedeće naredbe:

chsh -s $(which zsh)

Ako koristite macOS, Zsh je već instaliran. Za prebacivanje na njega pokrenite sljedeću naredbu:

chsh -s /bin/zsh

Za povratak na Bash zamijenite Zsh s Bash u gornjim naredbama.

Da biste provjerili koju ljusku koristite, pokrenite sljedeću naredbu:

echo $SHELL

To će vam pomoći da potvrdite da koristite ljusku koju ste namjeravali.

Razlike između Zsh i Bash

Postoji nekoliko razlika između Zsh i Bash. Uzimanje u obzir ovih razlika pomoći će vam da odlučite koja vam školjka najbolje odgovara.

1. Brzo prilagođavanje

Zsh nudi lakši način za prilagodbu vaših upita pomoću %-temeljene sekvence bijega. To omogućuje dinamičke upite s bojom i informacijama. Da biste prilagodili odzivnik ljuske, definirajte PS1 (Primarni upit).

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

Gornji prilagođeni upit prikazuje korisničko ime, ime glavnog računala i trenutni direktorij u različitim bojama:

Ima ih mnogo druge načine za prilagodbu Zsh odzivnika, omogućujući vam da postavite indikator administratora, uključite datum i vrijeme i spremite novi upit.

Bash koristi nešto drugačiji pristup kada je u pitanju brza prilagodba. Koristi izlazne kodove za određivanje promjena boje i oblikovanja u upitu. Da biste postigli istu prilagodbu kao Zsh gore, možete koristiti sljedeći prilagođeni upit.

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

Korištenje \[\033[0m\] je ključan jer osigurava da promjene boje ne utječu na tekst koji slijedi nakon upita.

2. Podrška za asocijativne nizove

Zsh izvorno podržava asocijativne nizove. Ovi nizovi pružaju prikladan način za povezivanje podataka što olakšava organiziranje i dohvaćanje informacija. Koristiti proglasiti-A naredba za eksplicitnu deklaraciju asocijativnog niza:

# Declare an associative array in Zsh 
declare -A my_assoc_array

Zatim možete dodijeliti vrijednosti asocijativnom nizu:

my_assoc_array=(key1 value1 key2 value2) 

I, konačno, pristupite vrijednostima pomoću njihovih ključeva:

echo $my_assoc_array[key1] # Outputs: value1

Bash je uključio izvornu podršku za asocijativne nizove od verzije 4.0. Deklarišete i dodjeljujete vrijednosti na isti način kao što biste to učinili u Zsh. Ali kada je riječ o pristupu vrijednostima niza, trebate zamotati ključ unutar vitičastih zagrada:

echo "${my_assoc_array[key1]}" 

Glavna razlika je u tome što je Zshova podrška za asocijativne nizove bogatija značajkama i naprednija od Basha. Zsh omogućuje asocijativnim nizovima da imaju ključeve različitih tipova podataka, a ne samo nizove. Bash podržava samo string tipke.

U ranijim verzijama Basha morate smisliti način za zaobilaženje ili imati vanjske alate za korištenje asocijativnih nizova.

3. Prošireni uzorci globiranja

Prošireni obrasci globbinga pružaju moćan i fleksibilan način odabira i rukovanja datotekama i direktorijima na temelju različitih kriterija. Korisni su kada radite sa složenim strukturama datoteka ili kada trebate preciznu kontrolu nad odabirom datoteka.

U Zsh skripti možete omogućiti ove uzorke pomoću setopt naredba. Na primjer, uskladiti sve .txt datoteke u trenutnom direktoriju:

setopt extended_glob
txt_files=(*.txt)

Za podudaranje svih datoteka osim onih s nastavkom .log:

setopt extended_glob
non_log_files=^(*.log)

U Bashu ih trebate omogućiti pomoću shopt naredba s extglob opcija. Na primjer, uskladiti sve .txt datoteke u trenutnom direktoriju:

shopt -s extglob
txt_files=(*.txt)

Za podudaranje svih datoteka osim onih s .log proširenje:

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

Glavna razlika između Zsh-a i Bash-a kada su u pitanju globbing uzorci je naredba koja se koristi za njihovo omogućavanje. Međutim, primijetite da se neki operatori razlikuju između dvije ljuske.

4. Napredno proširenje parametara

Zsh podržava neizravno proširenje parametara. To vam omogućuje da proširite vrijednost varijable čije je ime pohranjeno u drugoj varijabli. Da biste to postigli, ispred imena varijable morate staviti uskličnik !.

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

S druge strane, Bash ne dopušta izvorno neizravno proširenje. Zaobilazno rješenje za ovo je korištenje eval ugrađena naredba ili ${!var} sintaksa za neizravne reference na varijable.

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

Sličnosti između Bash i Zsh

Iako postoje razlike između Bash-a i Zsh-a, oni također dijele neke sličnosti.

1. Sintaksa naredbenog retka

Bash i Zsh dijele sličnu sintaksu naredbenog retka. Ovo je sjajno jer znači da će većina naredbi i skripti koje napišete raditi u bilo kojoj ljusci, bez izmjena. Zsh je izgrađen na temelju Basha, tako da uključuje sve iste osnovne naredbe i značajke.

Međutim, postoje vrlo male razlike u sintaksi koje ćete morati identificirati i prilagoditi.

2. Dosljednost zamjene naredbi

Zamjena naredbi je proces ugrađivanja izlaza jedne naredbe u drugu. Konzistentan je između obje ljuske.

result=$(ls) 

I u Bashu iu Zshu možete koristiti $(naredba) sintaksu za zamjenu izlaza naredbe u varijablu. To omogućuje laku prenosivost skripti između dvije ljuske.

3. Opcija otklanjanja pogrešaka skripte

I Bash i Zsh koriste -x zastavica za otklanjanje pogrešaka skripte. Kada pokrenete skriptu s ovom zastavom, ona prikazuje svaku naredbu prije nego što se pokrene. To vam pomaže identificirati probleme u vašim skriptama.

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

echo "Debugging Bash script"

U ovoj Bash skripti, -x zastavica omogućuje otklanjanje pogrešaka. Možete koristiti sličan pristup u Zsh; samo zamijeni udarac s zsh.

Razmatranja za odabir između Zsh i Bash

  • Kompatibilnost i prenosivost: Bash je zadana ljuska na mnogim sustavima baziranim na Unixu. To ga čini sigurnijim izborom za skriptiranje na više platformi. Ako trebate svoje skripte za pokretanje na širokom rasponu sustava bez modifikacija, Bash je bolja opcija.
  • Složenost skripte i napredne značajke: Zsh pruža napredne značajke kao što su asocijativni nizovi, prošireni uzorci globbiranja i napredno proširenje parametara. To pojednostavljuje složene zadatke skriptiranja. Ako vaše skripte zahtijevaju naprednu manipulaciju nizovima ili podatkovnim strukturama, Zsh je bolji izbor.
  • Zajednica i ekosustav dodataka: I Bash i Zsh imaju aktivne zajednice, ali Zsh ima jaču zajednicu i opsežan ekosustav dodataka i tema. Ako cijenite prilagodbu, Zsh-ova živa zajednica i podrška za dodatke mogu biti značajna prednost.
  • Lakoća učenja: Ako ste novi u skriptiranju ljuske, Bash je pristupačnija početna točka. Ima opsežnu dokumentaciju i resurse dostupne početnicima. To olakšava učenje osnova skriptiranja ljuske.

Automatiziranje zadataka pomoću Shell skripti

Znati kako automatizirati zadatke pomoću shell skripti od velike je važnosti. Možete automatizirati zadatke koji se ponavljaju i uštedjeti puno vremena.

Također možete koristiti ove skripte za upravljanje korisničkim računima, nadzor resursa sustava, sigurnosno kopiranje podataka i obavljanje rutinskog održavanja. Kada su pažljivo napisani, oni također mogu smanjiti mogućnost ljudske pogreške.