Как передавать параметры в Bash-скрипт?
Я написал bash-скрипт, который должен принимать две даты в качестве параметров, например: myshell date1 date2
. Как мне присвоить эти параметры переменным date1
и date2
?
Вот пример кода, который я использую:
sed "s/$date1/$date2/g" wlacd_stat.xml > tmp.xml
mv tmp.xml wlacd_stat.xml
Как правильно реализовать это в скрипте?
4 ответ(ов)
В вашем скрипте вы используете $1
и $2
для передачи аргументов командной строки. Эти переменные представляют первый и второй аргументы, переданные вашему скрипту. Вот пример вашего кода:
date1="$1"
date2="$2"
sed "s/$date1/$date2/g" wlacd_stat.xml >temp.xml
mv temp.xml wlacd_stat.xml
В данном фрагменте кода происходит следующее:
- Значение первого аргумента командной строки (например, дата в формате
YYYY-MM-DD
) сохраняется в переменнойdate1
. - Значение второго аргумента также сохраняется в переменной
date2
. - Команда
sed
заменяет все вхожденияdate1
в файлеwlacd_stat.xml
наdate2
и сохраняет результат во временном файлеtemp.xml
. - Затем временный файл переименовывается в
wlacd_stat.xml
, тем самым обновляя исходный файл.
Не забудьте при запуске вашего скрипта передавать оба аргумента, например: ./script.sh 2023-01-01 2023-01-02
.
Чтобы перебрать параметры, вы можете использовать следующий сокращённый вариант:
#!/bin/bash
for a
do
echo $a
done
Эта форма эквивалентна for a in "$@"
.
Аргументы в Bash называются в зависимости от их позиции в командной строке.
Кроме того, если вам нужно обрабатывать один аргумент за другим, вы можете использовать команду shift
, чтобы сдвинуть их, и всегда обращаться к первому аргументу с помощью $1
:
while [ $# -gt 0 ]
do
echo $1
shift
done
В этом примере цикл будет продолжаться, пока есть хотя бы один аргумент ($#
— это количество переданных аргументов). Каждый раз, когда выполняется shift
, первый аргумент удаляется, и следующий аргумент становится доступным через $1
. Это полезно, если вы хотите последовательно обрабатывать все аргументы.
В переменных $0
, $1
, $2
и так далее хранятся аргументы, переданные скрипту. Конкретно:
$0
содержит имя скрипта.$1
содержит первый аргумент, переданный скрипту.$2
содержит второй аргумент, переданный скрипту.
Таким образом, вы можете использовать эти переменные для доступа к аргументам в вашем скрипте. Например, если вы запустите скрипт следующим образом:
./myscript.sh arg1 arg2
то переменные будут содержать следующее:
$0
будет равно./myscript.sh
$1
будет равноarg1
$2
будет равноarg2
Это позволяет вам обрабатывать входные данные в вашем скрипте более гибко.
Как запросить ввод Yes/No/Cancel в скрипте оболочки Linux?
Как использовать 'grep' для непрерывного потока?
Прерывание скрипта оболочки при возвращении любой команды ненулевого значения
Как убить процесс по имени вместо PID в Linux?
Shell Script: Чтение ввода на той же строке после вывода сообщения