首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Bash字符串比较不符合true。

Bash字符串比较不符合true。
EN

Stack Overflow用户
提问于 2017-11-10 21:26:17
回答 2查看 392关注 0票数 0

我有一个脚本,在那里我想找出HTTP请求的状态代码。但是,if语句永远不会计算为true,我也不明白为什么。

代码语言:javascript
代码运行次数:0
运行
复制
#!/bin/sh

set -e

CURL='/usr/bin/curl'
CURL_ARGS='-o - -I -s'
GREP='/usr/bin/grep'

url="https://stackoverflow.com"

res=$($CURL $CURL_ARGS $url | $GREP "HTTP/1.1")

echo $res # This outputs 'HTTP/1.1 200 OK'
echo ${#res} # This outputs 16, even though it should be 15

if [ "$res" == "HTTP/1.1 200 OK" ]; then # This never evaluates to true
  echo "It worked"
  exit 1
fi

echo "It did not work"

我检查了res的长度,它是16,我在浏览器的控制台中检查了它,它是15,所以我删除了两端的空格,但是它仍然没有计算为真。

代码语言:javascript
代码运行次数:0
运行
复制
res_trimmed="$(echo "${res}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"

还是不起作用。

有什么不对的?任何帮助都是非常感谢的。谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-10 22:28:31

更好的实践实现可能如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
#!/usr/bin/env bash
#              ^^^^- ensure that you have bash extensions available, rather than being
#                    only able to safely use POSIX sh syntax. Similarly, be sure to run
#                    "bash yourscript", not "sh yourscript".

set -o pipefail  # cause a pipeline to fail if any component of it fails

url="https://stackoverflow.com"

# curl -f == --fail => tell curl to fail if the server returns a bad (4xx, 5xx) response
res=$(curl -fsSI "$url" | grep "HTTP/1.1") || exit
res=${res%$'\r'}  # remove a trailing carriage return if present on the end of the line

if [ "$res" = "HTTP/1.1 200 OK" ]; then
  echo "It worked" >&2
  exit 0            # default is the exit status of "echo". Might just pass that through?
fi

echo "It did not work" >&2
exit 1
票数 5
EN

Stack Overflow用户

发布于 2017-11-10 21:44:02

您的问题是,您正在从命令替换中获得返回中的偏离字符。若要消除,只需匹配有效字符。

代码语言:javascript
代码运行次数:0
运行
复制
GREP='/usr/bin/grep -o'
...
res=$($CURL $CURL_ARGS $url | $GREP 'HTTP/1.1[A-Za-z0-9 ]*')

其他变动

代码语言:javascript
代码运行次数:0
运行
复制
echo "'$res'" # This outputs 'HTTP/1.1 200 OK'

示例使用/输出

代码语言:javascript
代码运行次数:0
运行
复制
$ sh curltest.sh
'HTTP/1.1 200 OK'
15
It worked
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47231354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档