Како радити са променљивим у Басху

Променљиве су од виталног значаја ако желите да пишете скрипте и разумете шта ће тај код који ћете исећи и налепити са веба учинити вашем Линук рачунару. Ми ћемо вас покренути!

Променљиве 101

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

Да бисте креирали променљиву, само наведите име и вредност за њу. Имена ваших променљивих треба да буду дескриптивна и да вас подсећају на вредност коју имају. Име променљиве не може да почиње бројем, нити може да садржи размаке. Међутим, може почети са доњом цртом. Осим тога, можете користити било коју комбинацију великих и малих алфанумеричких знакова.

Примери

Овде ћемо креирати пет варијабли. Формат је да откуцате име, знак једнакости = и вредност. Имајте на уму да нема размака пре или после знака једнакости. Давање вредности променљивој се често назива додељивањем вредности променљивој.

Направићемо четири стринг променљиве и једну нумеричку променљиву, ове_године:

me=Dave
my_boost=Linux
him=Popeye
his_boost=Spinach
this_year=2019

До види вредност држе у променљивој, користите команду ехо. Морате претходити имену променљиве знаком долара $ сваки пут када референцирате вредност која садржи, као што је приказано у наставку:

echo $my_name
echo $my_boost
echo $this_year

Тхе

Хајде да користимо све наше варијабле одједном:

echo "$my_boost is to $me as $his_boost is to $him (c) $this_year"

Тхе

Вредности променљивих замењују њихова имена. Такође можете променити вредности променљивих. Да бисте доделили нову вредност променљивој, ми_боост, само поновите оно што сте урадили када сте доделили њену прву вредност, на пример:

my_boost=Tequila

Тхе

Ако поново покренете претходну команду, сада ћете добити другачији резултат:

echo "$my_boost is to $me as $his_boost is to $him (c) $this_year"

Ехо

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

Касније ћемо причати о цитирању варијабли. За сада, ево неколико ствари које треба запамтити:

Променљива у једноструким наводницима ‘ се третира као литерални низ, а не као променљива.
Променљиве под наводницима ” се третирају као променљиве.
Да бисте добили вредност која се чува у променљивој, морате да наведете знак долара $.
Променљива без знака долара $ даје само име променљиве.

Такође можете креирати променљиву која узима своју вредност из постојеће променљиве или броја променљивих. Следећа команда дефинише нову променљиву под називом дринк_оф_тхе_Иеар и додељује јој комбиноване вредности варијабли ми_боост и тхис_иеар:

drink_of-the_Year="$my_boost $this_year"
echo drink_of_the-Year

Тхе дринк_оф-тхе_иеар=

Како користити променљиве у скриптама

Скрипте би биле потпуно затегнуте без варијабли. Променљиве обезбеђују флексибилност која чини скрипту општим, а не специфичним решењем. Да бисмо илустровали разлику, ево скрипте која броји датотеке у /дев директоријуму.

  14 најбољих софтвера за крипто порез који ће вам олакшати израчунавање и бити усклађен

Откуцајте ово у текстуалну датотеку, а затим је сачувајте као фцнт.сх (за „број датотека“):

#!/bin/bash

folder_to_count=/dev

file_count=$(ls $folder_to_count | wc -l)

echo $file_count files in $folder_to_count

Пре него што покренете скрипту, морате је учинити извршном, као што је приказано у наставку:

chmod +x fcnt.sh

Унесите следеће да бисте покренули скрипту:

./fcnt.sh

Ово штампа број датотека у /дев директоријуму. Ево како то функционише:

