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

17 浏览
0 Comments

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

我有这段代码,它的作用是:

用户输入最大数,根据输入的数,我想显示所有小于该数的偶数。

#! /bin/bash
echo "请输入最大数:"
read counter
for number in {0.."$counter"}
if [ (($number % 2 == 0)) ]
then
echo "$number"
fi

但它不能正常工作。当我从终端调用脚本时,我收到以下错误:

[root@sunshine Desktop]# bash Tester
请输入最大数:
9
Tester: 第9行附近有语法错误,附近的标记意外。
Tester: 第9行: `if [ (($number % 2 == 0)) ]'

0
0 Comments

文章标题:如何从用户输入中打印出偶数

问题原因:在给定的代码中,忘记了for循环的do和done部分。而且,你不能在{a..b}语法中使用变量。

解决方法:需要将代码改写为计数循环。然后可以每次增加2,这样就不需要检查偶数了。最后,建议将变量重命名为counter和max。

整理后的代码如下:

#!/bin/bash
echo "What is your max number:"    
read max
for ((counter = 0; counter < max; counter += 2)); do
    echo "$counter"
done

无法使用{0..$var}的原因是,花括号扩展在参数扩展之前进行,因此在Bash处理它时,这不是一个有效的扩展。可以参考手册获取更多信息。

0
0 Comments

问题的出现原因:用户需要从输入的数字中打印出偶数。

解决方法:

一种更简单的方法是使用brace expansion(花括号展开):

seq 0 2 $counter

还可以将变量传递给brace expansion,使用另一个bash的调用:

bash -c 'printf "%i\n" {0..'$counter'..2}'

或者使用eval

eval 'printf "%i\n" {0..'$counter'..2}'

这两种方法都不安全,除非确保$counter是一个数字。

0