(standard_in)1:应该正常工作的脚本的语法错误

时间:2020-10-02 12:07:07

标签: bash shell sh

我已经从github下载了一个脚本,该脚本似乎可以运行,但是运行时出现错误。

https://github.com/chentda/curl-average-timings

脚本从URL计算平均加载时间

#!/bin/bash

#This is a simple bash script to get the averages of various website response timings using cURL

#Formatted cURL output that contains the various response timings separated by '-'
curl_format="%{time_namelookup}-%{time_connect}-%{time_appconnect}-%{time_pretransfer}-%{time_redirect}-%{time_starttransfer}-%{time_total}"
#Website you want to send the request to
URL="https://www.google.com/"
#How many requests you want to hit website with to get averages
iterations=5
decimal_rounding=5

#Initialising total variables for the various timings
total_time_namelookup="0"
total_time_connect="0"
total_time_appconnect="0"
total_time_pretransfer="0"
total_time_redirect="0"
total_time_starttransfer="0"
total_time_total="0"

for i in `seq 1 $iterations`;
do
    response=$(curl -o /dev/null -s -w $curl_format $URL)

    #Splits response string by the delimiter of "-"
    response_times=($(echo "$response" | tr "-" "\n"))

    #Assigning each type of response time to a variable
    time_namelookup=${response_times[0]}
    time_connect=${response_times[1]}
    time_appconnect=${response_times[2]}
    time_pretransfer=${response_times[3]}
    time_redirect=${response_times[4]}
    time_starttransfer=${response_times[5]}
    time_total=${response_times[6]}

    #Adding variables assigned above in loop to the respective total variables that are set at start of script
    total_time_namelookup=$(echo "$total_time_namelookup + $time_namelookup" | bc)
    total_time_connect=$(echo "$total_time_connect + $time_connect" | bc)
    total_time_appconnect=$(echo "$total_time_appconnect + $time_appconnect" | bc)
    total_time_pretransfer=$(echo "$total_time_pretransfer + $time_pretransfer" | bc)
    total_time_redirect=$(echo "$total_time_redirect + $time_redirect" | bc)
    total_time_starttransfer=$(echo "$total_time_starttransfer + $time_starttransfer" | bc)
    total_time_total=$(echo "$total_time_total + $time_total" | bc)
done

#Calculating the average for each type of response time
average_time_namelookup=$(echo "scale=$decimal_rounding; $total_time_namelookup / $iterations" | bc)
average_time_connect=$(echo "scale=$decimal_rounding; $total_time_connect / $iterations" | bc)
average_time_appconnect=$(echo "scale=$decimal_rounding; $total_time_appconnect / $iterations" | bc)
average_time_pretransfer=$(echo "scale=$decimal_rounding; $total_time_pretransfer / $iterations" | bc)
average_time_redirect=$(echo "scale=$decimal_rounding; $total_time_redirect / $iterations" | bc)
average_time_starttransfer=$(echo "scale=$decimal_rounding; $total_time_starttransfer / $iterations" | bc)
average_time_total=$(echo "scale=$decimal_rounding; $total_time_total / $iterations" | bc)

echo "Averages of response timings:"
echo ""
echo "   time_namelookup: $average_time_namelookup"
echo "      time_connect: $average_time_connect"
echo "   time_appconnect: $average_time_appconnect"
echo "  time_pretransfer: $average_time_pretransfer"
echo "     time_redirect: $average_time_redirect"
echo "time_starttransfer: $average_time_starttransfer"
echo "                    --------"
echo "        time_total: $average_time_total"

经过几次调试,当使用bc求和时,我可以看到问题出在这行上

total_time_namelookup=$(echo "$total_time_namelookup + $time_namelookup" | bc)

但是会抛出

(standard_in) 1: syntax error 

但是我不知道自己在做什么错。

我正在使用sh从终端运行ubuntu

1 个答案:

答案 0 :(得分:4)

您的数值包含一个while特定的十进制分隔符(locale)。 ,只知道bc。通过将包含数字值的字符串转换为.,然后将其发送到tr , '.'。将其转换为字符串。

或者按照三元组的建议,在脚本顶部显式设置bc语言环境:

C

对于更复杂的export LC_ALL=C 操作,您可能需要库支持: https://github.com/leagris/lcnumconv.sh