制作一个简单的Bash脚本,通过196算法

时间:2017-03-12 03:50:48

标签: bash

由于没有特别的原因,我想制作自动化196算法的脚本。在找到Lychrel数字的情况下,代码只会抛出溢出错误。我的代码如下。

#!/bin/bash
echo -n "Enter Natural Number above 10 as Maximum > "
read max;
if [[ $max <= "10" || $max =~ ^[0-9]+$ ]];
then
    echo "Improper input. Rerun Script."
    exit 1
else
    for int in {10..$max}
    do
        int2=$int
        while [[ $int2 != `echo $int2 | rev` ]]
        do
            int2=$(expr $int2 + $(echo $int2 | rev))
        done
        echo $int2 >> Palindrome.txt
        echo `awk '!a[$0]++' Palindrome.txt` > Palindrome.txt
    done
    exit 0
fi

似乎我的代码无论如何都会在第4行发出错误。

Enter Natural Number above 10 as Maximum > test
./Palindrome.sh: line 4: syntax error in conditional expression
./Palindrome.sh: line 4: syntax error near `"10"'
./Palindrome.sh: line 4: `if [[ $max <= "10" || $max =~ ^[0-9]+$ ]];'

如何修复第4行?我使用&#34;退出&#34;是否正确?第4行的条件是检测字符串是否低于10,或者不是整数。

1 个答案:

答案 0 :(得分:1)

这需要从

更改
[[ $max <= "10" || $max =~ ^[0-9]+$ ]]

[[ $max -le "10" || $max =~ ^[0-9]+$ ]]

-le→不等于
-lt→少于
-ge→更大的相等 -gt→大于

另外,我不确定这是否有意义,我认为你的意思是:

# is a number and less or equal 10
[[ "$max =~ ^[0-9]+$ && $max -le "10" ]]

你想首先检查它是否是一个数字然后是否小于10.如果你反过来这样做,你会收到一个错误,因为如果输入不是SOME_RANDOM_TEXT_READ -le "10"则无效一个号码。此外,您希望对“$ max”使用双引号,否则如果输入中有空格则无法使用。