循环中无法识别参数

循环中无法识别参数

我对在 Linux 中创建脚本还很陌生(我也不太清楚应该使用哪些术语,比如 bash/shell),但是我在脚本中有以下命令,我想用一些参数来执行它

写入循环

#!/bin/bash
echo $1
echo $2
for i in {1..$1}; do printf "file '%s'\n" $2 >> list.txt; done

我尝试在终端中使用两个参数执行此操作:循环次数(150)和循环文件名(“loop.mp4”)

./write_loop.sh 150 loop.mp4

参数可以很好地传递给脚本,但由于某种原因,for 循环不起作用。当我手动更改$1150写入循环它确实有效,所以我不确定问题是什么(也许参数是不同类型的?)。任何帮助都值得感激。

答案1

变量不能用于范围扩展{INT..INT},因此回退到使用seq如下所示的相关帖子。或者,使用类似 C 的 for 循环,因为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出于测试目的更改了部分内容。请根据您的需要进行调整。

相关内容