2017-03-12 50 views
0

沒有特別的原因,我想製作一個自動運行196算法的腳本。即使找到了Lychrel數字,代碼也會拋出溢出錯誤。我的代碼如下。製作一個簡單的Bash腳本來通過196算法生成迴文

#!/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號線?我是否正確使用「退出」?第4行的條件應該檢測字符串是否低於10或不是整數。

+2

請看看:http://www.shellcheck.net/ – Cyrus

+0

shellcheck是一個好主意,因爲腳本還有其他問題,再加上你可能想再次看看你是否在工作,它不符合您的要求。 – grail

回答

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」使用雙引號,否則,如果輸入中有空格,它將不起作用。

+0

您的解決方案已經奏效!謝謝。所以我需要在雙括號內使用-le而不是<=? – Expectator