Як передати аргументи скрипту Bash

Напишіть сценарій Bash, щоб він отримував аргументи, які вказуються при виклику сценарію з командного рядка. Використовуйте цей метод, коли сценарій повинен виконувати трохи іншу функцію залежно від значень вхідних параметрів, також званих аргументами.

Приклад передачі аргументів у скрипті Bash

Якщо ви розробили скрипт stats.sh, який підраховує слова у файлі, краще передати назву файла як аргумент, щоб один і той же сценарій міг використовуватися для всіх файлів, які будуть оброблятися. Наприклад, якщо назва файлу для обробки - songlist.txt, введіть наступне:

sh stats.sh songlist.txt

Доступ до аргументів здійснюється всередині скрипту з використанням змінних $1, $2, $3 і т. д. Змінна $1 відноситься до першого аргументу, $2 до другого аргументу і $3 до третього аргументу. Наприклад, у скрипті:

FILE1 = $ 1
wc $ FILE1

Присвоюйте змінну з описовою назвою значенню першого аргументу ($1), а потім викличте утиліту підрахунку слів (WC) для змінної $ FILE1.

Якщо вам потрібна змінна кількість аргументів, використовуйте змінну $ @, яка є масивом всіх вхідних параметрів. Ця процедура використовує цикл for для ітеративної обробки кожного з них, як показано в наступному прикладі:

для FILE1 у "$ @" "зробити

wc $ FILE1
зроблено

Ось приклад того, як викликати цей скрипт з аргументами з командного рядка:

sh stats.sh songlist1 songlist2 songlist3

Якщо аргумент містить пробіли, укладіть його в одинарні лапки. Наприклад:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

Прапорці Метод

Часто скрипт написаний так, що аргументи можуть бути передані в будь-якому порядку з використанням прапорів. За допомогою flags деякі аргументи можна зробити необов'язковими.

Наприклад, напишіть сценарій, який витягує інформацію з бази даних на основі зазначених параметрів, таких як ім'я користувача, дата і продукт, і генерує звіт в зазначеному форматі. Скрипт повинен бути написаний таким чином, щоб ці параметри передавалися при виклику сценарію. Це може виглядати так:

makereport -u jsmith -p ноутбуки -d 10-20-2011 -f pdf

Bash включає цю функцію за допомогою функції getopts. Для наведеного вище прикладу використовуйте getopts наступним чином:

у той час як getopts u: d: p: f: option
роблять
регістр «» $ {option} «»
u)
USER = $ {OPTARG};
г) ДАТА = $ {OPTARG};;
p) PRODUCT = $ {OPTARG} ;;
f) FORMAT = $ {OPTARG} ;;
як це
зроблено

Це цикл while, який використовує функцію getopts і так званий рядок опцій - в даному випадку u: d: p: f: - для перебору аргументів. У той час як цикл проходить через рядок _ опції, який містить прапорці, які використовуються для передачі аргументів, і присвоює значення аргументу, передбачене цей прапор змінній опції. Потім оператор case надає значення змінній option глобальної змінної, яка використовується після прочитання всіх аргументів.

Значення для двокрапок

Двокрапка у рядку параметрів означає, що значення необхідні для відповідних прапорів. У наведеному вище прикладі u: d: p: f: за всіма прапорами слідує двокрапка. Це означає, що всі прапори потребують значення. Якщо, наприклад, прапорці d і f не повинні мати значення, u: dp: f буде рядком параметрів.

Двокрапка на початку рядка параметрів (наприклад: u: d: p: f 🙂 має зовсім інше значення. Він обробляє прапори, які не представлені в рядку optstring. У цьому випадку значення змінної option встановлюється рівним? і значення OPTARG встановлюється на несподіваний прапор. Ця поведінка показує відповідне повідомлення про помилку, яке інформує вас про помилку.

Аргументи, яким не передує прапор, ігноруються getopts. Якщо під час виклику скрипту прапорців, вказаних у рядку параметрів, нічого не станеться, якщо ви спеціально не обробите цей випадок у своєму коді. Будь-які аргументи, які не обробляються getops, можуть записуватися за допомогою звичайних змінних $1, $2 і $3.