ifとショートサーキット
bashのtest, [内で使う-aはショートサーキットじゃないのですねえ。
echo "$1" | grep -E '^[0-9]+$' > /dev/null if [ "$?" -eq 0 -a -n "$1" -a "$1" -gt 0 ] then # ... fi
grepした結果が一致して、空文字でなく、0より大きいって書いたらエラーが出ました。
-gtのところで空文字と0を比較してるのでエラーが出たりしてるみたいで。
-aだとダメみたいなので
echo "$1" | grep -E '^[0-9]+$' > /dev/null if [ "$?" -eq 0 -a -n "$1" ] && [ "$1" -gt 0 ] then # ... fi
と&&を使って難を逃れたのでした。