1. 程式人生 > >shell程式設計expect的幾個應用例項

shell程式設計expect的幾個應用例項

由於工作需要server間實現自動互動,因此特意在網上找了幾篇關於expect文章進行學習。

之後嘗試實現了幾個常用互動功能的程式,寫成指令碼供大家參考。

expect不是函式也不是命令,是一種程式設計工具語言,主要功能是實現資訊自動互動(例:自動登入server).

usage: expect [-di] [-c cmds] [[-f] cmdfile] [args]

expect巢狀在shell指令碼中實現scp:

#!/bin/sh
echo "input your text name for copying:"
read textname			//得到要scp的檔名
login="yourlogin"		//設定你的login
password="yourpassword"		//設定你的password
servername="yourservername"	//設定你的server
path=`pwd`  			//設定scp檔案所在的path
objectpath="yourobjectpath"	//設定scp檔案到哪個path

expect -c "
spawn scp "$path/$textname" "
[email protected]
$servername:@objectpath" //執行scp操作,這時系統會詢問密碼. expect { \"*assword:*\" { set timeout 300//設定超時時間. send \"$password\r\"//千萬別忘掉回車. } } expect eof"

expect巢狀在shell指令碼中實現ftp:

#!/bin/ksh
login="yourlogin"
password="yourpassword"
ftpserver="yourserverip"	//格式:xxx.xxx.xxx.xxx
path="yourpath" 		//你要在目標server中存放file的path

echo "input your file that will download to njcgpa"
read line
                expect << EOF
                        set timeout 120
                        spawn ftp $ftpserver
                        expect "*Name*"
                        send "$login\r"
                        expect "*assword*"
                        send "$password\r"
                        expect "*ftp*"
                        send "cd $path\r"
                        expect "*250*CWD*"
                        send "put line\r"
                        expect "*complete*"
                        send "bye\r"
                expect eof 
EOF		//EOF必須在行首,行首不能有空格

一個完整的實現自動ftp多個檔案的程式。

功能:將多個檔案ftp到指定server中的指定path中去。

用法:將程式存放在autoftp檔案中。

>./autoftp file1 file2 file3 file4 ...

