botです。もうそのまんま。
こういうのはあんまり出しちゃいけない気もするけども出しちゃう。なぜなら汎用性が薄いから。
このスクリプトの動作サンプルはココ。フォローしてあげてください。話しかけても学習しない上にテスト中だから、ちょいちょいつぶやき消えたりしますがw
そんなわけで、スクリプト。
#!/bin/bash
#台詞生成関数
prompter () {
count=1
#10分毎にリストを切り替え
case “$mt” in
0* ) mt=00 ;;
1* ) mt=10 ;;
2* ) mt=20 ;;
3* ) mt=30 ;;
4* ) mt=40 ;;
5* ) mt=50 ;;
esac
for (( i = 0; i < 4; i++ ))
{
#テキスト行数取得
ttnum=`wc -l </home/user/dir/$hr/$mt/$count.txt`
#1行抽出・配列格納
prpt[i]=`sed -n $((($RANDOM % $ttnum) + 1))p /home/user/dir/$hr/$mt/$count.txt`
count=$((count + 1))
}
for (( i = 0; i < ${#prpt[*]}; i++ ))
{
#テキスト生成
fprpt=”$fprpt””${prpt[i]}”
}
IPS=`sed -n $1p /home/user/dir/ips.list`
curl -u $IPS -d status=”$fprpt” http://twitter.com/statuses/update.xml
}#時・分変数
hr=`date ‘+%H’`
mt=`date ‘+%M’`
wkd=`date ‘+%w’`#曜日チェック
case “$wkd” in
[1-5] ) echo “平日” ;;
* ) hr=”h”$hr ;;
esac
#特定時間帯チェック
case “$hr” in
h0[2-5] | h1[0-3] | h1[7-9] ) ck=1 ;;
0[2-5] | 1[0-3] | 1[7-9] ) ck=1 ;;
* ) ck=0 ;;
esac#実行部
#特定時間帯チェックがオン(1)なら投稿回数半減
if [ $ck -eq 1 ]
then
case “$mt” in
?[0-4] ) prompter 1 ;;
?[5-9] ) echo “1回休み” ;;
esac
else
prompter 1
exit 1
fi
prompter関数は最終実行部分なのでまずは無視してください。
とりあえず、処理の流れを軽く説明すると、
スクリプト実行で、まず最初に時・分・曜日をそれぞれhr、mt、wkd変数に格納。
次に変数wkdに格納された数値をcaseで評価、平日と土日を振り分け。
※平日の振り分けがecho “平日”となっていますが、これはテスト段階でそうしていたものを放置しているだけです。cronで実行した場合、画面には何も反応は帰ってこないので。
で、ここで振り分け結果が土日(0か6)だった場合、変数hrに格納された数値の頭にホリデイのhを一文字追加。
次に特定時間帯チェックで変数hrに格納された数値・文字列を評価。変数ckに0か1を格納。
if文で変数ckを評価、真ならcaseで変数mtを評価し変数mtに格納された数値の末尾が0〜4ならprompter関数を引数1で実行。
偽ならprompter関数を引数1で実行。
これで後はprompter関数が適当に乱数を使ってつぶやいてくれます。
ちょっと今回は説明ここまでにしときます。取り急ぎリストに修正入れないといけないので。
次回はprompter関数がなにやってるのか説明します。説明無くても大体分かると思いますが。
役に立ったならご褒美くらいくださってもよろしくってよ。
ホラこんな所にアマゾンのウィッシュリストが。
[…] では実体参照にするべき文字をサラッと生で書いてて一部消えてたので、その辺の訂正も兼ねて。 昨日のはココ。既に修正済。【シェルスクリプトでTwitterに投稿。リストで台詞生成編】 […]