Примјер ако-онда-другачије

Bash If Then Else Example



У овој лекцији ћемо видети како можемо да користимо наредбе Иф-Тхен-Елсе у скриптама Басх окружења које пишемо. Наредбе Иф-Тхен-Елсе су користан алат за пружање начина за дефинисање путање деловања скрипте када су испуњени неки услови. Хајде да видимо која је синтакса за наредбе Иф-Тхен-Елсе:

акоНЕКЕ ЗАПОВЕСТИ;
ондаОНДА-КОМАНДЕ;
елсеДРУГЕ-КОМАНДЕ;
бити

У горњој приказаној команди, ако се утврди да су СОМЕ-ЦОММАНДС тачне или је враћен статус 0, ТХЕН-ЦОММАНДС ће се извршити. Ако то није случај, извршавају се ЕЛСЕ-ЦОММАНДС. У СОМЕ-ЦОММАНДС обично радимо неко поређење низа или поређење вредности у облику целих бројева. Такође можемо да радимо много операција које укључују датотеке. Погледајмо неке примере примарних команди које се углавном користе при раду са условима заснованим на датотекама:







Примарни Значење
[ -до ] Враћа труе када ФИЛЕ постоји.
[-б] Враћа вредност труе када ФИЛЕ постоји & је посебна датотека за блок.
[-ц] Враћа труе када ФИЛЕ постоји & је посебна датотека са знаковима.
[-д] Враћа труе када ФИЛЕ постоји & је директоријум.
[ -И ] Враћа труе када ФИЛЕ постоји.
[-ф] Враћа вредност труе ако ФИЛЕ постоји & је обична датотека.
[-г] Враћа труе када ФИЛЕ постоји и ако је постављен њен СГИД бит.
[-х] Враћа вредност труе ако ФИЛЕ постоји & је симболична веза.
[-к] Враћа труе када ФИЛЕ постоји и ако је постављен њен лепљиви бит.
[-п] Враћа вредност труе ако ФИЛЕ постоји & је именована цев (ФИФО).
[-р] Враћа труе када ФИЛЕ постоји и може се читати.
[-с] Враћа труе када ФИЛЕ постоји и има величину већу од нуле.
[-т] Враћа труе када је дескриптор датотеке ФД отворен и односи се на терминал.
[-у] Враћа труе када ФИЛЕ постоји и ако је постављен његов СУИД (сет усер ИД) бит.
[-ин] Враћа вредност труе ако ФИЛЕ постоји и на које је могуће писати.
[-Икс] Враћа труе када ФИЛЕ постоји и може да се изврши.
[-О] Враћа вредност труе ако ФИЛЕ постоји и поседује ефективни кориснички ИД.
[-Г] Враћа вредност труе ако ФИЛЕ постоји и у власништву је ефективног ИД -а групе.
[-ТХЕ] Враћа вредност труе ако ФИЛЕ постоји & је симболична веза.
[-Н] Враћа вредност труе када ФИЛЕ постоји & је измењена од последњег читања.
[-С] Враћа труе када ФИЛЕ постоји & је утичница.

ТХЕН-ЦОММАНДС и ЕЛСЕ-ЦОММАНДС могу бити било које важеће УНИКС операције или било који извршни програм. Имајте на уму да је онда и бити команде су одвојене тачком и зарезом јер се сматрају потпуно одвојеним елементима скрипте.



Примјер ако-онда-иначе Једноставан

Почнимо нашу лекцију врло једноставним примером са исказима Иф-Тхен-Елсе.
Ево примера програма:



Ако Пример

Ако Пример





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

$. ифелсе1.сх
Вредности су исте!
$

Коришћење аргумената командне линије

Такође можемо користити аргументе командне линије у нашим скриптама и користити број аргумената и саме вредности као услов у ИФ налогу који дефинишемо. Прво дефинишемо текстуалну датотеку са следећим садржајем:



Моје име је ЛинукХинт. Волим сервере, посебно Убунту. Тако су
крајњи!

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

