由于没有特别的原因,我想制作自动化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,或者不是整数。
答案 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”使用双引号,否则如果输入中有空格则无法使用。