Bash 文件 while 循环运行不正常

Bash 文件 while 循环运行不正常

我正在使用适用于 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+1i=$((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

这是字符串连接。如果$i0,则赋值后就是0+1

这是 bash 中的数字加法:

((i=i+1))

或更短

((++i))

相关内容