shell7
for循环和while循环
实现功能打印1到100
for i in `seq 1 100`
do
echo $i
done
或者
for i in $(seq 1 100)
do
echo $i
done
打印1-99的例子
for i in ((i=1; i<100;i++))
do
echo $i
done
[外链图片转存中…(img-sLt3KoYv-1734695849356)]
我们可以发现我们用sh和dash都无法运行,错误信息 “Syntax error: Bad for loop variable” 表明在脚本n.sh的第一行有一个不正确的for循环变量语法。
在Bash或Dash shell中,for循环的标准语法如下:
for var in item1 item2 ... itemN
do
command1
command2
...
done
或者如果你是通过一组数字迭代,你可以使用如下的C风格的语法(这个只适用于Bash,并不适用于所有的POSIX sh实现,包括dash):
for (( expr1; expr2; expr3 ))
do
command1
command2
...
done
如果dash n.sh命令是用来执行脚本,那么请注意dash是一个轻量级的shell,它严格遵循POSIX标准并且不像Bash那样包含额外的功能。这意味着一些在Bash中可用的特性可能在Dash中不可用。
while循环
i=1
while(( $i<=10 ))
do
echo $i
let i++
done
或者
i=1
while(( $i<=10 ))
do
echo $i
let "i++"
done
[外链图片转存中…(img-SCmCW1On-1734695849357)]
分析
-
初始化变量:
i=1
:这行代码在两种示例中都是相同的,它将变量i
初始化为1。
-
条件判断:
while(( $i<=10 ))
:这里使用了双括号((...))
,这是Bash特有的算术环境。在这种环境中,可以直接使用比较运算符(如<=
)而不需要额外的引号或转义。但是,这种语法不是POSIX标准的一部分,因此在Dash等其他shell中不被支持。
-
循环体:
echo $i
:输出当前的i
值。
-
增量操作:
- 示例1使用了
let ((i++))
,而示例2使用了let "i++"
。let
命令是用于执行算术运算的,i++
是C风格的递增操作符。这两个例子在Bash中都能正确工作。不过,let
和C风格的递增语句也不是POSIX标准的一部分,在某些shell中可能无法正常工作。
- 示例1使用了
-
结束循环:
done
:结束while
循环。