我正在使用 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
Run Code Online (Sandbox Code Playgroud)
我创建可执行文件并开始运行它:
./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
Run Code Online (Sandbox Code Playgroud)
它按应有的方式“一次”打印出名称Root,但随后停止运行并打印出消息./c1.sh: line 6: [: 0+1: integer expression expected。但是,如果循环出现问题while,那么它不会第一次打印出来,Root但它会打印出来,所以我不确定这里发生了什么。
尽管语法上有效,但该表达式i=$i+1是一个字符串赋值,因此第二次通过循环时,您将文字字符串0+1与整数进行比较$numberOfLoops
要获得算术评估,您可以使用let i=$i+1, i=$((i+1))or (在 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
Run Code Online (Sandbox Code Playgroud)
另请参阅bash 手册的算术评估部分。