我正在使用适用于 Windows 10 的 Ubuntu 终端模拟器来尝试学习 Linux 终端。
我有这个代码:
cat > c1.sh
echo Give me your name!
read name
echo How many times do you want your laptop to print out your name?
read numberOfLoops
i=0
while [ $i -lt $numberOfLoops ]
do
echo $name
i=$i+1
done
#end
我创建可执行文件并开始运行它:
./c1.sh
Give me your name!
Root
How many times do you want your laptop to print out your name?
3
Root
./c1.sh: line 6: [: 0+1: integer expression expected
Root
它按预期打印出名称“一次”,但随后它停止运行并打印出消息./c1.sh: line 6: [: 0+1: integer expression expected
。但是,如果循环存在问题while
,那么它不会在第一次打印出来,Root
但它确实打印出来了,所以我不确定这里发生了什么。
答案1
虽然语法上有效,但这个i=$i+1
表达式字符串赋值,这样第二次循环时,你将比较字符串0+1
和整数$numberOfLoops
要进行算术运算,您可以使用let i=$i+1
,i=$((i+1))
或 (在 bash 中 - 您应该#!/bin/bash
在脚本顶部添加一个 shebang,((i=i+1))
或者甚至((i++))
如果您确实在使用 bash(而不是 sh),那么使用 C 风格的 for 循环可能更符合习惯:
#!/bin/bash
read -r -p 'Give me your name! ' name
read -r -p 'How many times do you want your laptop to print out your name? ' numberOfLoops
for ((i=0; i<numberOfLoops; i++)); do
printf '%s\n' "$name"
done
另请参阅算术评估bash 手册的部分。
答案2
这不是数字加法:
i=$i+1
这是字符串连接。如果$i
是0
,则赋值后就是0+1
。
这是 bash 中的数字加法:
((i=i+1))
或更短
((++i))