1. 程式人生 > >linux shell和expect自動互動混合編碼

linux shell和expect自動互動混合編碼

因為使用到sftp,只能用互動方式輸入密碼,但是人工互動又不方便,想考慮自動,查詢資料發現expect方式可以實現

一、安裝expect

root 許可權下,yum安裝命令:

yum -y install expect

二、

#!/bin/bash 
pwd='123456'
ls_date=`date +%Y-%m-%d`
expire_me="R_rhp-report_ALL_daily_"${ls_date}".txt"
curdir=$(cd $(dirname $0); pwd)
echo $pwd 
echo $expire_me
echo $curdir
/usr/bin/expect <<-EOF
spawn sftp 
[email protected]
; expect { "[email protected]'s password:" {send_user $pwd;send "$pwd\r";exp_continue} "sftp>" {send "get $expire_me $curdir\rquit\r";exp_continue} } expect eof; EOF exit

解釋:

#!/bin/bash  =>  shell指令碼執行,如果不需要shell,而是全部expect,則可以:#!/usr/bin/expect

/usr/bin/expect <<-EOF => 此處開始執行expect指令碼,記住EOF前面的“-”

expect中最關鍵的四個命令是send,expect,spawn,interact。

send:用於向程序傳送字串 
expect:從程序接收字串 
spawn:啟動新的程序 
interact:允許使用者互動

1、spawn命令是Expect的初始命令,它用於啟動一個程序,之後所有expect操作都在這個程序中進行,如果沒有spawn語句,整個expect就無法再進行下去了

spawn sftp [email protected];  =>啟動expect操作程序

