Как да използвате разширения $ () и $ {} в скрипт на обвивка

How Use Expansions Shell Script



Ако използвате Linux система, може би вече знаете колко решаващ е интерфейсът на черупката за взаимодействие с вашата система. В повечето дистрибуции на Linux Bash е обвивката по подразбиране, която използваме за изпълнение на команди и изпълнение на скриптове. Скриптът на обвивката е набор от команди, които при изпълнение се използват за изпълнение на някои полезни функции в Linux. Този .sh файл, написан от потребител, съдържа всички команди, използвани за изпълнение на задача, така че не е нужно да изпълняваме тези команди ръчно, една по една.

В този урок ще обясним две от най -полезните разширения на bash, използвани в скриптове на обвивката:







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

Разширяването в Shell се извършва върху скрипта, след като е разделен на символи. Жетонът е поредица от знаци, считана за единица от черупката. Тя може да бъде или дума, или оператор.



Изпълнихме всички примери и скриптове, споменати в тази статия, на система Debian 10 Buster. Можете обаче лесно да ги копирате в повечето черупки на Linux. За този урок използваме командния ред по подразбиране на Debian, терминалът. В Debian можете да получите достъп до него чрез лентата за търсене на програмата за стартиране на приложения, както следва:







За достъп до стартера на приложения, просто натиснете клавиша Super/Windows на клавиатурата си.

Замяна на командата $ ()

Според официалното ръководство за GNU Bash:



Заместването на команда позволява изхода на команда да замени самата команда. Bash извършва разширяването, като изпълнява командата и замества заместването на командата със стандартния изход на командата, като всички последващи нови редове се изтриват. Вградените нови редове не се изтриват, но могат да бъдат премахнати по време на разделянето на думи. Заместването на команда се случва, когато дадена команда е затворена, както следва:

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

Например следните команди за ехо заместват изхода на командата date като техен вход:

$изхвърлен$(дата)
$изхвърлен'дата'

Можете също да използвате подмяна на команда, за да присвоите стойност на променлива. Например, ние ще отпечатаме днешната дата чрез променливата ДНЕС, както следва:

$ДНЕС= $(дата)
$изхвърлен '$ ДНЕС'

Друга помощна програма за подмяна на командите е в контурите на обвивката за получаване на вход. Тук ще се опитаме да отпечатаме всички .txt файлове в нашата домашна папка, като използваме подмяна на команди:

заев /У дома/за теб/ *.текст
направете
изхвърлен '$ f'
Свършен

Използване на заместване на команда в скрипт на обвивка

Горните примери са няколко начина, по които можете да използвате силата на подмяна на команди във вашия скрипт на обвивката. Ето примерен отчет за състоянието, който можем да отпечатаме, използвайки следния скрипт на обвивката:

#!/bin/sh

изхвърлен ***Отчет за състоянието***

ДНЕС= $(дата)
изхвърлен 'Днес е$ ДНЕС'

ПОТРЕБИТЕЛИ= $(Кой | тоалетна-на)
изхвърлен 'US ПОТРЕБИТЕЛИпотребителите в момента са влезли '

НАСТОЯЩО ВРЕМЕ= $(дата;време на работа)
изхвърлен „Времето за работа е$ UPTIME'

Заместването на команди е използвано три пъти в този скрипт; при отпечатване на датата, влезли потребители и ъптайм. Запазихме скрипта, както следва:

Направи го изпълним и след това го изпълни чрез следната команда:

$chmod+ x status.sh
$./statys.sh

Ето изхода на нашия скрипт status.sh:

Разбира се, можете да създадете по -смислени скриптове, като следвате примерите, които току -що споменахме.

$ {} Замяна/разширяване на параметър

Параметърът в Bash е обект, който се използва за съхраняване на стойности. Параметърът може да бъде посочен с число, име или със специален символ. Когато даден параметър е посочен с число, той се нарича a позиционен параметър . Когато даден параметър е посочен с име, той се нарича a променлива . Когато даден параметър е посочен със специален символ, това означава, че те са параметри за автоматично задаване със специални приложения.

Разширяване/заместване на параметри е процесът на извличане на стойността от референтния обект/параметър. Сякаш разширявате променлива, за да извлечете нейната стойност.

Най -простият възможен синтаксис за разширяване на параметрите е следният:

Ето как можете да използвате разширението на параметрите в Bash:

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

Например, най -простата употреба е да замените параметъра с неговата стойност:

$име='Джон Доу'
$изхвърлен $ {name}

Тази команда ще замени стойността на името на променливата, която да се използва от командата echo:

Може би си мислите, че същото може да се постигне, като се избягват къдравите скоби, както следва:

Отговорът е, че по време на разширяването на параметрите тези къдрави скоби помагат при разграничаването на името на променливата. Нека обясним какво имаме предвид, като се ограничаваме тук. Позволете ми да изпълня следната команда в моята система:

$изхвърлен „Името на човека е$ name_'

Резултатът не отпечата стойността на името на променливата, тъй като системата смяташе, че имам предвид променливата name_. По този начин името на променливата ми не беше ограничено. Къдравите скоби в следния пример ще ограничат името на променливата и ще върнат резултатите, както следва:

$изхвърлен „Името на човека е$ {name}_ '

Ето всички начини, по които променливите се заменят в Shell:

$ {променлива} Тази команда замества стойността на променливата.
$ {променлива: -word} Ако променлива е нулева или ако не е зададена, думата се заменя с променлива. Стойността на променливата не се променя.
$ {променлива: = дума} Ако променливата е нулева или ако не е зададена, стойността на променливата се задава на word.
$ {променлива:? съобщение} Ако променлива е нулева или ако не е зададена, съобщението се отпечатва към стандартната грешка при bash.
$ {променлива:+дума} Ако променлива е зададен, дума се заменя с променлива. Стойността на самата променлива обаче не се променя.

Горните примери са няколко начина, по които можете да използвате силата на променливото заместване в Bash. Можете да включите тези начини за използване на разширение във вашите скриптове на обвивката, за да постигнете оптимално задачата си.