繁体   English   中英

Shell脚本while循环

[英]Shell scripting while loop

 #!/bin/sh
   export TERM=linux
   start()
   {
   logger "starting logs..."
   NOW=$(date +"%F")
   FILE="log-$NOW"
   sh -ci "myapp -w /opt/home/logs/$FILE &> /dev/tty${#} &" >> /dev/null
   wait
   logger "myapp started"
   }

   stop()
   {
   kill -9 $(pidof myapp)
   }
   CDAY=$(date +"%d")
   start
   while [1]; do
        if [ $CDAY -ne $(date +"%d") ]
        then
                logger "loop"
                CDAY=$(date +"%d")
                stop; start
        fi
   done

接下来是逻辑:如果当前日期已更改(第二天到来),myapp将开始记录某些进程,脚本将停止myapp并再次启动它以创建新的日志文件

我是shell脚本的新手,它无法按预期工作,我在哪里错了?

UPD:似乎虽然循环不起作用,但脚本没有加入,logread中没有logger "loop"

UPDD:对while循环进行while :循环的更正语法,然后它开始工作。 谢谢你们!

在黑暗中,我的野蛮行为是删除最后一行的 fi ,因为 if似乎没有匹配项。 您可能会从在while循环中添加sleep 120左右的sleep 120而受益,否则您将浪费CPU时间并尽可能快地实现这一目标,而没有太多的上升空间。 错误可能与if [ $CDAY !=$(date +"%d") ] ,我相信您必须在运算符的两侧都留有空格,例如: if [ $CDAY != $(date +"%d") ] 由于您正在执行整数比较,因此您可能还应该将运算符更改为-ne因为!=用于字符串比较。 我建议将%d更改为%M以便它可以更快地滚动,这对于确保它可以正常工作很有帮助。 %F也需要更改为更具体的内容,例如%c )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM