Shell 如何在GNUBash中检查输入是数字还是字母

Shell 如何在GNUBash中检查输入是数字还是字母,shell,carriage-return,Shell,Carriage Return,GNU sed命令中出现错误“If”和“then”。如何连续检查输入。请帮助我 if ! [[ "$versionCode" =~ ^[0-9]+$ ]] then echo "Sorry integers only" fi 这是我的错误 sh: 1: Syntax error: end of file unexpected (expecting "then") sh: 1: Syntax error: "then" unexpected Sorry integers only s

GNU sed命令中出现错误“If”和“then”。如何连续检查输入。请帮助我

if ! [[ "$versionCode" =~ ^[0-9]+$ ]]
then
    echo "Sorry integers only"
fi
这是我的错误

sh: 1: Syntax error: end of file unexpected (expecting "then")

sh: 1: Syntax error: "then" unexpected

Sorry integers only
sh: 1: Syntax error: "fi" unexpected
更新:

echo "Enter version code" 
read versionCode
case "$versionCode" in
   (*[!0-9]*) echo "Sorry integers only";;
   ("")       echo "Empty is not a version code";;
   (*)        echo "do something with $versionCode";;
 esac
echo "$versionCode"
sudo  sed "s/\(versionCode[[:space:]]*\)[0-9]*/\1${versionCode}/" Version.gradle
这是我的错误

Enter version code
4

sh: 1: Syntax error: end of file unexpected (expecting ")")

sh: 1: Syntax error: word unexpected

sh: 1: Syntax error: word unexpected

sh: 1: Syntax error: word unexpected

sh: 1: Syntax error: "esac" unexpected

实现这一点的最佳便携式方法是

 case "$versionCode" in
   (*[!0-9]*) echo "Sorry integers only";;
   ("")       echo "Empty is not a version code";;
   (*)        echo "do something with $versionCode";;
 esac

@Cyrus抱歉,我不明白,请解释:我在您发布的代码中没有看到任何
sed
命令。另外,
[[…]]
在POSIX shell中无效。请尝试以下操作:
grep-q$'\r'your_script.sh&&echo“carries return found”
您的代码在Linux Ubuntu中工作,我无法在Win10 WSL中测试。@Manoj是的,它确实工作。如果它不适合你,你就做错了。请具体说明您对我的脚本所做的操作以及收到的错误消息。“不起作用”不是一个有用的描述。你使用的是什么系统?你用的是哪种编辑器?@jeans我用的是GNU-sed脚本,我用我得到的错误更新了我的脚本,我用的是ubuntu作为windows subsystem@Manoj一个问题可能是Windows(\r\n)与Unix(仅\r\n)上的行尾。尝试上面Cyrus建议的命令。由此产生的任何输出都是行尾不匹配的标志。