我正在尝试编写一个小脚本来比较我的外部ip(前三个字节)和下面的那个
CREATE PROCEDURE Punch
(
@idEmployee INT
)
AS
BEGIN
SET NOCOUNT ON
IF((SELECT statut FROM Employee WHERE idEmployee = @idEmployee) = 1)
BEGIN TRY
--If there is an active punch
IF((SELECT TOP 1 punchOut FROM Punchs WHERE idEmployee = @idEmployee) = NULL)
BEGIN
--If the punch is the same date than the punchIn
IF("Day is today") -- <- i have trouble here
UPDATE Punchs SET punchOut = GETDATE() WHERE idEmployee = @idEmplyee
--If the punch is in a different day
ELSE
BEGIN
INSERT INTO Punchs(idEmployee, punchIn) VALUES (@idEmployee, GETDATE())
EXEC SendPunchError(@idEmployee)
END
END
--If there are no active punch
ELSE
BEGIN
INSERT INTO Punchs(idEmployee, punchIn) VALUES (@idEmployee, GETDATE())
END
END TRY
BEGIN CATCH
RETURN -1
END CATCH
END
这将永远返回'file created',而else语句永远不会被执行。如果我用“无论什么”替换$ IP_EX,就是这种情况。
答案 0 :(得分:1)
Bash命令对空格敏感。您需要在==
周围添加空格。
观察到这给出了错误的答案:
$ IP_EX=abc; [[ "$IP_EX"=="173.199.65" ]] && echo True
True
相比之下,这个带空格的版本可以正常工作:
$ IP_EX=abc; [[ "$IP_EX" == "173.199.65" ]] && echo True
$
问题是bash将"$IP_EX"=="173.199.65"
视为单个字符串。当给出这样的单个参数时,[[
如果字符串不为空则返回true,如果为空则返回false:
$ [[ "" ]] && echo True
$ [[ "1" ]] && echo True
True
添加空格后,bash将"$IP_EX" == "173.199.65"
视为三个参数,中间参数为==
。因此,它测试平等。这就是你想要的。