#!/bin/ksh
login="yourlogin"
password="yourpassword"
ftpserver="yourftpserverIP"
path="yourftppath"
succount=0
allcount=0
while [ $# -gt 0 ]
do
        allcount=`expr $allcount + 1`
        if [ -f $1 ]
        then
                succount=`expr $succount + 1`
                expect << EOF
                        set timeout 120
                        spawn ftp $ftpserver
                        expect "*Name*"
                        send "$login\r"
                        expect "*assword*"
                        send "$password\r"
                        expect "*ftp*"
                        send "cd $path\r"
                        expect "*250*CWD*"
                        send "put $1\r"
                        expect "*complete*"
                        send "bye\r"
                expect eof
EOF
                echo "$1 file was ftp completed!" >> resultlog
        else
                echo "$1 file was not found!" >> resultlog
                countine
        fi
        shift
done
if [ -f resultlog ]
then
        cat resultlog
        rm resultlog
fi
echo "ftp $allcount files, $succount files were finished to ftp!" 

測試:

>touch 1 2 3 4 5 // 新建5個file檔案
>./autoftp 1 2 3 4 55 66 77 5 // 55 66 77為三個不存在的檔案

1 file was ftp completed!
2 file was ftp completed!
3 file was ftp completed!
4 file was ftp completed!
55 file was not found!
66 file was not found!
77 file was not found!
5 file was ftp completed!
ftp 8 files, 5 files were finished to ftp!


該程式目前只能判定檔案是否存在,若不存在則跳過不執行ftp。


相關推薦

shell程式設計expect應用例項

由於工作需要server間實現自動互動,因此特意在網上找了幾篇關於expect文章進行學習。 之後嘗試實現了幾個常用互動功能的程式,寫成指令碼供大家參考。 expect不是函式也不是命令,是一種程式設計工具語言,主要功能是實現資訊自動互動(例:自動登入server).

Async和Await如何簡化非同步程式設計例項讓你徹底明白!

部落格園 引言 C#5.0中async和await兩個關鍵字,這兩個關鍵字簡化了非同步程式設計,之所以簡化了,還是因為編譯器給我們做了更多的工作,下面就具體看看編譯器到底在背後幫我們做了哪些複雜的工作的。 同步程式碼存在的問題 對於同步的程式碼,大家

推薦例項

htm 分布式鎖 風格 r+ 易懂 集群 cti 配置 消息 推薦幾個範例項目 這裏推薦幾個自己寫的範例項目,主要采用SSM(Spring+SpringMVC+Mybatis)框架,分布式架構采用的是(dubbo+zookeeper)。範例項目的好處是簡單易懂,在

: 擴充套件的應用 釋出網路YUM源 vim編輯技巧 原始碼編譯安裝 systemctl控制 總結和答疑

Top NSD SERVICES DAY01 案例1:補充應用技巧 案例2:軟連線與硬連線 案例3:man手冊、zip備份 案例4:自定義yum軟體倉庫 案例5:釋出及測試yum倉庫 案例6:vim效率操作 案例7:編譯安裝軟體包 案例8:使用

擴充套件的應用 釋出網路YUM源 vim編輯技巧 原始碼編譯安裝 systemctl控制 總結和答疑

Top NSD SERVICES DAY01 案例1:補充應用技巧 案例2:軟連線與硬連線 案例3:man手冊、zip備份 案例4:自定義yum軟體倉庫 案例5:釋出及測試yum倉庫 案例6:vim效率操作 案例7:編譯安裝軟體包 案例8:使用

NetLogo程式設計小技巧

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

shell程式設計基礎:多重迴圈例項

鍵盤輸入:10 1 2 3 4 5 6 7 8 9 10 2 3 4 5 6 7 8 9 3 4 5 6 7 8 4 5 6 7 5 6 #!/bin/bash read n for((a=1;a<=n;a++)) do c=n-a+1 for((b=a

shell下的命令

參考部落格: https://www.cnblogs.com/-zyj/p/5760484.html  1. 批量刪除篩選的資料夾 ls -l | grep ^d | xargs rm -rf   2. awk 的簡單使用,批量kill 程序 ps

Shell程式設計---監控多(遠端主機)磁碟使用情況並郵件報警

要求:監控多個(遠端主機)磁碟使用情況並郵件報警 分析: 任何一個分割槽使用到80%就傳送一個郵件幾個人通知提醒他們磁碟的使用情況; 任何一個分割槽使用到90%以上就在郵件主題給出警告(warning); Linux伺服器上傳送郵件程式我們使用sendmail。

資料結構--遞迴的應用(求和,階乘,漢諾塔)

定義     一個函式自己呼叫自己遞迴的條件             必須要有明確的終止條件         所處理的資

shell指令碼增加組,並在每個組裡建立一定的使用者

昨天我們用語言寫了一個關於使用者組和使用者的簡單應用,但是說實話,就九個使用者我已經重複的很煩惱了,於是我就想能不能通過shell指令碼來實現批量增加使用者。於是乎,我今天就想著用shell指令碼去完成昨晚的例子。我們先來回顧一下昨天的例子。 題目:建立幾個組,每個組有一定的成員,並且每個組有一個可以操作的

python中執行shell命令的方法

1.os.system() a=os.system("df -hT | awk 'NR==3{print $(NF-1)}'") 該命令會在頁面上列印輸出結果,但變數不會保留結果,只會保留返回的狀態碼. 2.os.popen() os.popen()返回的是 file read 的物件,但沒有狀

Dialog GreenPAK CMIC的三應用例項

Dialog GreenPAK CMIC的三個應用例項 Dialog的GreenPAK™設計軟體和開發套件,為創新設計工程師們賦能,可以幫助他們輕鬆地建立定製的IC,整合儘可能多的功能,同時將功耗、元件數量和電路板整體尺寸降到最低,實現領先的設計。GreenPAK的經濟有效且佔位空間節省的特點,有助於設計工

【筆記】嵩天-Python語言程式設計-完成兩簡單例項

【根索引】 【Python索引】 目標 使用PyCharm,完成兩個小例項的編寫和執行。一個是溫度轉換,一個是蟒蛇圖形繪製。 過程 1、先設定project目錄,雖然命名不是很正式,主要不太習慣軟體的目錄結構,好在只是熟悉語言和工具,就先把程式碼都放一個目錄下吧。 2、可以開啟多個py檔案,執行時可

shell 程式設計統計兩檔案行數百分比

今日心血來潮,突然感覺shell中重複的命令讓人昏昏欲睡,故有此產出: 直接上乾貨,我的zhi'x指令碼如下: #!/bin/bash . ./subscript.txt for info in ${array[@]} do fstr=`echo $info |

【shelll指令碼程式設計小案例

案例1:批量新增使用者 從檔案users.txt中匯入使用者名稱列表,逐一判斷該使用者是否存在,如果存在則丟擲提示,不存在則新增使用者。 #!/bin/ bash #users.sh read -p "Enter:" PASSWD for UNAME in `cat

VS程式設計好用的Visual Studio外掛推薦。

1、Indent Guides 在成對的括號之間連一條虛線,有了這些輔助線,程式碼結構一目瞭然。VS2017自帶這個功能。 2、AllMargins 2012 使VS2012版本側邊的滑動條變寬,在此區域內顯示對應位置程式碼的預覽,和其它的資訊,並且在成對的括號之間連一條不同顏色的實

併發程式設計基本概念

同步&非同步 同步(Synchronous) 同步方法一旦呼叫必須等待方法呼叫返回後才會繼續後續行動。 非同步(AsyncChronous) 非同步呼叫更像傳遞一個訊息,一旦開始方法呼叫就會返回,呼叫者可以進行後續的操作,在java中非同步方法非同步都會在寧外一個執行緒中執行

HTML Table例項。單元格合併、點選新增行

1.不規則的表,單元格合併 樣式:  原始碼:<---------------------------------------------------------------start----------------------------------------------

【Android】應用重新進入相關的屬性

android:clearTaskOnLaunch=”true” 當重新launch這個task的時候(當通過桌面重新進入這個應用) 會清理帶這個屬性的activity 這個屬性必須在這個task的根Activity(不是棧底,是進入而是這個應用的第一個acitivt