Дефинисана је променљива под називом фолдер_то_цоунт и подешена је да држи стринг „/дев.
Дефинисана је друга променљива, названа филе_цоунт. Ова променљива узима своју вредност из замене команде. Ово је командна фраза између заграда $( ). Имајте на уму да је знак долара $ испред прве заграде. Ова конструкција $( ) процењује команде унутар заграда, а затим враћа њихову коначну вредност. У овом примеру, та вредност је додељена променљивој филе_цоунт. Што се варијабле филе_цоунт тиче, она је прослеђена вредност коју треба држати; не занима како је вредност добијена.
Команда процењена у замени команде изводи лс листу датотека у директоријуму у променљивој фолдер_то_цоунт, која је постављена на „/дев“. Дакле, скрипта извршава команду „лс /дев.
Излаз из ове команде се преноси у команду вц. Опција -л (број линија) узрокује вц да број редова у излазу из команде лс. Пошто је свака датотека наведена у посебном реду, ово је број датотека и поддиректоријума у ​​директоријуму „/дев“. Ова вредност је додељена променљивој филе_цоунт.
Последња линија користи ехо за излаз резултата.

Али ово функционише само за директоријум „/дев“. Како можемо учинити да скрипта ради са било којим директоријумом? Потребна је само једна мала промена.

Како користити параметре командне линије у скриптама

Многе команде, као што су лс и вц, узимају параметре командне линије. Они пружају информације команди, тако да она зна шта желите да уради. Ако желите да лс ради на вашем кућном директоријуму и такође за приказ скривених датотека, можете користити следећу команду, где су тилда ~ и -а (алл) опција параметри командне линије:

ls ~ -a

Наше скрипте могу прихватити параметре командне линије. Они се помињу као $1 за први параметар, $2 као други, и тако даље, до $9 за девети параметар. (Заправо, постоји и $0, али то је резервисано да увек држи скрипту.)

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

#!/bin/bash

folder_to_count=$1

file_count=$(ls $folder_to_count | wc -l)

echo $file_count files in $folder_to_count

Овог пута, променљивој фолдер_то_цоунт је додељена вредност првог параметра командне линије, $1.

Остатак скрипте ради тачно као и раније. Уместо конкретног решења, ваша скрипта је сада општа. Можете га користити у било ком директоријуму јер није кодиран да ради само са „/дев“.

  Како да проверите снагу вашег Ви-Фи сигнала

Ево како да скрипту учините извршном:

chmod +x fcnt2.sh

Сада покушајте са неколико директоријума. Прво можете да урадите „/дев“ да бисте били сигурни да ћете добити исти резултат као раније. Откуцајте следеће:

./fnct2.sh /dev
./fnct2.sh /etc
./fnct2.sh /bin

Добијате исти резултат (207 датотека) као и раније за директоријум „/дев“. Ово је охрабрујуће и добијате резултате специфичне за директоријум за сваки од осталих параметара командне линије.

Да бисте скратили скрипту, могли бисте потпуно да се ослободите променљиве фолдер_то_цоунт и само референцирате $1 у целини, на следећи начин:

#!/bin/bash 

file_count=$(ls $1  wc -l) 

echo $file_count files in $1

Рад са посебним варијаблама

Поменули смо $0, који је увек подешен на име датотеке скрипте. Ово вам омогућава да користите скрипту да урадите ствари као што је исправно штампање њеног имена, чак и ако је преименована. Ово је корисно у ситуацијама евидентирања у којима желите да знате име процеса који је додао унос.

Следе друге посебне унапред подешене варијабле:

$#: Колико је параметара командне линије прослеђено скрипти.
[email protected]: Сви параметри командне линије прослеђени скрипти.
$?: Излазни статус последњег покретаног процеса.
$$: ИД процеса (ПИД) тренутне скрипте.
$УСЕР: Корисничко име корисника који извршава скрипту.
$ХОСТНАМЕ: Име хоста рачунара који покреће скрипту.
$СЕЦОНДС: Број секунди током којих је скрипта покренута.
$РАНДОМ: Враћа насумичан број.
$ЛИНЕНО: Враћа тренутни број реда скрипте.

Желите да их видите све у једном сценарију, зар не? Можете! Сачувајте следеће као текстуалну датотеку под називом, специал.сх:

