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
Linux Bash-如何使循环只运行一次?_Linux_Bash_Shell - Fatal编程技术网

Linux Bash-如何使循环只运行一次?

Linux Bash-如何使循环只运行一次?,linux,bash,shell,Linux,Bash,Shell,每当count目录中的文件发生更改时,我需要计算总计数,如果总计数在50到100之间,我需要运行一个带有输入N的脚本,这只需要1秒的时间 问题是当总计数每次从50增加到100时,脚本每次都在执行。有没有办法阻止循环/脚本第二次运行 while inotifywait -r -e modify $dir do line=$(grep -ho '[0-9]*' /var/count* | awk '{sum+=$1} END {print sum}') echo "********** coun

每当
count
目录中的文件发生更改时,我需要计算
总计数
,如果
总计数
在50到100之间,我需要运行一个带有输入
N
的脚本,这只需要1秒的时间

问题是当
总计数每次从50增加到100时,脚本每次都在执行。有没有办法阻止循环/脚本第二次运行

while inotifywait -r -e modify $dir
do

line=$(grep -ho '[0-9]*' /var/count* | awk '{sum+=$1} END {print sum}')

echo "********** count is $line **********"

if [ $line -ge 50 ] && [ $line -lt 100 ]
then
echo "_____________executing if 1 _______________"
export N=1
/var/test.sh
fi

if [ $line -ge 100 ] && [ $line -lt 150 ]
then
echo "_____________executing if 2 _______________"
export N=2
/var/test.sh
fi
done

我不知道你为什么有两个“完成”的陈述

我很难理解这个问题。这是你想要的吗?每个“如果”只执行一次

export N=0
while inotifywait -r -e modify $dir
do
   line=$(grep -ho '[0-9]*' /var/count* | wc -l)
   if [ $N -lt 1 -a $line -ge 50 -a $line -lt 100 ]
   then
       export N=1
       /var/test.sh

   elif [ $N -lt 2 -a $line -ge 100 -a $line -lt 150 ]
   then
       export N=2
       /var/test.sh
   fi
done

根据您想要的行为调整代码。

检查您的变量
$N
,查看您是否已经执行了它?我不确定。。如何检查变量
$N
as 1是否已执行?OP可能希望在某个地方休眠。“完成仅一次”我修改了代码。非常感谢你!!!你的解决方案对我非常有效。我正在努力控制N美元。再次感谢:)