一条命令下载google壁纸,含错误解决方法

该命令是从google图片搜索上搜索wallpaper的大尺寸图片,匹配其中的jpg文件进行下载。

#!/bin/bash
for i in {1..10}; do
    for url in $(wget -O- -U "" "http://images.google.com/images?imgsz=xxlarge&hl=en&q=wallpaper&sa=N&start=${i}&ndsp=10" --quiet | grep -oe 'http://[^"]*\.jpg');
do
        wget $url;
    done
done

上面是google_wallpaper_download.sh脚本的内容。

我们逐行说下这句shell的意思。

1. 这句好理解一个for循环,令i从1到10.

2. 这也是一个for循环, $()这个是说明将里面的内容执行然后逐一赋值给url。

wget 是一个非交互式的网络文件下载工具,如果未安装执行sudo apt-get install wget进行安装。-O指定下载后的输出文件,如果指定的文件是“-“,代表标准输出;-U 指定agent,而非wget自带的。–quiet安静模式 (无信息输出)。

然后通过管道(管道指|)将输出传递给grep命令(在文件或输入中进行查找的命令)-o指示只显示匹配到的东西,-e指示使用正则进行匹配,
‘http://[^"]*\.jpg’是一个正则表达式,这里不介绍了。
3. wget下载匹配到的url。
4,5. done表示for结束。
总结:该命令下载google的搜索结果,匹配jpg图片地址,然后逐一下载。

可是我在使用了,犯了一个错误,特记录如下:

linux下sh执行 syntax error near unexpected token ' 错误解决方法:

将windows下的sh文件放到linux上执行后,会出现如标题的错误。该错误有文件格式引起的,具体来说,有几种方式可以尝试下。

 

在windows下,用ultraedit打开文件,将光标定位到换行处,然后"切换十六进制编辑模式“,可以看到换行处的值为”0D 0A",altraedit最下的工具栏可以看到“DOS”的文件样式。altra edit有带"DOS转UNIX“的功能,转换下,即可在最下的工具栏为"UNIX"字样,切换十六进制编辑模式看到的换行处的值就为"0A"字样,这时传递上去,执行sh就没有问题了。


linux自身有带dos2unix的命令,转换一下,这个没有试过,不过应该可行。



你可能感兴趣的:(bash)