Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 无论条件运算符如何,if语句始终为true_Bash_Variables_If Statement_Conditional Statements - Fatal编程技术网

Bash 无论条件运算符如何,if语句始终为true

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

我已经关注这个问题太久了,我已经做了多次修改,将变量输出到单独的文件中以检查它们是否正常工作,并且对Bash中的条件语句进行了大量研究。出于某种原因,即使我手动验证了
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

将被逐字处理,因此将代码存储在变量中不起作用。
将被逐字处理,因此将代码存储在变量中不起作用。
将被逐字处理,因此将代码存储在变量中不起作用。
将被逐字处理,因此,将代码存储在变量中是行不通的。谢谢,这将是我第一个使用函数的脚本。我一直在阅读这里的随机问题,检查手册页和谷歌搜索-谢谢你的回答,我显然需要继续学习。谢谢你,这将是我第一个使用函数的脚本。我一直在阅读这里的随机问题,检查手册页和谷歌搜索-谢谢你的回答,我显然需要继续学习。谢谢你,这将是我第一个使用函数的脚本。我一直在阅读这里的随机问题,检查手册页和谷歌搜索-谢谢你的回答,我显然需要继续学习。谢谢你,这将是我第一个使用函数的脚本。我一直在阅读这里的随机问题,查看手册页和谷歌搜索——感谢你的回答,我显然需要继续学习。