Како радити са променљивим у Басх-у
Варијабле су од виталног значаја ако желите да напишете скрипте и разумете шта ће тај код који ћете изрезати и залепити са Веба учинити на вашем Линук рачунару. Почећемо!
Варијабле 101
Променљиве су именовани симболи који представљају низ или нумеричку вредност. Када их користите у наредбама и изразима, они се третирају као да сте уписали вредност коју држе уместо имена променљиве.
Да бисте креирали променљиву, само наводите име и вредност за њу. Имена ваших променљивих треба да буду описна и подсећају на вредност коју имају. Име променљиве не може започети бројем, нити може садржавати размаке. Међутим, може почети са доњим цртама. Осим тога, можете користити било коју комбинацију великих и малих алфанумеричких знакова.
Примери
Овде ћемо направити пет променљивих. Формат је да укуцате име, знак једнакости =
, и вредност. Имајте на уму да нема размака пре или после знака једнакости. Давање променљиве вредности често се назива додељивање вредност променљиве.
Направићемо четири променљиве низа и једну нумеричку променљиву,Ове године:
ја = Даве
ми_боост = Линук
него = Попај
хис_боост = Спанаћ
ове_године = 2019
Да бисте видели вредност која се чува у променљивој, користите одјек
команда. Морате испред имена променљиве имати знак долара $
кад год се позивате на вредност коју она садржи, као што је приказано доле:
ецхо $ ми_наме
ецхо $ ми_боост
ецхо $ тхис_иеар
Користимо све наше променљиве одједном:
ецхо "$ ми_боост је за мене као $ хис_боост за њега (ц) $ тхис_иеар"
Вредности променљивих замењују њихова имена. Такође можете променити вредности променљивих. Да бисте променљивој доделили нову вредност,ми_боост
, само понављате оно што сте радили када сте му доделили прву вредност, и то тако:
ми_боост = Текила
Ако поново покренете претходну команду, сада ћете добити другачији резултат:
ецхо "$ ми_боост је за мене, као $ хис_боост је за њега (ц) $ тхис_иеар"
Дакле, можете користити исту наредбу која упућује на исте променљиве и добити различите резултате ако промените вредности садржане у променљивим.
О цитирању променљивих говорићемо касније. За сада ево неколико ствари које треба запамтити:
- Променљива у појединачним наводницима
'
третира се као дословни низ, а не као променљива. - Променљиве под наводницима
"
третирају се као променљиве. - Да бисте добили вредност која се држи у променљивој, морате да наведете знак долара
$
. - Променљива без знака долара
$
пружа само име променљиве.
Такође можете креирати променљиву која узима вредност из постојеће променљиве или броја променљивих. Следећа наредба дефинише нову променљиву која се зове пиће_године,
и додељује му комбиноване вредности ми_боост
и Ове године
Променљиве:
дринк_оф-тхе_Иеар = "$ ми_боост $ тхис_иеар"
ецхо дринк_оф_тхе-Иеар
Како се користе променљиве у скриптама
Скрипте би биле потпуно сметнуте без променљивих. Варијабле пружају флексибилност која скрипту чини општим, а не одређеним решењем. Да бисмо илустровали разлику, ево скрипте која броји датотеке у / дев
именик.
Унесите ово у текстуалну датотеку, а затим је сачувајте као фцнт.сх
(за „број датотека“):
#! / бин / басх фолдер_то_цоунт = / дев филе_цоунт = $ (лс $ фолдер_то_цоунт | вц -л) ецхо $ филе_цоунт филес ин $ фолдер_то_цоунт
Пре него што покренете скрипту, морате је учинити извршном, као што је приказано доле:
цхмод + к фцнт.сх
Унесите следеће да бисте покренули скрипту:
./фцнт.сх
Овим се исписује број датотека у / дев
именик. Ево како то функционише:
- Променљива се зове
фолдер_то_цоунт
је дефинисано и постављено је да садржи низ „/ дев.“ - Друга променљива, тзв
филе_цоунт
, је дефинисан. Ова променљива узима своју вредност из замене наредбе. Ово је наредбена фраза између заграда$( )
. Имајте на уму да постоји знак долара$
пре прве заграде. Ова конструкција$( )
процењује наредбе у заградама, а затим враћа њихову коначну вредност. У овом примеру је та вредност додељенафиле_цоунт
променљива. Што се тичефиле_цоунт
променљива је у питању, прослеђена је вредност коју треба задржати; не бави се начином на који је добијена вредност. - Наредба процењена у замени команде изводи
лс
списак датотека у директоријуму уфолдер_то_цоунт
променљива, која је постављена на „/ дев.“ Дакле, скрипта извршава наредбу „лс / дев.“ - Излаз из ове наредбе прелази у
Тоалет
команда. Тхе-л
Узрок (опција броја бројева)Тоалет
за бројање броја редова у излазу излс
команда. Како је свака датотека наведена у посебном реду, ово је број датотека и поддиректоријума у директоријуму „/ дев“. Ова вредност је додељенафиле_цоунт
променљива. - Завршни ред користи ехо за излаз резултата.
Али ово ради само за директоријум „/ дев“. Како можемо учинити да скрипта ради са било којим директоријумом? Потребна је само једна мала промена.
Како се користе параметри наредбеног ретка у скриптама
Многе команде, као нпр лс
и Тоалет
, узмите параметре командне линије. Они пружају информације команди, тако да она зна шта желите да уради. Ако желишлс
да бисте радили на свом кућном директоријуму и такође приказивали скривене датотеке, можете користити следећу команду, где је тилда ~
и -а
Опција (све) су параметри командне линије:
лс ~ -а
Наше скрипте могу прихватити параметре наредбеног ретка. Они су наведени као $1
за први параметар, $2
као други, и тако даље, до $9
за девети параметар. (Заправо, постоји $0
, такође, али то је резервисано да увек држи скрипту.)
У скрипти се можете позивати на параметре наредбеног ретка баш као и на уобичајене променљиве. Изменимо нашу скрипту, као што је приказано доле, и сачувајмо је под новим именомфцнт2.сх
:
#! / бин / басх фолдер_то_цоунт = $ 1 филе_цоунт = $ (лс $ фолдер_то_цоунт | вц -л) ецхо $ филе_цоунт филес ин $ фолдер_то_цоунт
Овај пут, фолдер_то_цоунт
променљивој се додељује вредност првог параметра командне линије, $1
.
Остатак скрипте ради тачно као и пре. Уместо специфичног решења, ваша скрипта је сада општа. Можете га користити у било ком директоријуму, јер није тешко кодирати рад само са „/ дев“.
Ево како скрипту можете извршити:
цхмод + к фцнт2.сх
Покушајте са неколико директоријума. Прво можете да урадите „/ дев“ да бисте били сигурни да ћете добити исти резултат као и пре. Откуцајте следеће:
./фнцт2.сх / дев
./фнцт2.сх / итд
./фнцт2.сх / бин
Добићете исти резултат (207 датотека) као и раније за директоријум „/ дев“. Ово је охрабрујуће и добијате резултате специфичне за директоријум за сваки други параметар командне линије.
Да бисте скратили скрипту, можете се одрећи променљиве,фолдер_то_цоунт
, уопште, и само референца $1
кроз све, како следи:
#! / бин / басх филе_цоунт = $ (лс $ 1 вц -л) ецхо $ филе_цоунт филес ин $ 1
Рад са специјалним променљивим
Поменули смо $0
, који је увек постављен на име датотеке скрипте. То вам омогућава да користите скрипту за исправно штампање имена, чак и ако је преименована. Ово је корисно у ситуацијама евидентирања, у којима желите да знате име процеса који је додао унос.
Следе остале посебне унапред подешене променљиве:
- $#: Колико параметара командне линије је прослеђено скрипти.
- $@: Сви параметри командне линије прослеђени скрипти.
- $?: Излазни статус последњег покренутог процеса.
- $$: ИД процеса (ПИД) тренутне скрипте.
- $ УСЕР: Корисничко име корисника који извршава скрипту.
- $ ХОСТНАМЕ: Име хоста рачунара који изводи скрипту.
- $ СЕЦОНДС: Број секунди у којима је скрипта покренута.
- $ СЛУЧАЈНО: Враћа случајан број.
- $ ЛИНЕНО: Враћа тренутни број реда скрипте.
Све их желите видети у једном сценарију, зар не? Можете! Спремите следеће као текстуалну датотеку под називом,посебно.ш
:
#! / бин / басх ецхо "Постојали су $ # параметри командне линије" ецхо "Они су: $ @" ецхо "Параметар 1 је: $ 1" ецхо "Скрипта се зове: $ 0" # било који стари процес да бисмо могли да пријавимо на статусу изласка пвд ехо "пвд вратио $?" ецхо "Ова скрипта има ИД процеса $$" ецхо "Скрипту је покренуо $ УСЕР" ецхо "Изводи се на $ ХОСТНАМЕ" слееп 3 ецхо "Ради већ $ СЕЦОНДС секунде" ецхо "Случајан број: $ РАНДОМ" ецхо "Ово је редни број $ ЛИНЕНО скрипте"
Откуцајте следеће да бисте га учинили извршним:
цхмод + к специјал.ш
Сада га можете покренути са гомилом различитих параметара командне линије, као што је приказано доле.
Променљиве околине
Басх користи променљиве окружења за дефинисање и бележење својстава окружења које ствара приликом покретања. Они садрже информације о којима Басх може лако да приступи, попут вашег корисничког имена, локалитета, броја наредби које ваша датотека историје може да садржи, вашег подразумеваног уређивача и још много тога.
Користите ову команду да бисте видели активне променљиве окружења у својој Басх сесији:
енв | мање
Ако се крећете кроз листу, можда ћете пронаћи неке од њих које би било корисно навести у вашим скриптама.
Како извести променљиве
Када се скрипта покрене, она је у свом процесу и променљиве које користи не могу се видети изван тог процеса. Ако желите да променљиву делите са другом скриптом коју ваша скрипта покреће, морате је извести. Показаћемо вам како се то ради са две скрипте.
Прво сачувајте следеће са именом датотекесцрипт_оне.сх
:
#! / бин / басх фирст_вар = алпха сецонд_вар = браво # проверите њихове вредности ехо "$ 0: фирст_вар = $ фирст_вар, сецонд_вар = $ сецонд_вар" екпорт фирст_вар екпорт сецонд_вар ./сцрипт_тво.сх # поново проверите њихове вредности ецхо "$ 0: фирст_вар = $ први_вар, други_вар = $ други_вар "
Ово ствара две променљиве, фирст_вар
и сецонд_вар
, и додељује неке вредности. Исписује их у прозор терминала, извози променљиве и позива сцрипт_тво.сх
. Када сцрипт_тво.сх
завршава и ток процеса се враћа у ову скрипту, она поново исписује променљиве у прозор терминала. Тада можете да видите да ли су се променили.
Друга скрипта коју ћемо користити је сцрипт_тво.сх
. Ово је скрипта којасцрипт_оне.сх
позива. Откуцајте следеће:
#! / бин / басх # провери њихове вредности ехо "$ 0: фирст_вар = $ фирст_вар, сецонд_вар = $ сецонд_вар" # постави нове вредности фирст_вар = цхарлие сецонд_вар = делта # провери њихове вредности поново ецхо "$ 0: фирст_вар = $ фирст_вар, сецонд_вар = $ сецонд_вар "
Ова друга скрипта исписује вредности две променљиве, додељује им нове вредности, а затим их поново исписује.
Да бисте покренули ове скрипте, морате откуцати следеће да бисте их учинили извршним:
цхмод + к сцрипт_оне.сх цхмод + к сцрипт_тво.сх
А сада откуцајте следеће за покретање сцрипт_оне.сх
:
./сцрипт_оне.сх
Ово нам говори излаз:
- сцрипт_оне.сх исписује вредности променљивих, а то су алфа и браво.
- сцрипт_тво.сх исписује вредности променљивих (алфа и браво) онако како их је примила.
- сцрипт_тво.сх мења их у чарлија и делту.
- сцрипт_оне.сх исписује вредности променљивих, које су и даље алфа и браво.
Оно што се деси у другој скрипти, остаје у другој скрипти. То је као да се копије променљивих шаљу у другу скрипту, али се одбацују када та скрипта изађе. Изворне променљиве у првој скрипти не мењају ништа што се дешава са њиховим копијама у другој.
Како цитирати променљиве
Можда сте приметили да су скрипте када референцирају променљиве у наводницима "
. Ово омогућава исправно позивање на променљиве, па се њихове вредности користе када се линија извршава у скрипти.
Ако вредност коју доделите променљивој укључује размаке, они морају бити под наводницима када их доделите променљивој. То је зато што Басх подразумевано користи размак као разграничник.
Ево примера:
сите_наме = Геек за упутства
Басх види простор испред „Геек“ као показатељ да нова команда започиње. Извештава да не постоји таква команда и напушта линију. одјек
показује нам да Назив сајт
променљива не садржи ништа - чак ни текст „Како да“.
Покушајте поново са наводницима око вредности, као што је приказано доле:
сите_наме = "Геек"
Овај пут је препозната као појединачна вредност и правилно додељена Назив сајт
променљива.
ехо је твој пријатељ
Може бити потребно неко време да се навикнете на заповедну замену, цитирање променљивих и памћење када треба укључити знак долара.
Пре него што притиснете Ентер и извршите линију Басх наредби, покушајте са одјек
испред ње. На овај начин можете бити сигурни да ће оно што ће се догодити бити оно што желите. Такође можете ухватити све грешке које сте можда направили у синтакси.