何でもメモローグ

何か残しながらやるのは大事だよね。後で思い出せるほど記憶力ないし♪

全体表示

[ リスト ]

自動応答(expect)

※yum -y install expect等 expectをインストールしておく。
(1)expectスクリプトとして実行(「which expect」等でexpectコマンドのpathを確認すること)
#!/usr/bin/expect -f

if {$argc != 2} {             ### $argcはexpectスクリプトの引数の数  
   puts "Usage: $argv0 EXP ANS" ### putsはechoと同様。$argv0はスクリプト名
   exit
}

set EXP [lindex $argv 0]       ### 変数定義はsetで行う。第一引数は [lindex $argv 0] と表す。
set ANS [lindex $argv 1]       ### 第二引数は[lindex $argv 1] 
set MSG "this is test."        ### 変数MSGにthis is testという文字列を格納する。

set timeout 5              ###5秒 でタイムアウトする
spawn hoge.sh $MSG         ### spawnのあとに、自動返答させたいコマンド、スクリプトを実行する。
expect $EXP                ### $EXP と等しいメッセージを待ち受ける。
send $ANS                             ### $EXP が表示されたら、$ANSの文字列をシェルに返す
send "\r"                                ###send "\r"でリターン(改行)コードを送る。
interact                  ###制御をシェルに戻す(オマジナイ)

☆解説
基本は
expect "受け文字"
send "送り文字"
send "改行(\r)"


(2)bash script 内で呼び出し
#!/bin/sh
if [ $# -ne 2} ; then               
    echo "Usage: $0 EXP ANS"           
    exit
fi

EXP=$1       
ANS=$2       
MSG="bash-this is test." 

expect -c "                  ### [-c]オプションでexpectを実行する。
puts MSG \"expect-this is test.\" ###expectスクリプトとしての「"」は\でエスケープする。
set timeout 5   
spawn hoge.sh \$MSG      
###$MSGはbashの変数として読まれる。
###\$MSGとすると、expect内で定義した$MSGが読まれる。

expect $EXP
send $ANS
send \"\r\"                 ### expectスクリプトとしての「"」は\でエスケープする。
interact
"                    ###制御をシェルに戻す(オマジナイ)


・・・以下はbashおさらい。

for ループ

#! /bin/sh

for i in 'seq -w 0 100'
do
echo "hoge" >test${i}.txt
sleep 1
done
☆解説
seqコマンドで変数iに0から100まで代入。
「-w」オプションで桁を合わせる。i=[000-100]

引数チェック

#! /bin/sh

if [ $# -ne 1] ; then
echo "usage: $0 arg1"
exit
fi
☆解説
「$#」は引数の数。「-ne」は「等しくない」。
→引数が1でないときはechoコマンド。
「$0」は自スクリプト名。→hoge.sh arg1としなければ終了。等の引数チェックをする。

この記事に

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

.


みんなの更新記事