bash - 在 while 循环中调用 Bash 函数

标签 bash while-loop

我制作了这个脚本来检查以确保创建了离岸脚本。我工作得很好——我添加了一个函数以使其更干净一些。但我不认为该函数有效,因为它一直在同一时间(以秒为单位)打印出来。

#!/bin/bash
#set -x
check_offshore ()
{
    local RESULTS
    RESULTS=$(ssh -q -T casper@mybox "ls -ltr  /come/and/play/with/us/danny/DropBox| grep foreverr_and_$today.csv")
    rc=$?
}

today=$(/bin/date +%Y%m%d)
time=$(/bin/date +"%T.%3N")
iterate=0
while [ $iterate -le 5 ]
do
     check_offshore
     if [[ $rc != 0 ]] ; then
        echo "$time foreverr_and_$today.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox"
        fi
     sleep 5
     iterate=$((iterate+1 ))
     done

这是它创建的日志 -emdash;日志时间永远不会改变。它永远保持不变,直到脚本停止。

17:42:28.380 foreverr_and_20150102.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox
17:42:28.380 foreverr_and_20150102.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox
17:42:28.380 foreverr_and_20150102.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox
17:42:28.380 foreverr_and_20150102.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox
17:42:28.380 foreverr_and_20150102.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox
17:42:28.380 foreverr_and_20150102.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox

发生了什么事以及如何修复它?

最佳答案

请注意,该问题与函数本身无关;问题出在循环及其周围环境中。

由于您没有在循环内设置 time=$(...) ,您希望它如何改变?

修改循环,以便在每次迭代时重新评估时间。由于如果您在 23:59:30 之后运行此脚本,日期可能会更改,因此您可能还需要在每次迭代时设置日期。您还可以使用 Bash 特定的循环控制机制:

for ((iterate = 0; iterate <= 5; iterate++))
do
    today=$(/bin/date +%Y%m%d)
    time=$(/bin/date +"%T.%3N")
    check_offshore
    if [[ $rc != 0 ]] ; then
       echo "$time foreverr_and_$today.csv is not present in casper@mybox:/come/and/play/with/us/danny/DropBox"
    fi
    sleep 5
done

您可能更愿意保留原始日期,在这种情况下,您可以在循环外继续设置今天。请注意,如果事情从 23:59:56.234 变为 00:00:02.197,您的日志记录会变得有点可疑,因为事情在午夜之前需要一段时间。无论这对你是否重要,你都必须做出判断。我建议日志文件中的日期+时间要明确;几天后更容易诊断发生了什么。

关于bash - 在 while 循环中调用 Bash 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27749752/

相关文章:

bash - 从外部脚本调用函数

python 2.7脚本无限期地并行运行两个while循环

javascript - While 循环设置 CasperJS "then()"步骤

linux - 如何将变量替换为 bash 脚本,然后在 Linux 中的远程服务器上运行

json - 将 JSON 数组转换为 bash 字符串数组

json - 如何使用 jq 为数组中的所有对象递归插入动态字段名称?

c - 字符串怎么可能是 boolean 值?

bash - 在 bash 中实现 netcat

java - 无法获取用户输入的正确最大值和最小值

php - 基于 <select> PHP/Mysql 更改输入值