Як передати аргументи до сценарію Баша

Команди, синтаксис та приклади

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

Приклад передачі аргументів у сценарії Баша

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

sh stats.sh список пісень

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

ФАЙЛ1 = 1 долар
wc $ FILE1

Для читабельності призначте змінній з описовим іменем значення першого аргументу ($ 1), а потім викликайте утиліту count count (WC) на змінній $ FILE1.

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

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

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

sh stats.sh songlist1 songlist2 songlist3

Якщо аргумент має пробіли, додайте його до одиничних лапок. Наприклад:

sh stats.sh "список пісень 1" "список пісень 2" "список пісень 3"

Метод прапорів

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

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

makereport -u jsmith -p зошити -d 10-20-2011 -f pdf

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

while getopts u: d: p: f: варіант
робити
випадок "$ {опція}"
в
u) USER = $ {OPTARG} ;;
г) DATE = $ {OPTARG} ;;
p) ПРОДУКТ = $ {OPTARG} ;;
f) FORMAT = $ {OPTARG} ;;
есак
зроблено

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

Значення для колонок

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

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

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