Як перадаць аргументы Bash-Script

Каманды, сінтаксіс і прыклады

Вы можаце напісаць Баш скрыпт , так што ён прымае аргументы , названыя пры выкліку сцэнарыя з каманднага радка. Гэты метад выкарыстоўваецца, калі сцэнар павінен выканаць некалькі іншую функцыю, у залежнасці ад значэнняў ўваходных параметраў (аргументы).

Напрыклад, вы можаце мець сцэнар пад назвай «stats.sh», які выконвае пэўную аперацыю на файл, напрыклад, лічачы яго словы. Калі вы хочаце, каб мець магчымасць выкарыстоўваць гэты скрыпт на многіх файлах, то лепш перадаць імя файла ў якасці аргументу, так што вы можаце выкарыстоўваць адзін і той жа сцэнар для ўсіх файлаў, якія падлягаюць апрацоўцы. Напрыклад, калі імя файла, якая падлягае апрацоўцы «Спіс песень Тэхнічны райдэр», вы павінны ўвесці наступную каманду:

ш stats.sh Спіс песень Тэхнічны райдэр

Аргументы даступныя ўнутры сцэнара з дапамогай зменных $ 1, $ 2, $ 3 і г.д., дзе $ 1 спасылаецца на першы аргумент, $ 2 да другога аргументу, і гэтак далей. Гэта паказана ў наступным прыкладзе:

FILE1 = $ 1 туалет $ FILE1

Для зручнасці чытання, прысвоіць зменнай з апісальным імем на значэнне першага аргументу ($ 1), а затым выклікаць колькасць слоў карыснасці ( туалет ) на гэтай зменнай ($ FILE1).

Калі ў вас ёсць пераменны лік аргументаў, вы можаце выкарыстоўваць «$ @» зменную, якая ўяўляе сабой масіў з усіх ўваходных параметраў. Гэта азначае , што можна выкарыстоўваць для цыклу итеративно апрацаваць кожны з іх, як паказана ў наступным прыкладзе:

для ФАЙЛА1 назвай "$ @» рабіць туалет $ FILE1 зроблена

Вось прыклад таго, як выклікаць гэты сцэнар з аргументамі з каманднага радка:

ш stats.sh songlist1 songlist2 songlist3

Калі аргумент ўтрымлівае прабелы, неабходна заключыць яго ў адзінарныя двукоссі. Напрыклад:

ш stats.sh «1 Спіс песень Тэхнічны райдэр» «2 Спіс песень Тэхнічны райдэр» «3 Спіс песень Тэхнічны райдэр»

Часта сцэнар напісаны такім чынам, што карыстальнік можа перадаць аргументы ў любым парадку, выкарыстоўваючы сцягі. З дапамогай метаду сцягоў, вы можаце таксама зрабіць некаторыя з аргументаў неабавязковых.

Хай у вас ёсць скрыпт, які здабывае інфармацыю з базы дадзеных на аснове зададзеных параметраў, такіх як «імя карыстальніка», «дата» і «прадукт», і генеруе справаздачу ў фармаце «» названага. Цяпер вы хочаце, каб напісаць сцэнар, так што вы можаце перадаць гэтыя параметры пры выкліку сцэнара. Гэта можа выглядаць наступным чынам:

makereport -u -p JSmith Notebooks -d 10-20-2011 -f PDF

Bash дазваляе гэтую функцыю праз функцыю "getopts». Для прыведзенага вышэй прыкладу, можна выкарыстоўваць getopts наступным чынам:

Гэта ў той час як контур , які выкарыстоўвае функцыю «getopts» і так званыя «строка_опции», у дадзеным выпадку «і: D: P: F:», для перабору аргументаў. У той час як контур праходзіць праз строка_опции, які змяшчае сцягі, якія могуць быць выкарыстаны для перадачы аргументаў, і прысвойвае значэнне аргументу, прадугледжанае гэты сцяг пераменнага «варыянт». Справа-аператар затым прысвойвае значэнне «варыянт» зменнай да глабальнай зменнай, якая можа выкарыстоўвацца пасля ўсе аргументы былі прачытаны.

У калёны ў строка_опциях азначае, што значэнні неабходныя для адпаведных сцягоў. У прыведзеным вышэй прыкладзе ўсе сцягі з двукроп'ем: «і: д: р: F:». Гэта азначае, што ўсе сьцягі трэба значэнне. Калі, да прыкладу, «d» і «е» сьцягі ня будуць мець значэнне, то строка_опции будуць «і: інш: F».

Двукроп'е ў пачатку строка_опций, напрыклад «: і: D: P: F:», мае зусім іншы сэнс. Гэта дазваляе апрацоўваць сцягі, якія не прадстаўлены ў строка_опциях. У гэтым выпадку значэнне «опцыі» зменнай ўстаноўлена значэнне «?» а значэнне «OPTARG" устаноўлена ў нечаканы сцяг. Дазваляе адлюстроўваць адпаведнае паведамленне пра памылку, якое інфармуе карыстальніка аб памылцы.

Аргументы, якія ня папярэднічае сцяг ігнаруюцца getopts. Калі сцягі, названыя ў строка_опциях не прадастаўляецца пры выкліку сцэнарыя, нічога не адбываецца, калі вы адмыслова не апрацоўваць гэты выпадак у сваім кодзе. Любыя аргументы, ня апрацоўваныя getops ўсё яшчэ могуць быць захопленыя з рэгулярнымі $ 1, $ 2 і г.д. зменных.