Во многих случаях сценариям bash требуются значения аргументов для предоставления сценарию параметров ввода. Вы можете обрабатывать аргументы командной строки в сценарии bash двумя способами. Один — с использованием переменных аргументов , а другой — с помощью функции getopts . В этом руководстве показано, как обрабатывать аргументы командной строки.
Переменная аргумента начинается с $ 0. Имя основного файла сценария хранится в $ 0, который получает значения аргументов из аргументов командной строки. Если в командной строке передаются два аргумента, то последовательно значения аргументов будут получены в переменных $ 1 и $ 2.
Создайте файл bash со следующим сценарием. Сценарий получит значения с тремя аргументами и сохранит их в переменных $ 1, $ 2 и $ 3. Он будет подсчитывать общее количество аргументов и выводить значения аргументов, используя цикл без цикла. Сумма всех значений аргументов будет напечатана позже.
#!/bin/bash # Подсчет общего количества аргументов echo "Общее количество аргументов: $ #" # Чтение значений аргументов по отдельности echo "Значение первого аргумента: $1" echo "Значение второго аргумента: $2" echo "Значение третьего аргумента: $3" # Чтение значений аргументов с использованием цикла for argval in "$@" do echo -n "$argval " done # Добавление значений аргументов sum=$(($1+$2+$3)) # Вывод результата echo -e "\nРезультат суммы = $sum"
Следующий вывод появится после выполнения файла сценария с тремя числовыми значениями аргументов: 50, 35 и 15.
$ bash cmdline1.sh 50 35 15
Создайте файл bash с помощью следующего сценария, чтобы подсчитать общее количество символов в любом файле. Здесь имя файла будет передано как аргумент командной строки.
#!/bin/bash filename=$1 totalchar="wc -c $filename" echo "Общее количество символов в $totalchar "
Запустите сценарий bash с именем файла в качестве значения одного аргумента и запустите другую команду, чтобы проверить общее количество символов в этом файле. Здесь в качестве значения аргумента используется файл weekday.txt. Общее количество символов в файле weekday.txt — 57.
$ bash cmdline2.sh weekday.txt $ wc -c weekday.txt
Если вы хотите сохранить данные в базе данных или любом файле или создать отчет в определенном формате на основе значений аргументов командной строки, то функция getopts — лучший вариант для выполнения этой задачи. Это встроенная функция Linux. Таким образом, вы можете легко использовать эту функцию в своем скрипте для чтения форматированных данных из командной строки.
Создайте файл bash со следующим сценарием, чтобы понять использование функции getopts. Функция getopts используется с циклом while для чтения параметров аргументов командной строки и значений аргументов. Здесь используются 4 варианта: «i», «n», «m» и «e». оператор case используется для сопоставления конкретной опции и сохранения значения аргумента в переменной. Наконец, распечатайте значения переменной.
#!/bin/bash while getopts ":i:n:m:e:" arg; do case $arg in i) ID=$OPTARG;; n) Name=$OPTARG;; m) Manufacturing_date=$OPTARG;; e) Expire_date=$OPTARG;; esac done echo -e "\n$ID $Name $Manufacturing_date $Expire_date\n"
Запустите файл со следующими параметрами и значениями аргументов. Здесь p100 — значение опции -i, «Hot Cake» — значение опции -n, « 01-10-2021 » — значение опции -m, а «05-10-2021 » — значение — е вариант.
$ bash cmdline3.sh -i p001 -n 'Hot Cake' -m '01-10-2021' -e '05-10-2021'
Когда вам нужно отправить простые значения в скрипте, лучше использовать переменные аргумента. Но если вы хотите отправлять данные в формате, лучше использовать функцию getopts для получения значений аргументов. Использование переменных аргументов и параметров getopts показано в следующем примере.
Способы чтения аргументов командной строки с использованием переменных аргументов и параметров getopts были показаны отдельно в предыдущих примерах этой статьи. Но эти два способа можно использовать в одном скрипте для чтения значений аргументов командной строки. Создайте сценарий bash со следующим кодом для чтения значений аргументов командной строки, передаваемых параметрами getopts и параметрами аргументов. Здесь три параметра getopts были использованы для чтения имени хоста, имени пользователя и пароля командной строки. Затем была использована команда shift для удаления всех параметров getopts из команды чтения значений командной строки с использованием переменных аргументов. Этот сценарий прочитает и распечатает не более трех значений переменных аргументов. Если после выполнения кода не будет указано значение аргумента без опции, то будет напечатано сообщение; иначе,
#!/bin/bash # Чтение аргументов с опциями getopts while getopts 'h:u:p:' OPTION; do case "$OPTION" in h) # Вывести имя хоста echo "Имя хоста - $OPTARG " ;; u) # Вывести имя пользователя echo "Имя пользователя - $OPTARG " ;; p) # Вывести пароль echo "Пароль: $OPTARG " ;; *) # Вывести справочное сообщение для неверных опций echo "Usage: $0 [-h value] [-u value] [-p value]" >&2 # Завершить выполнение сценария exit 1 ;; esac done # Удалить все параметры, переданные getopts options shift "$(($OPTIND -1))" # Чтение первых обычных аргументов if [ ! -z $1 ]; then echo "The first table name is $1" else echo "No normal argument is given." exit 1 fi # Чтение второго нормального аргумента if [ ! -z $2 ]; then echo "The second table name is $2" fi # Чтение третьего нормального аргумента if [ ! -z $3 ]; then echo "The third table name is $3" fi
Аргументы командной строки можно прочитать без использования переменных аргументов или параметров getopts. Использование символа «$@» в первой скобке — еще один способ прочитать все значения аргументов командной строки.
Создайте файл bash со следующим сценарием, чтобы прочитать значения аргументов без какой-либо переменной аргумента и вычислить сумму трех значений аргументов командной строки. Здесь в первых скобках используется «$@» для считывания всех значений аргументов в массив. Затем будет напечатана сумма первых трех значений массива.
#!/bin/bash # Прочитать все значения аргументов argvals=("$@") # Проверить общее количество аргументов if [ $# -gt 2 ] then # Вычислить сумму трех аргументов командной строки sum=$((${argvals[0]}+${argvals[1]}+${argvals[2]})) echo "Сумма 3 аргументов командной строки равна $sum" fi
В выводе появится после выполнения вышеуказанного сценария для значений аргументов 12, 20 и 90. Сумма этих чисел равна 122.
Здесь показаны способы предоставления значений аргументов командной строки без каких-либо параметров и с параметрами. Здесь также показан способ чтения значений аргументов командной строки без использования переменных. Мы надеемся, что эта статья поможет читателям правильно использовать значения аргументов командной строки в своих сценариях bash.