画像検索結果上位N番目のダウンロードとランダムな壁紙設定

前回までのシェルスクリプト
Google画像検索ダウンロードにサイズと保存ファイル名オプション追加 - へにゃぺんて@日々勉強のまとめ
に以下の機能追加を行いました。

  • 検索結果上位N番目をダウンロード(-nオプション、Nは1以上20以下の整数)

スクリプト

#!/bin/sh

while getopts f:w:h:n: OPT; do
	case $OPT in
		'f' ) FLG_F='TRUE' ; VALUE_F="$OPTARG" ;;
		'w' ) FLG_W='TRUE' ; VALUE_W="$OPTARG" ;;
		'h' ) FLG_H='TRUE' ; VALUE_H="$OPTARG" ;;
		'n' ) FLG_N='TRUE' ; VALUE_N="$OPTARG" ;;
	esac
done

shift $(( $OPTIND - 1 ))

UA=Mozilla/5
URL=http://www.google.com/images?q=$(echo $* | nkf -WwMQ | tr = %)
if [ "$FLG_W" = 'TRUE' -o "$FLG_H" = 'TRUE' ]; then
	URL_OPT="&tbs=isz:ex,iszw:$VALUE_W,iszh:$VALUE_H"
fi

IMG_URLS=$(curl -s -A $UA $URL$URL_OPT | sed 's/>/>\n/g' | sed 's/?/\n/g' | sed 's/&/\n/g' | sed 's/%/\n/g' | grep imgurl)
if [ "$FLG_N" = 'TRUE' ]; then
	IMG_NUM="$VALUE_N"
else
	IMG_NUM='1'
fi

IMG_URL=$(echo "$IMG_URLS" | sed -n "$IMG_NUM"p | cut -d'=' -f2)
if [ "$FLG_F" = 'TRUE' ]; then
	wget -O $VALUE_F -U $UA $IMG_URL
else
	wget -U $UA $IMG_URL
fi

使い方

スクリプトを「gimg.sh」としてダウンロードし、実行権限を付加済みとすると、
今回追加した機能は以下の様に使用できます。


例) 「linux」というキーワードの上位3番目をダウンロード

$ ./gimg.sh -n 3 linux

応用「ランダムに壁紙を設定」

画面解像度が1440x900だとすると、以下のワンライナーで行えます。

$ ./gimg.sh -f wall_paper -w 1440 -h 900 -n "$(($RANDOM%20+1))" 壁紙;display -window root wall_paper
注意
  • 変数として乱数を利用できる「$RANDOM」や、計算結果を取得する「$(())」はbashzsh等の新しめなシェルで利用できる機能です

「sh」等の古いシェルでは利用できません。シェルスクリプトで利用する際にも、「#!/bin/sh」としないようにしてください。

  • 壁紙設定に「display」コマンドを利用しています

コマンドライン上での壁紙設定(ルートウィンドウへの画像表示)の方法は色々あります。
ImageMagickをインストールしていない(displayコマンドが無い)などの際には、下記に示しておりますその他の方法もお試しください。
(もちろん、ImageMagickをインストールして、displayコマンドを使用してもいいです。)