shell中互動輸入自動化
阿新 • • 發佈:2019-01-05
shell中互動輸入自動化
shell中有時我們需要互動,但是呢我們又不想每次從stdin輸入,想讓其自動化,這時我們就要使shell互動輸入自動化了。這個功能很有用的喲。好好學習。
1 利用重定向
重定向的方法應該是最簡單的
例:
以下的test.sh是要求我們從stdin中分別輸入no,name然後將輸入的no,name打印出來
[[email protected] test]# cat test.sh
#! /bin/bash
read -p "enter number:" no
read -p "enter name:" name
echo you have entered $no, $name
以下是作為輸入的檔案內容:
[[email protected] test]# cat input.data
1
lufubo
然後我們利用重定向來完成互動的自動化:
[[email protected] test]# ./test.sh < input.data
you have entered 1, lufubo
看吧!效果不錯吧!哈哈
2 利用管道完成互動的自動化
這個就是利用管道特點,讓前個命令的輸出作為後個命令的輸入完成的
也用上面例子舉例:
[ [email protected] test]# echo -e "1\nlufbo\n" | ./test.sh
you have entered 1, lufbo
上面中的 "1\nlufbo\n" 中的“\n”是換行符的意思,這個比較簡單的。
3 利用expect
expect是專門用來互動自動化的工具,但它有可能不是隨系統就安裝好的,有時需要自己手工安裝該命令
檢視是否已經安裝:rpm -qa | grep expect
以下指令碼完成跟上述相同的功能
[[email protected] test]# cat expect_test.sh
#! /usr/bin/expect
spawn ./test.sh
expect "enter number:"
send "1\n"
expect "enter name:"
send "lufubo\n"
expect off
注意:第一行是/usr/bin/expect,這個是選用直譯器的意思,我們shell一般選的是 /bin/bash,這裡不是
spawn: 指定需要將哪個命令自動化
expect:需要等待的訊息
send:是要傳送的命令
expect off:指明命令互動結束