Я новый довольно новый когда дело доходит до создания сценариев в Linux (я также действительно не знаю, на которых условиях использовать как удар/оболочка), но у меня есть следующая команда в сценарии, который я хочу выполнить с некоторыми аргументами
write_loop.sh
#!/bin/bash
echo $1
echo $2
for i in {1..$1}; do printf "file '%s'\n" $2 >> list.txt; done
Я пытаюсь выполнить его как это в терминале с 2 аргументами: сумма времен для цикличного выполнения (150) и имя файла для цикличного выполнения ("цикл mp4")
./write_loop.sh 150 loop.mp4
Аргументы передаются сценарию очень хорошо, но по некоторым причинам для цикла не работает. Когда я вручную изменяюсь $1
кому: 150
в write_loop.sh это работает, таким образом, я не уверен, что проблема (возможно, аргумент имеет другой тип?). Любой бит справки ценится.
Переменные не могут использоваться в расширении диапазона {INT..INT}
, таким образом, нейтрализация к этому должна использовать seq
как показывают в связанном сообщении. С другой стороны, используйте подобный C для цикла, так как Вы используете bash
так или иначе:
#!/bin/bash
echo $1
echo $2
echo {1..$1}
for((i=1;i<=$1;i++)); do
printf "'%s'\n" "$2"
done
Или POSIX-ly:
#!/bin/bash
echo $1
echo $2
i=1
while [ $i -le $1 ]; do
printf "'%s'\n" "$2"
i=$((i+1))
done
Обратите внимание, что я изменился printf
часть для тестирования. Адаптируйте его к своим потребностям.