0

Как передавать параметры в Bash-скрипт?

9

Я написал bash-скрипт, который должен принимать две даты в качестве параметров, например: myshell date1 date2. Как мне присвоить эти параметры переменным date1 и date2?

Вот пример кода, который я использую:

sed "s/$date1/$date2/g" wlacd_stat.xml > tmp.xml
mv tmp.xml wlacd_stat.xml

Как правильно реализовать это в скрипте?

4 ответ(ов)

0

В вашем скрипте вы используете $1 и $2 для передачи аргументов командной строки. Эти переменные представляют первый и второй аргументы, переданные вашему скрипту. Вот пример вашего кода:

date1="$1"
date2="$2"
sed "s/$date1/$date2/g" wlacd_stat.xml >temp.xml
mv temp.xml wlacd_stat.xml

В данном фрагменте кода происходит следующее:

  1. Значение первого аргумента командной строки (например, дата в формате YYYY-MM-DD) сохраняется в переменной date1.
  2. Значение второго аргумента также сохраняется в переменной date2.
  3. Команда sed заменяет все вхождения date1 в файле wlacd_stat.xml на date2 и сохраняет результат во временном файле temp.xml.
  4. Затем временный файл переименовывается в wlacd_stat.xml, тем самым обновляя исходный файл.

Не забудьте при запуске вашего скрипта передавать оба аргумента, например: ./script.sh 2023-01-01 2023-01-02.

0

Чтобы перебрать параметры, вы можете использовать следующий сокращённый вариант:

#!/bin/bash
for a
do
    echo $a
done

Эта форма эквивалентна for a in "$@".

0

Аргументы в Bash называются в зависимости от их позиции в командной строке.

Кроме того, если вам нужно обрабатывать один аргумент за другим, вы можете использовать команду shift, чтобы сдвинуть их, и всегда обращаться к первому аргументу с помощью $1:

while [ $# -gt 0 ]
do
    echo $1
    shift
done

В этом примере цикл будет продолжаться, пока есть хотя бы один аргумент ($# — это количество переданных аргументов). Каждый раз, когда выполняется shift, первый аргумент удаляется, и следующий аргумент становится доступным через $1. Это полезно, если вы хотите последовательно обрабатывать все аргументы.

0

В переменных $0, $1, $2 и так далее хранятся аргументы, переданные скрипту. Конкретно:

  • $0 содержит имя скрипта.
  • $1 содержит первый аргумент, переданный скрипту.
  • $2 содержит второй аргумент, переданный скрипту.

Таким образом, вы можете использовать эти переменные для доступа к аргументам в вашем скрипте. Например, если вы запустите скрипт следующим образом:

./myscript.sh arg1 arg2

то переменные будут содержать следующее:

  • $0 будет равно ./myscript.sh
  • $1 будет равно arg1
  • $2 будет равно arg2

Это позволяет вам обрабатывать входные данные в вашем скрипте более гибко.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь