Fedora/UNIX 中预期的整数表达式
integer expression expected in Fedora/UNIX
我一直在尝试编写打印斐波那契数列的脚本,但 运行 遇到了一些障碍。
1 #!/bin/sh
2 echo "Program to Find Fibonacci Series"
3 echo "How many number of terms to be generated ?"
4 read
5 n=$REPLY
6 echo "Fibonacci Series up to $n terms :"
7 x=0
8 y=1
9 i=2
10 echo "$x"
11 echo "$y"
12 while [ $i -lt $n ]
13 do
14 i=`expr $i+1`
15 z=`expr $y+$x`
16 echo "$z"
17 x=$y
18 y=$z
19 done
20
21 exit 0
特别是第 12-13 行,它一直在打印
integer expression expected
在终端中。
如有任何帮助,我们将不胜感激
POSIX
阅读手册。见 here
NAME
read - read from standard input into shell variables
SYNOPSIS
read [-r] var...
DESCRIPTION
你应该使用
read -r n
嗯-r
是可选的
此解决方案将 $(())
用于 math/arithmetic 上下文。
#!/bin/sh
echo "Program to Find Fibonacci Series"
read -rp "How many number of terms to be generated ? " n
case $n in
*[!0-9]*) printf 'You entered %s which is not an int, please try again shall we?\n' "$n" >&2
exit 1;;
'') printf "Nothing was given, please try again..."
exit 1;;
esac
echo "Fibonacci Series up to $n terms :"
x=0 y=1 i=2
printf '%s\n' "$x" "$y"
while [ $i -lt $n ]; do
i=$((i+1))
z=$((y+x))
echo "$z"
x=$y
y=$z
done
- 我添加了 case 语句来验证用户输入是否确实是一个整数。
- 我没有更改你的整个代码我只是 change/fix 是什么导致了错误。
添加 -r
和 -p
不是 POSIX 但 -r
是。
如果 -p
不适合您,请使用 read n
并使用 echo 像您所做的那样将一些消息输出到标准输出。
我一直在尝试编写打印斐波那契数列的脚本,但 运行 遇到了一些障碍。
1 #!/bin/sh
2 echo "Program to Find Fibonacci Series"
3 echo "How many number of terms to be generated ?"
4 read
5 n=$REPLY
6 echo "Fibonacci Series up to $n terms :"
7 x=0
8 y=1
9 i=2
10 echo "$x"
11 echo "$y"
12 while [ $i -lt $n ]
13 do
14 i=`expr $i+1`
15 z=`expr $y+$x`
16 echo "$z"
17 x=$y
18 y=$z
19 done
20
21 exit 0
特别是第 12-13 行,它一直在打印
integer expression expected
在终端中。
如有任何帮助,我们将不胜感激
POSIX
阅读手册。见 here
NAME
read - read from standard input into shell variables
SYNOPSIS
read [-r] var...
DESCRIPTION
你应该使用
read -r n
嗯-r
是可选的
此解决方案将 $(())
用于 math/arithmetic 上下文。
#!/bin/sh
echo "Program to Find Fibonacci Series"
read -rp "How many number of terms to be generated ? " n
case $n in
*[!0-9]*) printf 'You entered %s which is not an int, please try again shall we?\n' "$n" >&2
exit 1;;
'') printf "Nothing was given, please try again..."
exit 1;;
esac
echo "Fibonacci Series up to $n terms :"
x=0 y=1 i=2
printf '%s\n' "$x" "$y"
while [ $i -lt $n ]; do
i=$((i+1))
z=$((y+x))
echo "$z"
x=$y
y=$z
done
- 我添加了 case 语句来验证用户输入是否确实是一个整数。
- 我没有更改你的整个代码我只是 change/fix 是什么导致了错误。
添加
-r
和-p
不是 POSIX 但-r
是。如果
-p
不适合您,请使用read n
并使用 echo 像您所做的那样将一些消息输出到标准输出。