bash for 循环与 grave 命令

标签 bash shell curl for-loop awk

Web 服务器包含几个日志文件,我尝试使用 curl 和 awk 编写一些 shell 脚本,以根据某种模式查找文件,然后下载。 可能有更聪明的方法来完成所有这些事情(还有 awk 部分——我是初学者),但我有点决定在 for 循环中完成下载部分,当我直接在 shell 中运行它时,它确实下载了文件。

# for line in `curl -X GET -k  --user $user:$pass $link 2>/dev/null | awk -v pat="$pat2" '$0~ "/"pat".log"'| awk -v val=$host1 -F '"' '{print val $2}'`; 
do 
echo "Downloading $line"; 
curl -O -X GET -k  --user $user:$pass $line 2> /dev/null; 
done  

现在我正在努力将 for 循环集成到脚本中。这是我目前的尝试,但它以某种方式不执行我刻录并放入列表 var 的命令。因此,我们将不胜感激任何有关如何完成该部分或展示更清洁方法的建议。

test_pass=`curl -X GET -k  --user $user:$pass $link 2>/dev/null | grep '401 - Authorization Required' | cut -d '>' -f2 | cut -d ' ' -f1 -`
failed="401"
list=$(curl -X GET -k  --user $user:$pass $link 2>/dev/null | awk -v pat="$pat2" '$0~ "/"pat".log"'| awk -v val=$host1 -F '"' '{print val $2}')

if  [[ "$test_pass" = "$failed" ]]; then
 echo "Wrong Password."
 exit 1
else
 echo "Starting Download"
for line in $list; do
 echo "Downloading $line"
 curl -O -X GET -k --user $user:$pass $line 2> /dev/null
done
fi

最佳答案

我建议使用 bash arrays

形式为 var=($(cmd)) 的赋值套$var到一个数组,其中包含 cmd 返回的每个结果的一个条目

${var[@]}然后将扩展到数组中的所有条目,以空格分隔

请注意,如果您尝试获取的文件名中有空格(或更糟的任何内容,例如换行符),则需要做更多的工作

这是您的代码,稍作修改以生成 $list一个数组:

test_pass=`curl -X GET -k  --user $user:$pass $link 2>/dev/null | grep '401 - Authorization Required' | cut -d '>' -f2 | cut -d ' ' -f1 -`
failed="401"
list=($(curl -X GET -k  --user $user:$pass $link 2>/dev/null | awk -v pat="$pat2" '$0~ "/"pat".log"'| awk -v val=$host1 -F '"' '{print val $2}'))

if  [[ "$test_pass" = "$failed" ]]; then
 echo "Wrong Password."
 exit 1
else
 echo "Starting Download"
for line in "${list[@]}"; do
 echo "Downloading $line"
 curl -O -X GET -k --user $user:$pass "$line" 2> /dev/null
done
fi

关于bash for 循环与 grave 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20893334/

相关文章:

linux - 用于在具有索引的文件中查找唯一值的 bash 脚本

linux - 如何将每 100 个文件组合在一个目录中?

ruby - 如何让 'system("source ~/.bash_profile")' 与当前 shell 一起工作?

php - 为什么可执行文件仅在作为 http 请求运行时才能找到共享库

curl - NSS : client certificate not found (nickname not specified)?

Python 使用系统 SSL 证书?

php - Android Google Cloud Messaging - 推送已发送到设备,但设备未显示推送通知

python - 在 python 中运行 shell 脚本

mysql - 在文本文件中添加两列并加载到 sql

bash - 向 bashrc 添加别名以运行多个命令并传递一个变量?