我已经创建了一个脚本,基本上得到的状态码的网址。我试图添加状态码,如果它大于399。
元素被正确地附加到for循环块外部的数组中,但没有附加到循环块内部的数组中。(此处的数组是TP)
ARR=('http://google.com' 'https://example.org/olol' 'https://example.org' 'https://steamcommunity.com')
TP=()
TP+=("77")
ERROR=true
# for item in "${ARR[@]}";do curl -I $item | grep HTTP | awk '{print $2}'; sleep 3; echo $item; done;
for item in "${ARR[@]}";
do curl -I $item | grep HTTP | awk '{print $2}'| { read message;
echo "hi $message";
TP+=("57")
if [ $message -gt 399 ]; then
#TP+=("57");
ERROR=false;
echo "$message is greater";
fi
};
sleep 2;
echo $item;
done;
echo "${TP[@]}"
请帮帮忙,我是菜鸟。
1条答案
按热度按时间g52tjvyc1#
当您将结果(例如,从
curl
调用)通过管道传递到另一个命令(例如,grep/awk/read
)时,您正在生成一个子shell;当子外壳存在时,在子外壳内设置的任何变量都将“丢失”。修复当前代码的一个想法是:
其中:
curl|awk
作为子shell被调用时,结果将被提供给当前/父shell中的read
,因此message
变量的内容在当前/父shell的作用域中可用