Linux 将shell脚本的参数分解为多个原因会导致错误

Linux 将shell脚本的参数分解为多个原因会导致错误,linux,bash,shell,Linux,Bash,Shell,我有一个使用phantom js函数的shell脚本 Phantom JS函数在太多url上运行时崩溃显然,我试图将其重写为一次只执行一部分,但我得到一个错误,$url变量没有更改,因此它总是复制相同的url,尽管它似乎记录了站点的实际大小 如果能帮助我克服这个错误,那将是光荣的 #!/bin/bash echo "Importing URLs..." file=sizeurls.csv url="" while IFS= read -r line do url+=" " u

我有一个使用phantom js函数的shell脚本

Phantom JS函数在太多url上运行时崩溃显然,我试图将其重写为一次只执行一部分,但我得到一个错误,$url变量没有更改,因此它总是复制相同的url,尽管它似乎记录了站点的实际大小

如果能帮助我克服这个错误,那将是光荣的

#!/bin/bash
echo "Importing URLs..."
file=sizeurls.csv
url=""
while IFS= read -r line
do
     url+=" "
     url+=$line
done < "$file"
echo "Gathering page sizes..."
phantomjs yslow.js --info basic --format plain $url | grep 'url\|size' > temp.txt
echo "Formatting data..."
sed -i 's/size://g' temp.txt
sed -i 's/url://g' temp.txt
paste - - -d, < temp.txt > pagesize.csv
echo "Done!"
#/bin/bash
echo“导入URL…”
文件=sizeurls.csv
url=“”
而IFS=读取-r行
做
url+=“”
url+=$line
完成<“$file”
echo“收集页面大小…”
phantomjs yslow.js--基本信息--格式为普通$url | grep'url\| size'>temp.txt
echo“格式化数据…”
sed-i's/size://g'temp.txt
sed-i's/url://g'temp.txt
粘贴----d,pagesize.csv
回声“完成!”
一次应该完成一部分的版本,它可能会被致命地拧坏,因为我只是把它弄乱了一点,我不确定我是否将它返回到以前的状态

#!/bin/bash 
echo "Importing URLs..."
file=sizeurls.csv
url=""
i=0;

while  IFS= read -r line  
do

  while [ $i -le 10 ] #10 at a time i < 10
  do
     url+=" "
     url+=$line
     i=$((i+1));

  done < "$file"

phantomjs yslow.js --info basic --format plain $url | grep 'url\|size' >> temp.txt
#echo "Formatting data..."
sed -i 's/size://g' temp.txt
sed -i 's/url://g' temp.txt
paste - - -d, < temp.txt >> pagesize.csv
done < "$file"
i = 0

echo "Done!"
#/bin/bash
echo“导入URL…”
文件=sizeurls.csv
url=“”
i=0;
而IFS=读取-r行
做
而[$i-le 10]#每次10我<10
做
url+=“”
url+=$line
i=$((i+1));
完成<“$file”
phantomjs yslow.js--基本信息--格式普通$url | grep'url\| size'>>temp.txt
#echo“格式化数据…”
sed-i's/size://g'temp.txt
sed-i's/url://g'temp.txt
粘贴----d,>pagesize.csv
完成<“$file”
i=0
回声“完成!”

这可能会给你一些想法(未经测试,但看起来是正确的)。处理被移动到一个函数,在该函数中,每隔10个URL调用一次,如果有剩余的URL,则在末尾再次调用

#!/bin/bash
echo "Importing URLs..."
file=sizeurls.csv
rm pagesize.csv

ProcessURLs () {
    echo "Gathering page sizes..."
    phantomjs yslow.js --info basic --format plain $@ | grep 'url\|size' > temp.txt
    echo "Formatting data..."
    sed -i 's/size://g' temp.txt
    sed -i 's/url://g' temp.txt
    paste - - -d, < temp.txt >> pagesize.csv
}


url=""
count=0
while IFS= read -r line
do
    url+="$line$ "
    (( count++ ))
    # Procss URLs in 10-URL chunks
    if [[ $count -ge 10 ]] ; then
        ProcessURLs $url
        url=''
        count=0
    fi
done < "$file"

# Handle any remaining URLs
[ -n "$url" ] && ProcessURLs $url

echo "Done!"
#/bin/bash
echo“导入URL…”
文件=sizeurls.csv
rm pagesize.csv
ProcessURL(){
echo“收集页面大小…”
phantomjs yslow.js--基本信息--格式普通$@| grep'url\| size'>temp.txt
echo“格式化数据…”
sed-i's/size://g'temp.txt
sed-i's/url://g'temp.txt
粘贴----d,>pagesize.csv
}
url=“”
计数=0
而IFS=读取-r行
做
url+=“$line$”
((count++)
#在10-URL块中处理URL
如果[$count-通用电气10]];然后
ProcessURL$url
url=“”
计数=0
fi
完成<“$file”
#处理任何剩余的URL
[-n“$url”]&处理url$url
回声“完成!”

为什么不一次只做一个呢

#!/bin/bash
echo "Importing URLs..."
file=sizeurls.csv

echo "Gathering page sizes..."
while IFS= read -r url
do
  phantomjs yslow.js --info basic --format plain $url | grep 'url\|size'
done < "$file" > temp.txt

echo "Formatting data..."
sed -i -e 's/size://g' -e 's/url://g' temp.txt
paste - - -d, < temp.txt > pagesize.csv

echo "Done!"
#/bin/bash
echo“导入URL…”
文件=sizeurls.csv
echo“收集页面大小…”
而IFS=read-r url
做
phantomjs yslow.js--基本信息--格式普通$url | grep'url\| size'
完成<“$file”>temp.txt
echo“格式化数据…”
sed-i-e's/size://g'-e's/url://g'temp.txt
粘贴----d,pagesize.csv
回声“完成!”

这是我的第一个想法,但由于不知道phantomjs的性能如何,我不能排除让它“批量”处理的优势。输出为0.2K(203字节),0.2K(203字节),这是工作:l它只显示一个站点十次:/I我刚刚注意到它调用函数后忘记重置计数-现在我在那里添加了count=0,应该工作得更好。