今天遇到這樣一個試題,希望求解各位大哥,望大家多多指點啊!!!!
試題的意思如下:
1、要求交互操作,用戶輸入一個數字,小於100的,這個數字代表要建立多少個賬號;
2、互動式操作,讓用戶輸入一串用於批量添加的帳號的前綴;
3、添加后的帳號名的規則是有前綴加數字組成,小於10的前面加零,例如:前綴06,大於或等於10的就不用加0了;
4、互動式設置添加帳號的過期時間;
5、互動式設置要添加帳號的密碼。
這些要在shell腳本實現!
#!/usr/bin/expect
# 導入 Expect 類庫
set hostname
# 設置操作的遠程主機,$argv 類似 Shell 函數中的接收參數
# 則表示第一個接收參數 , 例如 expectExample.sh host1
set username
# 同上,第二個接收參數為登陸用戶名
set passwd
# 同上,第三個接收參數為登陸用戶密碼
set timeout 60
# 設置等待超時為 60 秒
spawn ssh $username@$hostname
# 使用 spawn 命令來激活 ssh 程序,模擬終端的輸出將能夠被 Expect 所讀取,模擬終端也能從 send 輸入到遠程主機
expect {
"yes/no" {send "yes ";exp_continue}
"Password:" {send "$passwd ";}
}
#Expect 語句等待遠程主機的字元串匹配,當匹配到了「yes/no」
#則執行後面的操作 .expect 搜索模式"*password:",其中 * 允許匹配
# 任意輸入,所以對於避免指定所有細節而言是非常有效的。如果遠程主機沒有 action,
#所以 Expect 檢測到該模式后就繼續運行。 一旦接收到提示后,下一行就就把密碼送給當前進程。
send "sudo -s\r"
expect "Password:" {send "$newpasswd\r"}
# 執行 sudo 用戶角色轉換操作
send "copy /etc/sudoers /usr/local/etcsudoers\r"
# 執行實際運維操作
send "exit\r "
send "exit\r "
expect eof {exit 1}
spawn 激活一個 Unix 程序來進行互動式的運行 .
spawn ssh 192.168.1.2
send 向進程發送字元串 send "sudo -s\r"
set 給 Expect 腳本中的變數賦值 set username 「joe」
expect 等待進程收到的遠程主機的輸出,並匹配對應的字元串 , 一旦匹配,執行後續的操作 expect { "yes/no" send "yes" ;}
[火星人
]
linux批量添加用戶帳號已經有302次圍觀
http://coctec.com/docs/service/show-post-729.html