当变量给出范围时,如何在Bash中迭代一系列数字?
我知道我可以这样做(在Bash 文档中称为"序列表达式" ):
for i in {1..5}; do echo $i; done
Run Code Online (Sandbox Code Playgroud)
这使:
1
2
3
4
5
但是,如何用变量替换任何一个范围端点?这不起作用:
END=5
for i in {1..$END}; do echo $i; done
Run Code Online (Sandbox Code Playgroud)
哪个印刷品:
{} 1..5
我试图将参数作为for循环的最大限制传递,如下所示:
#!/bin/bash
for i in {1..$1}
do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
然而,这{1..2}在使用参数调用时返回2,而不是执行脚本并给我
1
2
Run Code Online (Sandbox Code Playgroud) #!/bin/sh
for i in {1..5}
do
echo "Welcome"
done
Run Code Online (Sandbox Code Playgroud)
会工作,显示欢迎5次.
#!/bin/sh
howmany=`grep -c $1 /root/file`
for i in {1..$howmany}
do
echo "Welcome"
done
Run Code Online (Sandbox Code Playgroud)
Doesn't work! howmany would equal 5 as that is what the output of grep -c would display. $1 is parameter 1 which is specific when running the script.
Any ideas?
我找到了在shell中使用getopt命令的示例脚本.
#!/bin/bash
args=$(getopt ab $*)
set -- $args
for i;
do
case "$i" in
-a)shift; echo "it was a";;
-b)shift; echo "it was b";;
esac;
done
Run Code Online (Sandbox Code Playgroud)
它运作良好,但我不明白变量$ i指派在哪里.怎么知道它必须遍历$ arg.你能解释一下吗?
我在这里有这个代码以及它应该做什么:
用户输入最大数量。并根据输入的数字,我想显示该数字之前的所有偶数。
#! /bin/bash
echo "What is your max number:"
read counter
for number in {0.."$counter"}
if [ (($number % 2 == 0)) ]
then
echo "$number"
fi
Run Code Online (Sandbox Code Playgroud)
但它不起作用。相反,当我从终端调用他的脚本时,我收到了这个错误:
[root@sunshine Desktop]# bash Tester
What is your max number:
9
Tester: line 9: syntax error near unexpected token `if'
Tester: line 9: `if [ (($number % 2 == 0)) ]'
Run Code Online (Sandbox Code Playgroud) 我正在编写一个必须在bash和sh中运行的脚本,它在一个微小的平台上运行,并且有些东西似乎缺失了,例如seq.所有这些限制/要求使得编写此脚本非常困难.我需要编写一个在所有这些要求下工作的for循环.
这仅适用于bash:
for (( i = 0; i <= 4; i++ ))
do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
这应该在sh中工作,但我正在使用的平台显然缺少seq.
for i in $(seq 1 $INPUT); do
Run Code Online (Sandbox Code Playgroud)
$ INPUT是用户定义的最大值.
我需要创建一个仅包含点符号“.”的文本文件。在每一行上重复,直到达到变量中存储的特定行数。我现在使用 while 循环,但那些带点的文件需要大约 0.5-5 百万行。因此,它需要的时间比我想要的要长一些。下面是我当前的代码:
j=0
while [[ $j != $length ]]
do
echo "." >> $file
((j++))
done
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:除了使用 while 循环之外,是否有更有效的方法来创建一个包含 x 行且每行包含相同字符(或字符串)重复的文件?
谢谢,