Как передавать параметры в 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: Чтение ввода на той же строке после вывода сообщения