linux脚本怎么退出while,Shell脚本while循环不退出(Shell script while loop not exiting)

I can't tell for certain, but I suspect the problem is that the response is coming back from the server with a CRLF line terminator (i.e the carriage return character followed by linefeed). When the shell does command substitution on wget ..., it trims the ending linefeed, but not the carriage return; as a result, "$status" isn't "true", it's "true\r" (with \r indicating the CR). You can use the tr command to strip CRs and avoid confusion:

(EDIT: Apparently there are also stray newlines as well; I added that to tr's kill list, and just in case added some ... clarification ... to the echo command to show any invisibles that sneak through.)

#!/bin/bash

status="false";

while [ "$status" != true ]

do

status=$(wget -q -O - http://server | tr -d "\r\n")

echo "'$status'" | cat -v

echo "Sleeping for 5 sec"

sleep 5

done

(I also removed a couple of redundant semicolons and replaced the backquoted command substitution with $( ... ) -- it does the same thing, but is much easier to read and avoids some odd syntax glitches with nesting and escapes).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值