我正在尝试编写一个shell脚本,它本质上会查询给定的条件。这是捕获。我希望它重复查询持续3分钟。 (可能运行查询,并睡2秒)
1分钟后,在任何时候如果查询返回null,for循环将中断。 (主要目标是检测查询是否一致地返回结果持续3分钟)
1分钟后如何在下面的代码中加入BREAK语句的检查? (SPOOL会覆盖文件的内容还是附加?)
let g:syntastic_scss_checkers=['']
答案 0 :(得分:2)
最简单的方法是捕获sqlplus
的输出,然后测试结果字符串是否为空。为了便于阅读,我将sqlplus
的调用放在一个函数中。鉴于您正在使用的for
语句的形式,我还假设您正在使用bash
。
run_query () {
sqlplus -s username/passwd@SERVICENAME <<EOF
# [deleted]
EOF
}
# SECONDS is incremented each second, so can be used as
# a simple timer.
SECONDS=0
# For the first minute, just run the query
while (( SECONDS <= 60 )); do
output=$(run_query)
sleep 2
done
# After the first minute, continue running the query for the
# next two minutes, but quit if the query produces no output.
while (( SECONDS <= 180 )); do
output=$(run_query)
if [[ -z $output ]]; then
break
fi
sleep 2
done
或者,您可以组合两个循环并使用稍微复杂的条件:
while (( SECONDS <= 180 )); do
output=$(run_query)
# Don't break for any reason during the first 60 seconds
if ((SECONDS > 60)) && [[ -z $output ]]; then
break
fi
sleep 2
done
如果您没有使用bash
,则可以通过调用date
来模拟计时器:
start=$(date +%s)
while now=$(date +%s); SECONDS=$(( now - start)); [ "$SECONDS" -le 180 ]; do
output=$(run_query)
if [ "$SECONDS" -gt 60 ] || [ -n "$output" ]; then
break
fi
sleep 2
done