Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何编写shell脚本以查找1到100之间的完美数_Linux_Shell_Unix_Sh - Fatal编程技术网

Linux 如何编写shell脚本以查找1到100之间的完美数

Linux 如何编写shell脚本以查找1到100之间的完美数,linux,shell,unix,sh,Linux,Shell,Unix,Sh,问题形象 下面的代码在无限循环中运行,不提供任何输出。 所以我无法理解代码有什么问题 我是shell脚本的初学者 现行代码 #!/bin/sh sum=0 i=1 p=1 echo "Perfect numbers from 1 and 100 are" while [ $i -le 100 ] p=1 do while [ $p -le $((i / 2)) ] do if [ $((i % p)) -eq 0 ]

问题形象

下面的代码在无限循环中运行,不提供任何输出。 所以我无法理解代码有什么问题

我是shell脚本的初学者

现行代码

#!/bin/sh

sum=0
i=1
p=1

echo "Perfect numbers from 1 and 100 are" 

while [ $i -le 100 ]
    p=1
do
    while [ $p -le  $((i / 2)) ]
    do
        if [ $((i % p)) -eq 0 ]
        then 
            sum=$($sum + $p)
        fi
        p=$($p + 1)
    done
    if [ "$sum" -eq $i ]
    then 
    echo $i
    sum=0
    fi
done

无限循环来自构造:

while [ $i -le 100 ]
    p=1
do
你几乎肯定想写:

while [ "$i" -le 100 ]
do
    p=1
while
的语法是:
whilecmd;cmd;cmd。。。。;执行

如果最终命令成功,则输入循环体
p=1
将始终成功,因此您有一个无限循环。

无限循环来自构造:

while [ $i -le 100 ]
    p=1
do
你几乎肯定想写:

while [ "$i" -le 100 ]
do
    p=1
while
的语法是:
whilecmd;cmd;cmd。。。。;执行

如果最终命令成功,则输入循环体
p=1
总是会成功的,所以你有一个无限循环。

首先阅读bash手册,找到
的正确语法,而
并通过Hi运行你的脚本。我试图在一个在线编译器上运行它。我已经附上了截图我已经更新了对shellcheck所做的更改仍然没有给出任何错误,但也没有得到任何输出现在你的问题中有两个不同的代码,没有解释它们是什么,除了另一个是“当前”@lieven
-le
是非常好的shell脚本;这是什么
测试
(又称
[
)用于数值比较,主要是因为
首先阅读bash手册,找到
的正确语法,而
并通过Hi运行您的脚本。我试图在一个在线编译器上运行它。我附上了屏幕快照我更新了shellcheck上所做的更改,但它没有给出任何错误,也没有得到任何输出t现在你的问题中有两个不同的代码,没有解释它们是什么,除了另一个是“当前的”@lieven
-le
是非常好的shell脚本;它是
测试的内容(又称
[
)用于数字比较,主要是因为
我做了更改。现在我得到的错误是:{main.bash:line 22:syntax error靠近意外标记
done'main.bash:line 22:
done'}我做了更改。现在我得到的错误是:{main.bash:line 22:意外标记附近的语法错误
done'main.bash:line 22:
done'}