BASH shell脚本echo输出在同一行上

4

我有一个简单的BASH shell脚本,用于检查curl命令的HTTP响应代码。逻辑是正确的,但我卡在了“简单地”输出“输出”上。

我正在使用GNU bash版本3.2.25(1)-release(x86_64-redhat-linux-gnu)

我想要输出URL和一个制表符-然后是404 | 200 | 501 | 502响应。例如:

http://www.google.co.uk<tab>200

我也遇到了一个奇怪的错误,URL中的“http”部分被覆盖成了200|404|501|502。我是否没有使用基本的BASH shell脚本(功能)呢?谢谢,Miles。
#!/bin/bash

NAMES=`cat $1`
for i in $NAMES
do

    URL=$i
    statuscode=`curl -s -I -L $i |grep 'HTTP' | awk '{print $2}'`

    case $statuscode in
    200)
        echo -ne $URL\t$statuscode;;
    301)
        echo -ne "\t $statuscode";;
    302)
        echo -ne "\t $statuscode";;
    404)
        echo -ne "\t $statuscode";;
    esac
done
3个回答

2

这个答案中你可以使用以下代码:

response=$(curl --write-out %{http_code} --silent --output /dev/null servername)


把这段代码替换到你的循环中,就可以了。

#!/bin/bash

NAMES=`cat $1`
for i in $NAMES
do

    URL=$i
    statuscode=$(curl --write-out %{http_code} --silent --output /dev/null $i)

    case $statuscode in
        200)
            echo -e "$URL\t$statuscode" ;;
        301)
            echo -e "$URL\t$statuscode" ;;
        302)
            echo -e "$URL\t$statuscode" ;;
        404)
            echo -e "$URL\t$statuscode" ;;
        * )
            ;;
    esac
done

我也清理了回显语句,因此每个URL都有一个新行。


1

尝试

 200)
    echo -ne "$URL\t$statuscode" ;; 

0
我在这里尝试一下,但我认为让你感到困惑的是事实上当初始请求被重定向时,curl有时会返回多个标题信息(因此会返回多个状态代码)。
例如:
[me@hoe]$ curl -sIL www.google.com | awk '/HTTP/{print $2}'
302
200

当您在循环中打印时,第二个状态码似乎已成为下一个URL的一部分。

如果这确实是您的问题,则有几种解决方法,具体取决于您想要实现什么目标。

如果不想跟随重定向,简单地在 `curl` 中省略 `-L` 选项。
``` statuscode=$(curl -sI $i | awk '/HTTP/{print $2}') ```
要只取最后一个状态码,可以将整个命令管道到 `tail -n1` 中,仅取最后一个。
``` statuscode=$(curl -sI $i | awk '/HTTP/{print $2}' | tail -n1) ```
要显示所有按顺序排列的代码,请使用空格替换所有换行符。
``` statuscode=$(curl -sI $i | awk '/HTTP/{print $2}' | tr "\n" " ") ```
例如,使用第三种情况:
[me@home]$ cat script.sh
#!/bin/bash
for URL in www.stackoverflow.com stackoverflow.com stackoverflow.com/xxx 
do
     statuscode=$(curl -siL $i | awk '/^HTTP/{print $2}' | tr '\n' ' ')
     echo -e "${URL}\t${statuscode}"
done

[me@home]$ ./script.sh
www.stackoverflow.com   301 200 
stackoverflow.com       200 
stackoverflow.com/xxx   404 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接