我有一个不起作用的 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_Name
,2
我希望它说: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 之类的比较时,那么 == 总是没问题的。
并且我假设您始终将服务器名称作为字符串,而不是数字 - 对吗?;-)
祝愿你的编码学徒好运。
再见