Bash 无论条件运算符如何,if语句始终为true
我已经关注这个问题太久了,我已经做了多次修改,将变量输出到单独的文件中以检查它们是否正常工作,并且对Bash中的条件语句进行了大量研究。出于某种原因,即使我手动验证了Bash 无论条件运算符如何,if语句始终为true,bash,variables,if-statement,conditional-statements,Bash,Variables,If Statement,Conditional Statements,我已经关注这个问题太久了,我已经做了多次修改,将变量输出到单独的文件中以检查它们是否正常工作,并且对Bash中的条件语句进行了大量研究。出于某种原因,即使我手动验证了ELAPSEDTIME小于OKTIME,脚本也始终执行SENDMAIL,您的if语句没有任何错误。问题是您正在执行以下两行: #!/bin/bash WATCHDIR="/path/to/my/dir" OKTIME="7200" RESULTFILE="/path/to/some/file.tmp" DONOTHING="$(pr
ELAPSEDTIME
小于OKTIME,脚本也始终执行SENDMAIL
,您的if语句没有任何错误。问题是您正在执行以下两行:
#!/bin/bash
WATCHDIR="/path/to/my/dir"
OKTIME="7200"
RESULTFILE="/path/to/some/file.tmp"
DONOTHING="$(printf 'good' > $RESULTFILE)"
SENDMAIL="$(printf 'bad' > $RESULTFILE)"
ELAPSEDTIME="$(expr $(date +%s) - $(stat -c %Y $WATCHDIR))"
if [ "$ELAPSEDTIME" -ge "$OKTIME" ]; then
$SENDMAIL
else
$DONOTHING
fi
首先将good
写入文件,然后用bad
覆盖它。我认为您的意思是在以后的脚本中才执行这些行的内容:
DONOTHING="$(printf 'good' > $RESULTFILE)"
SENDMAIL="$(printf 'bad' > $RESULTFILE)"
但对我来说,使用变量来存储这样的代码似乎很奇怪。它会起作用,但你为什么不这样做呢:
DONOTHING="printf 'good' > $RESULTFILE"
SENDMAIL="printf 'bad' > $RESULTFILE"
你的if声明没有错。问题是您正在执行以下两行:
#!/bin/bash
WATCHDIR="/path/to/my/dir"
OKTIME="7200"
RESULTFILE="/path/to/some/file.tmp"
DONOTHING="$(printf 'good' > $RESULTFILE)"
SENDMAIL="$(printf 'bad' > $RESULTFILE)"
ELAPSEDTIME="$(expr $(date +%s) - $(stat -c %Y $WATCHDIR))"
if [ "$ELAPSEDTIME" -ge "$OKTIME" ]; then
$SENDMAIL
else
$DONOTHING
fi
首先将good
写入文件,然后用bad
覆盖它。我认为您的意思是在以后的脚本中才执行这些行的内容:
DONOTHING="$(printf 'good' > $RESULTFILE)"
SENDMAIL="$(printf 'bad' > $RESULTFILE)"
但对我来说,使用变量来存储这样的代码似乎很奇怪。它会起作用,但你为什么不这样做呢:
DONOTHING="printf 'good' > $RESULTFILE"
SENDMAIL="printf 'bad' > $RESULTFILE"
你的if声明没有错。问题是您正在执行以下两行:
#!/bin/bash
WATCHDIR="/path/to/my/dir"
OKTIME="7200"
RESULTFILE="/path/to/some/file.tmp"
DONOTHING="$(printf 'good' > $RESULTFILE)"
SENDMAIL="$(printf 'bad' > $RESULTFILE)"
ELAPSEDTIME="$(expr $(date +%s) - $(stat -c %Y $WATCHDIR))"
if [ "$ELAPSEDTIME" -ge "$OKTIME" ]; then
$SENDMAIL
else
$DONOTHING
fi
首先将good
写入文件,然后用bad
覆盖它。我认为您的意思是在以后的脚本中才执行这些行的内容:
DONOTHING="$(printf 'good' > $RESULTFILE)"
SENDMAIL="$(printf 'bad' > $RESULTFILE)"
但对我来说,使用变量来存储这样的代码似乎很奇怪。它会起作用,但你为什么不这样做呢:
DONOTHING="printf 'good' > $RESULTFILE"
SENDMAIL="printf 'bad' > $RESULTFILE"
你的if声明没有错。问题是您正在执行以下两行:
#!/bin/bash
WATCHDIR="/path/to/my/dir"
OKTIME="7200"
RESULTFILE="/path/to/some/file.tmp"
DONOTHING="$(printf 'good' > $RESULTFILE)"
SENDMAIL="$(printf 'bad' > $RESULTFILE)"
ELAPSEDTIME="$(expr $(date +%s) - $(stat -c %Y $WATCHDIR))"
if [ "$ELAPSEDTIME" -ge "$OKTIME" ]; then
$SENDMAIL
else
$DONOTHING
fi
首先将good
写入文件,然后用bad
覆盖它。我认为您的意思是在以后的脚本中才执行这些行的内容:
DONOTHING="$(printf 'good' > $RESULTFILE)"
SENDMAIL="$(printf 'bad' > $RESULTFILE)"
但对我来说,使用变量来存储这样的代码似乎很奇怪。它会起作用,但你为什么不这样做呢:
DONOTHING="printf 'good' > $RESULTFILE"
SENDMAIL="printf 'bad' > $RESULTFILE"
“$(printf'good'>$RESULTFILE)”
执行$()
中的命令,并将其替换为输出
这意味着您总是执行:
#!/bin/bash
WATCHDIR="/mnt/remote/ian/test"
OKTIME="7200"
RESULTFILE="/mnt/remote/ian/result.tmp"
ELAPSEDTIME="$(expr $(date +%s) - $(stat -c %Y $WATCHDIR))"
if [ "$ELAPSEDTIME" -ge "$OKTIME" ]; then
printf 'bad' > "$RESULTFILE"
else
printf 'good' > "$RESULTFILE"
fi
在到达if语句之前
请避免将命令放入变量中。如果需要函数,请使用函数:
printf 'good' > $RESULTFILE
printf 'bad' > $RESULTFILE
“$(printf'good'>$RESULTFILE)”
执行$()
中的命令,并将其替换为输出
这意味着您总是执行:
#!/bin/bash
WATCHDIR="/mnt/remote/ian/test"
OKTIME="7200"
RESULTFILE="/mnt/remote/ian/result.tmp"
ELAPSEDTIME="$(expr $(date +%s) - $(stat -c %Y $WATCHDIR))"
if [ "$ELAPSEDTIME" -ge "$OKTIME" ]; then
printf 'bad' > "$RESULTFILE"
else
printf 'good' > "$RESULTFILE"
fi
在到达if语句之前
请避免将命令放入变量中。如果需要函数,请使用函数:
printf 'good' > $RESULTFILE
printf 'bad' > $RESULTFILE
“$(printf'good'>$RESULTFILE)”
执行$()
中的命令,并将其替换为输出
这意味着您总是执行:
#!/bin/bash
WATCHDIR="/mnt/remote/ian/test"
OKTIME="7200"
RESULTFILE="/mnt/remote/ian/result.tmp"
ELAPSEDTIME="$(expr $(date +%s) - $(stat -c %Y $WATCHDIR))"
if [ "$ELAPSEDTIME" -ge "$OKTIME" ]; then
printf 'bad' > "$RESULTFILE"
else
printf 'good' > "$RESULTFILE"
fi
在到达if语句之前
请避免将命令放入变量中。如果需要函数,请使用函数:
printf 'good' > $RESULTFILE
printf 'bad' > $RESULTFILE
“$(printf'good'>$RESULTFILE)”
执行$()
中的命令,并将其替换为输出
这意味着您总是执行:
#!/bin/bash
WATCHDIR="/mnt/remote/ian/test"
OKTIME="7200"
RESULTFILE="/mnt/remote/ian/result.tmp"
ELAPSEDTIME="$(expr $(date +%s) - $(stat -c %Y $WATCHDIR))"
if [ "$ELAPSEDTIME" -ge "$OKTIME" ]; then
printf 'bad' > "$RESULTFILE"
else
printf 'good' > "$RESULTFILE"
fi
在到达if语句之前
请避免将命令放入变量中。如果需要函数,请使用函数:
printf 'good' > $RESULTFILE
printf 'bad' > $RESULTFILE
将被逐字处理,因此将代码存储在变量中不起作用。
将被逐字处理,因此将代码存储在变量中不起作用。
将被逐字处理,因此将代码存储在变量中不起作用。
将被逐字处理,因此,将代码存储在变量中是行不通的。谢谢,这将是我第一个使用函数的脚本。我一直在阅读这里的随机问题,检查手册页和谷歌搜索-谢谢你的回答,我显然需要继续学习。谢谢你,这将是我第一个使用函数的脚本。我一直在阅读这里的随机问题,检查手册页和谷歌搜索-谢谢你的回答,我显然需要继续学习。谢谢你,这将是我第一个使用函数的脚本。我一直在阅读这里的随机问题,检查手册页和谷歌搜索-谢谢你的回答,我显然需要继续学习。谢谢你,这将是我第一个使用函数的脚本。我一直在阅读这里的随机问题,查看手册页和谷歌搜索——感谢你的回答,我显然需要继续学习。