Како се користе проширења $ () и $ {} у Схелл скрипти

How Use Expansions Shell Script



Ако користите Линук систем, можда већ знате колико је интерфејс љуске кључан за интеракцију са вашим системом. На већини дистрибуција Линука, Басх је подразумевана љуска коју користимо за покретање наредби и извршавање скрипти. Скрипта љуске је скуп команди које се, када се извршавају, користе за извршавање неких корисних функција на Линуку. Ова .сх датотека, коју је написао корисник, садржи све команде које се користе за извршавање задатка тако да не морамо те команде покретати ручно, једну по једну.

У овом водичу ћемо објаснити два најкориснија басх проширења која се користе у схелл скриптама:







  • $ () - замена команде
  • $ {} - замена параметра/проширење променљиве

Проширење у Схелл -у се врши на скрипти након што се подели на жетоне. Токен је низ знакова које љуска сматра једном јединицом. То може бити или реч или оператор.



Покренули смо све примере и скрипте поменуте у овом чланку на систему Дебиан 10 Бустер. Међутим, можете их лако реплицирати на већини Линук љуски. За овај водич користимо подразумевану Дебиан командну линију, Терминал. На Дебиану можете приступити преко траке за претраживање Покретача апликација на следећи начин:







Да бисте приступили покретачу апликација, једноставно притисните тастер Супер/Виндовс на тастатури.

Замена команде $ ()

Према званичном ГНУ Басх референтном приручнику:



Замена команде омогућава излаз наредбе да замени саму команду. Басх врши проширење извршавањем наредбе и заменом замене команде стандардним излазом наредбе, са брисањем свих нових редова. Уграђени нови редови се не бришу, али се могу уклонити током раздвајања речи. Замена команде се јавља када је команда затворена на следећи начин:

$(команда)
или
``команда``

На пример, следеће наредбе ецхо замењују излаз наредбе дате као њихов улаз:

$Избацио$(датум)
$Избацио'датум'

Такође можете користити замену команде за додељивање вредности променљивој. На пример, данашњи датум ћемо одштампати кроз променљиву ТОДАИ на следећи начин:

$ДАНАС= $(датум)
$Избацио '$ ДАНАС'

Још један услужни програм замене команде је у петљама љуске за добијање уноса. Овде ћемо покушати да одштампамо све .ткт датотеке у нашој матичној фасцикли користећи замену команде:

зафу /кућа/теби/ *.ткт
урадити
Избацио '$ ф'
Готово

Коришћење замене команде у љускастом скрипту

Горе наведени примери су неколико начина на које можете искористити моћ замене команде у скрипти љуске. Ево узорка извештаја о статусу који можемо одштампати помоћу следеће скрипте љуске:

#!/бин/сх

Избацио ***Извештај о статусу***

ДАНАС= $(датум)
Избацио 'Данас је$ ДАНАС'

КОРИСНИЦИ= $(СЗО | Тоалет-тхе)
Избацио 'УС УСЕРСкорисници су тренутно пријављени '

УПТИМЕ= $(датум;продужено време)
Избацио 'Продужетак је$ УПТИМЕ'

Замена команде је три пута коришћена у овом писму; при штампању датума, пријављеним корисницима и непрекидном раду. Скрипту смо сачували на следећи начин:

Направио је извршну датотеку, а затим је покренуо кроз следећу команду:

$цхмод+ к статус.сх
$./статис.сх

Ево резултата наше скрипте статус.сх:

Наравно, можете створити смисленије скрипте следећи примере које смо управо поменули.

$ {} Замена/проширење параметара

Параметар, у басху, је ентитет који се користи за складиштење вредности. Параметар се може референцирати бројем, именом или посебним симболом. Када се параметар позива бројем, назива се а позициони параметар . Када се параметар позива именом, он се назива а променљива . Када се параметар позива посебним симболом, то значи да су параметри за аутоматско постављање са посебном употребом.

Проширење/замена параметара је процес преузимања вредности из референцираног ентитета/параметра. То је као да проширујете променљиву да бисте дохватили њену вредност.

Најједноставнија могућа синтакса проширења параметара је следећа:

Ево како можете да користите проширење параметара у Басх -у:

$ {параметер}

На пример, најједноставнија употреба је замена параметра његовом вредношћу:

$име='Н.Н. лице'
$Избацио $ {наме}

Ова команда ће заменити вредност имена променљиве коју ће користити наредба ецхо:

Можда мислите да се исто може постићи избегавањем коврчавих заграда на следећи начин:

Одговор је да током проширења параметара ове увијене заграде помажу у разграничавању имена променљиве. Објаснимо шта подразумевамо под ограничењем овде. Дозволите ми да покренем следећу команду на свом систему:

$Избацио 'Име особе је$ наме_'

Резултат није одштампао вредност имена променљиве јер је систем помислио да мислим на променљиву наме_. Дакле, име моје променљиве није било ограничено. Витичасте заграде у следећем примеру ће разграничити назив променљиве и вратити резултате на следећи начин:

$Избацио 'Име особе је$ {наме}_ '

Ево свих начина на које се променљиве замењују у Схелл -у:

$ {вариабле} Ова команда замењује вредност променљиве.
$ {променљива: -ворд} Ако је променљива нула или ако није подешена, реч се замењује променљивом. Вредност променљиве се не мења.
$ {променљива: = реч} Ако је променљива нулл или ако није подешена, вредност променљиве се поставља на ворд.
$ {променљива:? порука} Ако је променљива нулл или ако није подешена, порука се штампа на стандардну басх грешку.
$ {променљива:+реч} Ако променљива је постављено, реч је замењена променљивом. Међутим, вредност саме променљиве се не мења.

Горе наведени примери су неколико начина на које можете искористити моћ замене променљивих у Басху. Ове начине можете укључити у проширење у своје љуске скрипте за оптимално постизање вашег тренутног задатка.