れれ?? Qiitaのフォント変わった?
さて、今日はexpectを使います。
expectコマンドとは
コマンドの返答を識別して次の入力を自動的に行うコマンドー
expect -c "
spawn [実行したいコマンド]
expect [コマンドの返答]
send -- [次のコマンド]
"
といった感じで使います。
実装例1:Linuxにユーザーを追加
利用するコマンド
- expect
- useradd
- passwd
事前にexpectをインストール
yum install expect
シェルスクリプトを作成
set_user.sh
#!/usr/bin
useradd UserName
expect -c "
spawn passwd UserName
expect \"New password:\"
send -- \"hogehoge\n\"
expect \"Retype new password:\"
send -- \"hogehoge\n\"
expect \"passwd: all authentication tokens updated successfully.\"
send -- \"exit\n\"
"
```
で、実行
```
$ chmod +x set_passwd.sh
$ ./set_passwd.sh
```
## 実装例2:CSVのデータを元にLinuxにユーザーを追加
**仕様**
1. [ユーザー名]と[パスワード]をCSVに記入
2. csv内の値を引数に、useradd, passwdを順次実行
**実装**
ユーザーとパスワードをhoge.csvに記入
こんな時vim便利ね☆
```csv:hoge.csv
user1,hogehoge
user2,fugafuga
user3,hafuhafu
user4,puripuri
```
シェルスクリプトを作成
```bash:set_user.sh
#!/usr/bin/
csvfile=hoge.csv
for line in `cat ${csvfile} | grep -v ^#`
do
user=`echo ${line} | cut -d ',' -f 1`
pass=`echo ${line} | cut -d ',' -f 2`
useradd $user
expect -c "
spawn passwd ${user}
expect \"New password:\"
send -- \"${pass}\n\"
expect \"Retype new password:\"
send -- \"${pass}\n\"
expect \"passwd: all authentication tokens updated successfully.\"
send -- \"exit\n\"
"
done
```
で、実行
```
$ chmod +x set_passwd.sh
$ ./set_passwd.sh
```
以上
# 追記
本当はLinuxのユーザーのパスワードを200件ほど書き換えたくて効率的な方法を探していた。。
今回はexportを利用したが、記事を書き終えてすぐ chpasswdなるコマンドーの存在を知っていま絶望している........。。。。。
```
chpasswd < testpass.txt
```
[参考:ユーザパスワード一括変更 ~Linux編~](http://orebibou.com/2014/04/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%91%E3%82%B9%E3%83%AF%E3%83%BC%E3%83%89%E4%B8%80%E6%8B%AC%E5%A4%89%E6%9B%B4-%EF%BD%9Elinux%E7%B7%A8%EF%BD%9E/)