Избацио „Проналажење 1 УСД у 2 УСД“
дршка 1 УСД 2 УСД
ако [ $? -рођен 0 ]
онда
Избацио '$ 1 није пронађен у датотеци $ 2.'
елсе
Избацио '$ 1 је пронађено у датотеци $ 2.'
бити
Избацио 'Скрипта завршена.'

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

. ифелсе2.сх лове хелло.ткт

Видећемо излаз попут:

Проналажење љубавиухелло.ткт
љубав пронађенау филехелло.ткт.
Скрипта завршена.

Провера броја аргумената командне линије

Унутар ИФ наредбе можемо чак проверити колико је аргумената командне линије прослеђено команди како бисмо могли да поступамо према истој:

цоунт=$ #
ако [ ! $ цоунт -гт 1 ]
онда
Избацио „Нема довољно аргумената“
елсе
Избацио 'Добар посао!'
бити

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

Аргументи командне линије

Аргументи командне линије

Изјаве Иф-Тхен-Елиф-Елсе

Такође можемо имати више ИФ наредби у истом блоку како бисмо сузили путању одлуке коју наш програм користи за извршавање наредби које смо дефинисали. Ево синтаксе за дефинисање више ИФ наредби у нашим скриптама:

акоТЕСТ-КОМАНДЕ;
онда
РЕЗУЛТАТ-КОМАНДЕ;
елиф
ДРУГЕ-КОМАНДЕ;
онда
ДРУГИ РЕЗУЛТАТ-КОМАНДЕ;
елсе
АЛТЕРНАТЕ-ЦОММАНДС;
бити

Ово изгледа прилично познато и лако га је пратити. Хајде да дефинишемо једноставан пример да установимо како дрво функционише:

цоунт=$ #
ако [ $ цоунт -ек 1 ]
онда
Избацио 'Пронађен је само један аргумент.'
елиф [ $ цоунт -ек 2 ]
онда
Избацио 'Боље, два аргумента су пронађена.'
елсе
Избацио 'Добар посао, пронађено је много аргумената!'
бити

Ево шта добијамо овом командом:

Ако онда пример Елиф Елсе

Ако онда пример Елиф Елсе

Коришћење исписа предмета

ИФ-ЕЛСЕ изјаве су корисне ако имате велики списак опција на које се морате одлучити. Али у случају да желите извршити радњу само у неколико случајева потпуног подударања с резултатом, можемо користити ЦАСЕ изразе и у Басх скриптама. Његова синтакса изгледа овако:

случајуЕКСПРЕССИОНуЦАСЕ1)КОМАНДЕ-ТО-ЕКСЕЦУТЕ;
ЦАСЕ2)КОМАНДЕ-ТО-ЕКСЕЦУТЕ;
ЦАСЕ2)КОМАНДЕ-ТО-ЕКСЕЦУТЕ;
...)КОМАНДЕ-ТО-ЕКСЕЦУТЕ;
*)КОМАНДЕ-ТО-ЕКСЕЦУТЕ;
есац

Последњи случај са * делује као подразумевани случај и биће извршен када се не пронађе ниједан од горе дефинисаних случајева који се подудара.

Хајде да брзо конструишемо једноставан пример користећи наредбе ЦАСЕ:

случају „1 УСД“ у
1)
Избацио „Вредност је 1.“
;;
2)
Избацио „Вредност је 2.“
;;
3)
Избацио „Вредност је 3.“
;;
*)
Избацио 'Друга вредност је прошла.'
есац

Сваки ЦАСЕ израз се завршава са ;; (двоструке ознаке тачке и зареза). Ево шта добијамо овом командом:

Пример СЛУЧАЈА

Пример СЛУЧАЈА

Закључак

У овој лекцији смо погледали како можемо користити изразе ИФ-ЕЛСЕ, ИФ-ТХЕН-ЕЛИФ и ЦАСЕ у Басх скриптама које дефинишемо за предузимање одређених радњи на основу вредности које постоје у нашим програмима или које је корисник прошао користећи позиционирање параметри.