Linux中shell自動互動的使用
自動互動方法二
需求2中要求採用非互動的方式改變登入使用者密碼,嘗試用方法1,無法實現。
這時候聯想到互動資訊的另一個自動輸入方法,管道,通過echo + sleep + | 可以實現這個需求。
#!/bin/bash
(echo "curpassword"
sleep 1
echo "newpassword"
sleep 1
echo "newpassword")|passwd
測試通過,執行這個指令碼,直接把當前使用者的curpassword改成newpassword。
六、自動互動方法三
需求3中要求自動登入root賬號,嘗試方法
這時候嘗試尋找外部幫助,一個shell工具expect可以實現這個功能,其實expect就是一個專門用來實現自動互動功能的工具,expect的語法可以參考相關資料,程式碼如下:
#!/usr/bin/expect
spawn su root
expect "password: "
send "123456\r"
expect eof
exit
測試通過,執行這個指令碼,直接從當前使用者登入到root使用者。
七、方法總結
方法一(重定向)簡單直觀,也經常有實際應用,但是在自動互動領域功能有限。
方法二(管道)也很簡單直觀,有時甚至不用sleep配合就能展現強大的自動互動實力,但是在某些時候也束手無策。
方法三(expect)在功能上是最為強大的,expect本來就是為實現自動互動功能而生,但是缺點是需要安裝expect包,在嵌入式等環境下難以安裝。
三個方法各有優劣,應用的好,都可以讓實際工作中的很多瑣事一勞永逸。(完)
P.S:本人也是剛接觸shell,以上是我在shell學習過程中對shell自動化指令碼的一些初淺的看法和總結,一方面可以把"懶人"從一些重複的雷同的工作量中解脫出來,另一方面在實際應用中可能也會有用武之地。以上3種方法可能存在錯誤或者疏漏,歡迎前輩們批評指正,或者有其他更好的方法希望可以交流探討