Обе љуске нуде моћне скриптне језике, али нису потпуно компатибилне.
Када је реч о схелл скриптовима на оперативним системима сличним Уник-у, доминирају две љуске: Басх (Боурне Агаин Схелл) и Зсх (З Схелл). Ако сте програмер или систем администратор, избор између ова два значајно утиче на вашу ефикасност и продуктивност.
Разумевање разлика и сличности између ове две љуске помоћи ће вам да оптимизујете радни ток командне линије. Познавање нијанси сваке шкољке помоћи ће вам да донесете информисане одлуке.
Шта су Басх и Зсх?
Басх је популаран и на Линук и на мацОС системима. То је моћан алат који можете користити за интеракцију са оперативним системом и покретање команди. Можете такође користите Басх за схелл скриптовање, који аутоматизује задатке писањем скрипти које садрже више од једне команде.
Зсх (З схелл) је проширена верзија Басх-а која има много више функција. То је подразумевана шкољка на мацОС-у. Такође постаје све популарнији на Линук системима.
Како прећи са Басх на Зсх
Ако користите Линук систем и желите да пређете на Зсх, почните од
користећи менаџер пакета да бисте га инсталирали. На пример, на Дебиан-у или Убунту-у користите следећу команду:sudo apt install zsh
Након што га инсталирате на свој систем, пребаците се на њега тако што ћете покренути следећу команду:
chsh -s $(which zsh)
Ако користите мацОС, Зсх је већ инсталиран. Да бисте се пребацили на њега, покрените следећу команду:
chsh -s /bin/zsh
Да бисте се вратили на Басх, замените Зсх са Басх у горњим командама.
Да бисте проверили коју љуску користите, покрените следећу команду:
echo $SHELL
Ово ће вам помоћи да потврдите да користите љуску коју сте намеравали да користите.
Разлике између Зсх и Басх
Постоји неколико разлика између Зсх и Басх. Узимање у обзир ових разлика помоћи ће вам да одлучите која вам шкољка најбоље одговара.
1. Промпт Цустомизатион
Зсх нуди лакши начин за прилагођавање ваших упита помоћу %-басед есцапе секвенце. Ово омогућава динамичке упите са бојом и информацијама. Да бисте прилагодили своју схелл промпт, дефинишите ПС1 (Примарни упит).
PS1="%F{green}%n@%m %F{blue}%~ %f$ "
Горњи прилагођени упит приказује корисничко име, име хоста и тренутни директоријум у различитим бојама:
Има их много други начини за прилагођавање Зсх одзивника, што вам омогућава да поставите индикатор администратора, укључите датум и време и сачувате нови упит.
Басх користи мало другачији приступ када је у питању брзо прилагођавање. Користи излазне кодове да одреди промене боје и форматирања у промпту. Да бисте постигли исто прилагођавање као Зсх изнад, можете користити следећи прилагођени упит.
PS1="\[\033[32m\]\u@\h \[\033[34m\]\w \[\033[0m\]\$ "
Користећи \[\033[0м\] је кључно јер осигурава да промене боје не утичу на текст који прати упит.
2. Подршка за асоцијативне низове
Зсх изворно подржава асоцијативне низове. Ови низови пружају згодан начин повезивања података који олакшава организовање и преузимање информација. Користите прогласити-А наредба за експлицитно декларисање асоцијативног низа:
# Declare an associative array in Zsh
declare -A my_assoc_array
Затим можете доделити вредности асоцијативном низу:
my_assoc_array=(key1 value1 key2 value2)
И, коначно, приступите вредностима користећи њихове кључеве:
echo $my_assoc_array[key1] # Outputs: value1
Басх је укључио изворну подршку за асоцијативне низове од верзије 4.0. Декларишете и додељујете вредности на исти начин као што бисте то урадили у Зсх. Али када је у питању приступ вредностима низа, морате да умотате кључ у витичасте заграде:
echo "${my_assoc_array[key1]}"
Главна разлика је у томе што је Зсх-ова подршка за асоцијативне низове богатија функцијама и напреднија од Басх-а. Зсх омогућава да асоцијативни низови имају кључеве различитих типова података, а не само низове. Басх подржава само стринг кључеве.
У ранијим верзијама Басх-а, морате да смислите начин за заобилажење или да имате спољне алате за коришћење асоцијативних низова.
3. Проширени обрасци глобирања
Проширени обрасци глобинга пружају моћан и флексибилан начин одабира и манипулације датотекама и директоријумима на основу различитих критеријума. Корисни су када радите са сложеним структурама датотека или када вам је потребна прецизна контрола над избором датотека.
У Зсх скрипти, можете омогућити ове обрасце користећи сетопт команда. На пример, да се подударају са свим .ткт датотеке у тренутном директоријуму:
setopt extended_glob
txt_files=(*.txt)
Да бисте ускладили све датотеке осим оних са екстензијом .лог:
setopt extended_glob
non_log_files=^(*.log)
У Басху, морате их омогућити помоћу схопт команда са ектглоб опција. На пример, да се подударају са свим .ткт датотеке у тренутном директоријуму:
shopt -s extglob
txt_files=(*.txt)
За подударање свих датотека осим оних са .Пријава проширење:
shopt -s extglob
non_log_files=!(*.log)
Главна разлика између Зсх-а и Басх-а када су у питању обрасци глобирања је команда која се користи за њихово омогућавање. Међутим, приметите да се неки оператори разликују између ове две љуске.
4. Напредно проширење параметара
Зсх подржава индиректно проширење параметара. Ово вам омогућава да проширите вредност променљиве чије је име ускладиштено у другој променљивој. Да бисте то постигли, потребно је да имену променљиве додате знак узвика !.
name="foo"
result="${!name}"
echo "$result"
Басх, са друге стране, не дозвољава индиректно проширење изворно. Заобилазно решење за ово је коришћење евал уграђену команду или ${!вар} синтакса за индиректне променљиве референце.
name="world"
var="name"
echo ${!var} # This will output: world
Сличности између Баша и Зш
Иако постоје разлике између Басх и Зсх, они такође деле неке сличности.
1. Синтакса командне линије
Басх и Зсх деле сличну синтаксу командне линије. Ово је одлично јер значи да ће већина команди и скрипти које напишете радити у било којој љусци, без модификација. Зсх је изграђен на врху Басх-а, тако да укључује све исте основне команде и функције.
Међутим, постоје веома мале разлике у синтакси које ћете морати да идентификујете и прилагодите.
2. Конзистентност замене команди
Замена команде је процес уграђивања излаза једне команде у другу. Доследан је између обе шкољке.
result=$(ls)
И у Басх иу Зсх-у можете користити $(команда) синтаксу за замену излаза команде у променљиву. Ово омогућава лак пренос скрипти између две љуске.
3. Опција за отклањање грешака скрипте
И Басх и Зсх користе -Икс заставица за отклањање грешака у скрипти. Када покренете скрипту са овом заставицом, она приказује сваку команду пре него што се покрене. Ово вам помаже да идентификујете проблеме у вашим скриптама.
# Debugging a script in both Bash and Zsh
#!/bin/bash -x
echo "Debugging Bash script"
У овој Басх скрипти, -Икс флаг омогућава отклањање грешака. Можете користити сличан приступ у Зсх; само замени басх са зсх.
Разматрања о избору између Зсх и Басх
- Компатибилност и преносивост: Басх је подразумевана љуска на многим системима заснованим на Уник-у. Ово га чини сигурнијим избором за скриптовање на више платформи. Ако вам је потребно да ваше скрипте раде на широком спектру система без модификација, Басх је боља опција.
- Сложеност скрипте и напредне функције: Зсх пружа напредне функције као што су асоцијативни низови, проширени обрасци глобирања и напредно проширење параметара. Ово поједностављује сложене задатке скриптирања. Ако ваше скрипте захтевају напредну манипулацију стринговима или структуре података, Зсх је бољи избор.
- Заједница и екосистем додатака: И Басх и Зсх имају активне заједнице, али Зсх има јачу заједницу и обиман екосистем додатака и тема. Ако цените прилагођавање, Зсх-ова жива заједница и подршка за додатке могу бити значајна предност.
- Лакоћа учења: Ако сте нови у схелл скриптовима, Басх је приступачнија полазна тачка. Има обимну документацију и ресурсе доступне почетницима. Ово олакшава учење основа схелл скриптовања.
Аутоматизација задатака помоћу схелл скрипти
Знати како да аутоматизујете задатке користећи схелл скрипте је од велике важности. Можете аутоматизовати задатке који се понављају и уштедети много времена.
Такође можете да користите ове скрипте за управљање корисничким налозима, надгледање системских ресурса, прављење резервних копија података и обављање рутинског одржавања. Када су пажљиво написани, они такође могу смањити могућност људске грешке.