我的目标是从API检索数据。该api使用curl返回已售出显卡的名称。在这里,第一个代码(#1)运行并处于活动状态,但是第二个代码(由于我引入了一个boocle for)不能工作。然而,在我看来,两者是相似的。请问,有什么不同,为什么第二个程序不检索数据,如果有任何建议来解决它。这个想法,我认为for循环的输出必须声明给调用函数,这样curl才能完成工作,我不知道。提前感谢。# 1
#!/bin/bash
#Récupération des informations de vente des Carte graphiques
curl=$(which curl)
rtx3060=$(curl http://0.0.0.0:5000/rtx3060)
rtx3070=$(curl http://0.0.0.0:5000/rtx3070)
rtx3080=$(curl http://0.0.0.0:5000/rtx3080)
rtx3090=$(curl http://0.0.0.0:5000/rtx3090)
rx6700=$(curl http://0.0.0.0:5000/rx6700)
function graphic_card_count() {
{
echo "$(date)"
echo "RTX3060: $rtx3060"
echo "RTX3070: $rtx3070"
echo "RTX3080: $rtx3080"
echo "RTX3090: $rtx3090"
echo "RX6700: $rx6700"
}
}
graphic_card_count >> sales.txt
输出类似如下:
Sat Nov 26 15:56:02 UTC 2022
RTX3060: 1
RTX3070: 10
RTX3080: 10
RTX3090: 18
RX6700: 13
现在第二个代码:# 2
#!/bin/bash
#Retrieval of graphics card sales information
graphic_cards=("rtx3060" "rtx3070" "rtx3080" "rtx3090" "rx6700")
curl_var="curl http://0.0.0.0:5000/"
# a for loop that will iterarte through the 'graphic_cards'
# and add the name_card at the end of the curl_var.
function graphic_cards_names(){
for name_card in "${graphic_cards[@]}"; do
echo "$name_card = $(${curl_var}${name_card})"
done
}
function main() {
echo "$(date)"
echo "RTX3060: $rtx3060"
echo "RTX3070: $rtx3070"
echo "RTX3080: $rtx3080"
echo "RTX3090: $rtx3090"
echo "RX6700: $rx6700"
}
main >> sales.txt
顺便说一下,我试着在main中调用graphic_card_function,但输出类似于echo, curl没有完成
的工作。不要动态创建变量。使用数组。
不要将命令存储为变量。使用功能。
只是date
。不使用echo $(command)
。只需命令
你的代码可以像这样:
#!/bin/bash
#Retrieval of graphics card sales information
graphic_cards=("rtx3060" "rtx3070" "rtx3080" "rtx3090" "rx6700")
curl_it() {
curl http://0.0.0.0:5000/"$1"
}
get_graphic_cards_names() {
graphic_cards_names=()
for name_card in "${graphic_cards[@]}"; do
graphic_cards_names+=("$(curl_it "$name_card")")
done
}
main() {
date
for idx in "${!graphic_cargs[@]}"; do
echo "${graphic_cargs[idx]^^}: ${graphic_cards_names[idx]}"
done
}
get_graphic_cards_names
main >> sales.txt