【发布时间】:2015-02-04 15:43:44
【问题描述】:
我正在通过 shell 脚本执行我的 url 并将响应存储在一个变量中。
http://hostname.domain.com:8080/beat
点击上述网址后,我将得到以下响应,我需要对其进行解析并从中提取state 的值
num_retries_allowed: 3 count: 30 count_behind: 100 state: POST_INIT num_rounds: 60 hour_col: 2 day_col: 0
现在我正在使用 grep 从上述字符串中提取状态变量的值。
#send the request, put response in variable
DATA=$(wget -O - -q -t 1 http://hostname.domain.com:8080/beat)
#grep $DATA for state
state=$(grep -oP 'state: \K\S+' <<< "$DATA")
[[ -z "$state" ]] && state=0
echo $state
另外,如果$DATA 变量state: 字符串不存在,那么我想将0 分配给state 变量。之后,我想根据条件验证条件并退出脚本。
如果state 等于POST_INIT 则成功退出shell 脚本,或者如果state 等于0 则也成功退出。
if [[ $state -eq "POST_INIT" || $state -eq "0" ]]; then exit 0; fi
所以我上面的 if 条件不能以某种方式工作。因为我注意到如果我的state 变量值为IN_INIT,那么它是否也退出了shell 脚本?我在字符串比较中做错了什么吗?
【问题讨论】:
-
-eq用于数字。对字符串使用=。 -
@EtanReisner 感谢您的建议。是
==还是=? -
POSIX 说
=。但是如果你想使用它,bash 接受==(虽然我不推荐它)。