如何检查条件是否为真值作为返回值?

时间:2017-09-19 21:21:06

标签: linux bash return-value

问题是等待文件更新,但不是无限期。所以I want to check if a file has certain contents为 -

while ! grep -q $contents  /path/to/file
do
  sleep $timer
done

与它一起我想检查计时器是否已经过期,比如$ timer == 0.这里我们想要返回值中的响应,这样我就可以使用&&像

! grep -q $contents /path/to/file && ls someFile 

然后将返回代码输入if并删除临时变量的需要。

我目前正在以这种方式进行此操作,但我希望在while语句中执行此操作:

# Wait for 16, 8, 4, 2, 1 seconds each to check for progress
waitTime=16
while ! grep -q $contents $LOG_FILE
do
  sleep $waitTime
  waitTime=$((waitTime/2))
  if [ $waitTime -eq 0 ]
  then
    break
  fi
done

1 个答案:

答案 0 :(得分:2)

对于数学表达式,请使用(( ))在算术上下文中对其进行评估。

#!/usr/bin/env bash
#              ^^^^- not /bin/sh; (( )) -- vs $(( )) -- is a bashism.

waitTime=16
while (( waitTime )) && ! grep -q -e "$contents" /path/to/file; do
  sleep "$waitTime"
  waitTime=$(( waitTime / 2 ))
done

此时,(( waitTime ))的退出状态为0当且仅当waitTime的值为正整数时。