#!/bin/bash

echo "There were $# command line parameters"
echo "They are: [email protected]"
echo "Parameter 1 is: $1"
echo "The script is called: $0"
# any old process so that we can report on the exit status
pwd
echo "pwd returned $?"
echo "This script has Process ID $$"
echo "The script was started by $USER"
echo "It is running on $HOSTNAME"
sleep 3
echo "It has been running for $SECONDS seconds"
echo "Random number: $RANDOM"
echo "This is line number $LINENO of the script"

Унесите следеће да бисте га учинили извршним:

chmod +x special.sh

Сада га можете покренути са гомилом различитих параметара командне линије, као што је приказано испод.

Променљиве окружења

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

Да бисте видели активне варијабле окружења у вашој Басх сесији, користите ову команду:

env | less

Тхе

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

Како извести променљиве

Када се скрипта покрене, она је у сопственом процесу, а променљиве које користи не могу се видети ван тог процеса. Ако желите да делите променљиву са другом скриптом коју ваша скрипта покреће, морате да извезете ту променљиву. Показаћемо вам како да то урадите са две скрипте.

  Како сакрити слацк прегледе порука на закључаном екрану

Прво сачувајте следеће са именом датотеке сцрипт_оне.сх:

#!/bin/bash

first_var=alpha
second_var=bravo

# check their values
echo "$0: first_var=$first_var, second_var=$second_var"

export first_var
export second_var

./script_two.sh

# check their values again
echo "$0: first_var=$first_var, second_var=$second_var"

Ово ствара две променљиве, фирст_вар и сецонд_вар, и додељује неке вредности. Штампа их у прозор терминала, извози променљиве и позива сцрипт_тво.сх. Када се сцрипт_тво.сх заврши и ток процеса се врати овој скрипти, он поново штампа променљиве у прозор терминала. Затим, можете видети да ли су се променили.

Друга скрипта коју ћемо користити је сцрипт_тво.сх. Ово је скрипта коју сцрипт_оне.схцаллс. Откуцајте следеће:

#!/bin/bash

# check their values
echo "$0: first_var=$first_var, second_var=$second_var"

# set new values
first_var=charlie
second_var=delta

# check their values again
echo "$0: first_var=$first_var, second_var=$second_var"

Ова друга скрипта штампа вредности две променљиве, додељује им нове вредности, а затим их поново штампа.

Да бисте покренули ове скрипте, морате да откуцате следеће да бисте их учинили извршним:

chmod +x script_one.sh
chmod +x script_two.sh

А сада унесите следеће да бисте покренули сцрипт_оне.сх:

./script_one.sh

Ево шта нам излаз говори:

сцрипт_оне.сх штампа вредности променљивих, а то су алфа и браво.
сцрипт_тво.сх штампа вредности променљивих (алфа и браво) онако како их је примио.
сцрипт_тво.сх их мења у цхарлие и делта.
сцрипт_оне.сх штампа вредности променљивих, које су и даље алфа и браво.

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

Како цитирати променљиве

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

Ако вредност коју додељујете променљивој укључује размаке, они морају бити под наводницима када их додељујете променљивој. То је зато што Басх подразумевано користи размак као граничник.

Ево примера:

site_name=How-To Geek

Басх види размак испред „Геек“ као индикацију да почиње нова команда. Саопштава да не постоји таква команда и напушта линију. ехо нам показује да променљива сите_наме не садржи ништа — чак ни текст „Како да“.

Покушајте то поново са наводницима око вредности, као што је приказано у наставку:

site_name="How-To Geek"

сите_наме=

Овај пут је препозната као једна вредност и исправно додељена променљивој сите_наме.

ецхо је твој пријатељ

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

Пре него што притиснете Ентер и извршите линију Басх команди, покушајте са ехоом испред њега. На овај начин можете бити сигурни да је оно што ће се догодити оно што желите. Такође можете ухватити све грешке које сте можда направили у синтакси.