迭代变量中的 X 行 (Bash)

Iterate Over X Lines in Variable (Bash)

我正在尝试编写一个简单的脚本来打印网页源代码的前 5 行,然后是加载页面所花费的请求时间。目前,我一直在尝试以下操作:

#!/bin/bash
# Enter a website, get data

output=$(curl  -s -w "%{time_connect}\n" | (head -n5; tail -n1))
echo "$output"

然而,在某些页面上,"tail"实际上并没有打印,这应该是请求的时间,我不知道为什么。

我发现我也可以使用 while 循环遍历行并打印整个内容,但是有没有办法让我只回显变量的前几行,然后回显变量的最后一行同一个变量,所以我可以在请求时间之前加上一个标题(例如:请求时间:0.489)?

我希望能够将其格式化为:

echo "HTML: $output\n" 
echo "Request Time: $requestTime"

谢谢!对不起,如果这看起来很简单,我真的是这种语言的新手:)。对我来说,主要问题是从同一个请求中获取所有这些数据——执行两个单独的 curl 请求会非常简单。

马车returns把我扔了。试试这个:

echo "HTML: "
retn=$'\r'

i=0
while read item
do
    item="${item/$retn/}"    # Strip out the carriage-return

    if (( i < 5 )); then     # Only display the first 5 lines
        echo "$item"
    fi

    (( i++ ))
    requestTime="$item"    # Grab the last line

done < <(curl  -s -w "%{time_connect}\n")

requestTime="${requestTime##*\>}"    # Sanitise the last line

echo "Request Time: $requestTime"

head 可能会读取超过 5 行的输入,以便确定它需要输出什么。这意味着您打算传递给 tail 的行可能已被使用。使用单个进程(awk,在本例中)处理所有输出更安全。

output=$(curl "" -s -w "%{time_connect}\n" | awk 'NR<=5 {print} END {print})