如何测试 shell 中一个变量是否等于一个数字

如何测试 shell 中一个变量是否等于一个数字

我有一个不起作用的 shell 脚本。

输入:

Server_Name=1
if [ $Server_Name=1 ]; then  
echo Server Name is 1  
else
echo Server Name is not 1
fi

输出:

Server Name is 1

但是,如果我改变Server_Name=2,则输出为:

Server Name is 1

当我改为 时Server_Name2我希望它说:Server Name is 2

我知道这是其中的if [ $Server_Name=1 ];一部分。

我如何解决它?

答案1

您的脚本表明您正在使用字符串比较。

假设服务器名称可以是字符串,而不仅仅是数字。

为了字符串比较
if [[ "$Server_Name" == 1 ]]; then

笔记:

  • == 周围的空格是必须
  • = 周围的间距是必须
    if [ $Server_Name=1 ]; then是错的

  • [[ ... ]] 减少了错误,因为 [[ 和 ]] 之间没有发生路径名扩展或单词拆分

  • 优先引用“单词”字符串

为了整数比较
if [[ "$Server_Name" -eq 1 ]]; then


更多信息:

答案2

尝试这个:

if [ $Server_Name -eq 1 ];then

答案3

[ $Server_Name=1 ]

无法按预期工作,因为单括号内的语法对 Bash 来说并不特殊。像往常一样,变量$Server_Name被替换为 1,因此所有测试( [) 命令看到的是一个参数:字符串1=1。由于该字符串的长度不为零,测试返回真的

对于符合 POSIX 标准的 shell,您可以使用以下命令测试命令:

[ "$Server_Name" = 1 ]

检查是否$Server_Name等于字符串1

[ "$Server_Name" -eq 1 ]

检查是否$Server_Name等于数字 1,即,它进行数字比较而不是字符串比较。

两个命令的返回值会有所不同,例如,如果你定义了Server_Name=01,第一个命令会返回 false ,而第二个命令会返回 true 。

请注意,如果变量可能未定义$Server_Name,则必须被引用或测试调用时将显示错误。

答案4

答案很简单。您的代码几乎是正确的。您唯一缺少的是空格……(也许还有一个额外的“=”)

if [ $Server_Name=1 ]; then

将无法正确计算。

if [ $Server_Name == 1 ]; then  

就是你所寻求的。

现在是关于字符串与数字的陈述。每当您搜索诸如 is / is-not 之类的比较时,那么 == 总是没问题的。

并且我假设您始终将服务器名称作为字符串,而不是数字 - 对吗?;-)

祝愿你的编码学徒好运。

再见

相关内容