2、expect 是針對需要互動的地方進行自動傳送訊息,{ 大扣號前面必須要有空格前面引號內的內容是互動介面等待輸入的匹配字串,{} 內的是互動輸入的內容,

a、send_user 等同於shell裡的echo 顯示用,

b、send 傳送資料,最後的\r必需,說明輸入密碼並回車了

c、exp_continue 繼續處理下一步命令

"kaifatest@reports.afilias.info's password:" {send_user $pwd;send "$pwd\r";exp_continue}

進入sftp後,需要獲取所需檔案並退出,因為都是在"sftp>"下面處理,所以兩天命令放一起:

"sftp>" {send "get $expire_me $curdir\rquit\r";exp_continue}

expect eof =>此命令和spawn 是匹配的,spawn程序結束後會向expect傳送eof,表示退出spwan

EOF 解除expect指令碼執行,跳出到shell執行環境

以下是手工命令操作步驟:

[[email protected] ~]$ sftp [email protected]

Connecting to reports.afilias.info...
[email protected]'s password: 
sftp> 

相關推薦

linux shellexpect自動互動混合編碼

因為使用到sftp,只能用互動方式輸入密碼,但是人工互動又不方便,想考慮自動,查詢資料發現expect方式可以實現一、安裝expectroot 許可權下,yum安裝命令:yum -y install expect二、#!/bin/bash pwd='123456' ls_d

linux shell使用expect實現sftp的自動互動

<pre name="code" class="plain">vim exec_expect_sftp.sh #/usr/bin/expect -f #引數1 usrname 引數2 passwd 引數3 ip 引數4 dir set userna [linde

expect實現shell指令碼的自動互動

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

python, linux shell 使用expect模組自動輸入密碼

Pexpect 是一個自動控制的 Python 模組,可以用來ssh、ftp、passwd、telnet 等命令列進行自動互動。 官方網站是 http://www.noah.org/ 通過它,可以實現類似 expect 的操作。 例如我們可以用它來寫python指令碼

從新手到系統管理員(一):理解Linux Shell基本的Shell指令碼

本文由 [茶話匯] – [Qing] 編譯自 [Avishek Kumar] 轉載請註明出處 關於GNU/Linux的架構和shell所處的位置,圖片比語言表述的更加清楚,如下圖所示。 理解Linux Shell Shell:Shell是基於命令列的直譯器,它連線使用者和作業系統,允許通過編寫指令

如何理解Linux Shell基本Shell指令碼語言?

 理解Linux Shell: shell:一個命令列直譯器,通過執行命令或指令碼,幫助使用者與作業系統打交道。 process:程序,使用者執行的任務是程序,但程序不只是任務。 file:檔案放在硬碟上,包含使用者所有的資料。 x-windows(又稱windows):Linux的一種模式,使螢幕

linux shell 安裝模組自動跳過確認

我們在搭建專案執行環境時,往往會用到shell指令碼,不然每次安裝都去手動一行一行命令去敲,費時費力。 下面有一個例項指令碼,install.sh,內容如下(以Ubuntu為例,centos解決辦法一

linux shell ssh實現自動登入,並且執行一些操作並返回到當前主機

#!/usr/bin/expect -f #-------------------------------------------------- about us # product: monitorone # Author:matthew # Last Modified:

linux shell linux 命令的區別?windows shell windows 命令呢?

shell翻譯成殼的意思,它是包裹在linux核心外層的,一個可通過一系列的linux命令對作業系統發出相關指令的人機介面。 shell可以通過其條件語句和迴圈語句等,把一系列linux命令結合在一起

Linux Shell--改變目錄/自動補齊/命令列的歷史記錄/快捷鍵

改變目錄 ‘cd’(改變目錄,change directory) ‘~’就是您的 home 目錄的簡寫形式。理論上,這也可以應用在命令’cd’上。無論當前路徑在哪裡,cd ~ 將回到您的 home 目錄。其實還可以簡化,只要鍵入 cd ,就可以返回 ho

使用expect實現shell自動互動

shell指令碼需要互動的地方可以使用here文件是實現,但是有些命令卻需要使用者手動去就互動如passwd、scp 對自動部署免去使用者互動很痛苦,expect能很好的解決這類問題。 expect的核心是spawn expect send set spawn 呼叫

shell 從命令列提示輸入,自動輸入,自動互動

讓shell提示輸入一個變數,賦值個MY_FILE_NAME vim input.sh #!/bin/bash read -p "Please input a filename1:" MY_FILE

Linuxshell自動互動的使用

 自動互動方法二 需求2中要求採用非互動的方式改變登入使用者密碼,嘗試用方法1,無法實現。 這時候聯想到互動資訊的另一個自動輸入方法,管道,通過echo + sleep + | 可以

實用指令碼----Linux下JdkTomcat自動安裝shell指令碼總結

一、JDK 自動安裝指令碼 jdk自動安裝bash shell指令碼,截止今天(2014/10/15)親測可用: sudo su #切換到root許可權 mkdir /usr/local/java cd /usr/local/java #download jdk 1.7.67 wget --no-ch

使用spawnexpect實現自動互動

有時候我們使用命令列進行互動時,不想頻繁的做一些重複的事情,例如:每次ssh遠端登入時都需要輸入密碼。使用spawn和expect可以自動完成一些互動。 一個自動輸入密碼的簡單指令碼 #!/u

UNIX/LINUX使用expect實現人機自動互動功能

expect用法 [#!/usr/bin/expect] 這一行告訴作業系統腳本里的程式碼使用那一個shell來執行。這裡的expect其實和linux下的bash、windows下的cmd是一類東西。 注意:這一行需要在指令碼的第一行。 [

linuxshell自動互動

你瞭解Linux系統麼?你是Linux系統的應用者麼?如果你要學習linux,你可能會遇到Linux Shell自動互動問題,這裡將介紹Linux Shell自動互動的解決方法,在這裡拿出來和大家分享一下。 一、背景 shell指令碼在處理自動迴圈或大的任務方面可節省

實現Linux Shell自動互動的三種方法----本人備註

spawn su root   expect password:   send 123456r  expect eof  exit     測試通過,執行這個指令碼,直接從當前使用者登入到root使用者。 七、方法總結 方法一(重定向)簡單直觀,也經常有實際應用,但是在自動互動領域功能有限。 方法二(管道

linux shell自動互動

1、使用expect工具,如: 1)自動登陸 #!/usr/bin/expect spawn ssh 使用者@IP expect { "yes/no" { send "yes\r"; exp_continue} "password:" { send "密碼\r";

Linux Shell自動互動的三種方法

四、自動互動方法一 自動互動最關鍵的就是互動資訊的自動輸入,首先聯想到檔案重定向,在shell程式設計中有這樣一種用法(參考Linux與UNIX SHELL程式設計指南 chapt 5.7):"command << delimiter  從標準輸入中讀入,直至遇