1. 程式人生 > >Linux中shell自動互動的使用

Linux中shell自動互動的使用



自動互動方法二

需求2中要求採用非互動的方式改變登入使用者密碼,嘗試用方法1,無法實現。

這時候聯想到互動資訊的另一個自動輸入方法,管道,通過echo + sleep + | 可以實現這個需求。

#!/bin/bash

(echo "curpassword"

sleep 1

echo "newpassword"

sleep 1

echo "newpassword")|passwd

測試通過,執行這個指令碼,直接把當前使用者的curpassword改成newpassword

六、自動互動方法三

需求3中要求自動登入root賬號,嘗試方法

1和方法2,都出現錯誤提示standard in must be a tty

這時候嘗試尋找外部幫助,一個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種方法可能存在錯誤或者疏漏,歡迎前輩們批評指正,或者有其他更好的方法希望可以交流探討

~~~