日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

3種shell自動交互的方法2007

 leon0821 2014-04-24
一、背景

    shell腳本在處理自動循環(huán)或大的任務(wù)方面可節(jié)省大量的時間,通過創(chuàng)建一個處理任務(wù)的命令清單,使用變量、條件、算術(shù)和循環(huán)等方法快速創(chuàng)建腳本以完成相應(yīng)工作,這比在命令行下一個個敲入命令要省時省力得多。

    但是有時候我們可能會需要實現(xiàn)和交互程序如ftp,telnet服務(wù)器等進行交互的功能,這時候我們需要用到shell的自動交互功能,本文收集了較常用的三種自動交互方法,并進行了比較和總結(jié)。

二、需求

需求1:
    從一臺linux機器ftp登陸到另一臺linux機器,進行系列操作后關(guān)閉,懶得每次都手動輸入密碼。
需求2:
    改變登錄用戶密碼,懶得每次都輸入新舊密碼。
需求3:
    希望su自動登錄到root賬戶,懶得每次都輸入root密碼。

三、調(diào)試環(huán)境

    終端:SecureCRT
    系統(tǒng):WinXP, CentOS 4.4(VmWare)
    Shell:bash

    注:shell有很多種,B類SHELL(sh, bash, ksh)之間行為相近;C類SHELL(csh, tcsh)之間行為相近,還有zsh和rc等shell,本文的調(diào)試環(huán)境是bash。

四、自動交互方法一

    自動交互最關(guān)鍵的就是交互信息的自動輸入,首先聯(lián)想到文件重定向,在shell編程中有這樣一種用法(參考LINUX與UNIX SHELL編程指南 chapt 5.7):"command << delimiter  從標(biāo)準(zhǔn)輸入中讀入,直至遇到delimiter分界符。"

    重定向操作符command << delimiter是一種非常有用的命令,shell將分界符delimiter之后直至下一個同樣的分界符之前的所有內(nèi)容都作為輸入,遇到下一個分界符, shell就知道輸入結(jié)束了。最常見的delimiter分界符是EOF,當(dāng)然完全可以自定為其他字符。

    對于需求1 要求的自動登陸ftp,并作系列操作,則可以用這種方法進行自動交互。代碼如下:

#!/bin/bash

ftp -i -n 192.168.167.187 << EOF
user hzc 123456
pwd
cd test
pwd
close
bye
EOF

    測試可以發(fā)現(xiàn),如上代碼使用賬號名hzc,密碼123456成功登陸了ftp服務(wù)器,并進入目錄,打印出了pwd。

五、自動交互方法二

    需求2中要求采用非交互的方式改變登錄用戶密碼,嘗試用方法1,無法實現(xiàn)。

    這時候聯(lián)想到交互信息的另一個自動輸入方法,管道,通過echo + sleep + | 可以實現(xiàn)這個需求。

#!/bin/bash

(echo "curpassword"
sleep 1
echo "newpassword"
sleep 1
echo "newpassword")|passwd

    測試通過,運行這個腳本,直接把當(dāng)前用戶的curpassword改成newpassword。

六、自動交互方法三

    需求3中要求自動登錄root賬號,嘗試方法1和方法2,都出現(xiàn)錯誤提示standard in must be a tty。

    這時候嘗試尋找外部幫助,一個shell工具expect可以實現(xiàn)這個功能,其實expect就是一個專門用來實現(xiàn)自動交互功能的工具,expect的語法可以參考相關(guān)資料,代碼如下:

#!/usr/bin/expect
spawn su root
expect "password: "
send "123456\r"
expect eof
exit

    測試通過,運行這個腳本,直接從當(dāng)前用戶登錄到root用戶。

七、方法總結(jié)

    方法一(重定向)簡單直觀,也經(jīng)常有實際應(yīng)用,但是在自動交互領(lǐng)域功能有限。
    方法二(管道)也很簡單直觀,有時甚至不用sleep配合就能展現(xiàn)強大的自動交互實力,但是在某些時候也束手無策。
    方法三(expect)在功能上是最為強大的,expect本來就是為實現(xiàn)自動交互功能而生,但是缺點是需要安裝expect包,在嵌入式等環(huán)境下難以安裝。

    三個方法各有優(yōu)劣,應(yīng)用的好,都可以讓實際工作中的很多瑣事一勞永逸。(完)


P.S:本人也是剛接觸shell,以上是我在shell學(xué)習(xí)過程中對shell自動化腳本的一些初淺的看法和總結(jié),一方面可以把"懶人"從一些重復(fù)的雷同的工作量中解脫出來,另一方面在實際應(yīng)用中可能也會有用武之地。以上3種方法可能存在錯誤或者疏漏,歡迎前輩們批評指正,或者有其他更好的方法希望可以交流探討~~~
 
----07年剛工作時業(yè)余時間的學(xué)習(xí)筆記

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多