Answers:
您的脚本表明您正在使用字符串比较。
假设服务器名称可以是字符串而不是数字。
对于字符串比较:
if [[ "$Server_Name" == 1 ]]; then
笔记:
间隔= 必须
if [ $Server_Name=1 ]; then
是错误的
[[...]]减少了错误,因为[[和]]之间没有路径名扩展或单词拆分
最好引用引号为“单词”的字符串
对于整数比较:
if [[ "$Server_Name" -eq 1 ]]; then
更多信息:
[[
是bash语法,OP询问了shell,它在哪里不起作用
[ $Server_Name=1 ]
不能按预期工作,因为括号内的语法对Bash而言不是特殊的。像往常一样,变量$Server_Name
将替换为1,因此test([
)命令所看到的只是一个参数:string 1=1
。由于该字符串的长度为非零,因此test返回true。
对于兼容POSIX的外壳,可以使用以下测试命令:
[ "$Server_Name" = 1 ]
检查是否$Server_Name
等于字符串1
。
[ "$Server_Name" -eq 1 ]
check是$Server_Name
等于数字 1
,即它执行数字比较而不是字符串比较。
例如,如果定义,则两个命令的返回值将有所不同Server_Name=01
。第一个将返回false,第二个将返回true。
请注意,如果存在变量$Server_Name
未定义的可能性,则必须将其用引号引起来,否则test在调用时将显示错误。
尝试,
#!/bin/bash
Server_Name=50
if [ $Server_Name = 49 ]
then
echo "Server Name is 50"
else
echo "Server Name is below 50"
fi
输出:
#./scriptname.sh
Server Name is below 50
if [ ! "x$var" = "x" ]; then\n if [ $var -eq 1 ]; then ...