如何从用户提供的输入打印偶数

coo*_*ter 4 linux bash

我在这里有这个代码以及它应该做什么:

用户输入最大数量。并根据输入的数字,我想显示该数字之前的所有偶数。

#! /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)

Sto*_*ica 5

你忘记了循环的dodone部分for。无论如何{a..b},不幸的是,您不能使用具有语法的变量。你需要写成一个计数循环。然后你可以增加 2,这消除了对偶数的检查:

for ((number = 0; number < counter; number += 2)); do
    echo "$number"
done
Run Code Online (Sandbox Code Playgroud)

最后,我建议将变量重命名为:

  • counter -> max
  • number -> counter

把它们放在一起:

#!/bin/bash

echo "What is your max number:"    
read max

for ((counter = 0; counter < max; counter += 2)); do
    echo "$counter"
done
Run Code Online (Sandbox Code Playgroud)

  • 不能使用 {0..$var} 的原因是大括号扩展是在参数扩展之前完成的,因此在 Bash 处理它时它不是有效扩展。您可以参考 [手册](https://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions) 了解更多信息。 (3认同)