1. 程式人生 > >shell中自動互動的方法

shell中自動互動的方法

第一種:輸入重定向Here Document

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

Here Document 是 Shell 中的一種特殊的重定向方式,用來將輸入重定向到一個互動式 Shell 指令碼或程式。

它的基本的形式如下:

command << delimiter
    document
delimiter

它的作用是將兩個 delimiter 之間的內容(document) 作為輸入傳遞給 command。

注意:

  • 結尾的delimiter 一定要頂格寫,前面不能有任何字元,後面也不能有任何字元,包括空格和 tab 縮排。

  • 開始的delimiter前後的空格會被忽略掉。

#!/bin/bash

ftp -i -n 192.168.167.187 << EOF
user hzc 123456
pwd
cd test
pwd
close
bye
EOF
    測試可以發現,如上程式碼使用帳號名hzc,密碼123456成功登陸了ftp伺服器,並進入目錄,打印出了pwd。

第二種:管道,echo + sleep + |

    互動資訊的另一個自動輸入方法,管道,通過echo + sleep + | 。

#!/bin/bash

(echo "curpassword"
sleep 1
echo "newpassword"
sleep 1
echo "newpassword")|passwd
即:執行passwd命令後,輸入curpassword,1秒後輸入newpassword,1秒後再次輸入newpassword,達到把當前使用者的curpassword改成newpassword。

第三種:expect命令

    expect就是一個專門用來實現自動互動功能的工具,expect的語法可以參考相關資料,程式碼如下:

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

指令碼命名為xx.exp

第四種:Here Document結合expect

expect <<!
這中間都是expect命令
!

例如:

expect<<!
    spawn sudo chown -R adminHard:adminHard $newdir
    expect {
    "*passwor*" {send "$COMPILE_SERVER_SSH_PASSWORD\n" ; exp_continue}
    }

!

注:expect命令

[set timeout 30]     
    基本上認識英文的都知道這是設定超時時間的,現在你只要記住他的計時單位是:秒   
    
[spawn ssh -l username 192.168.1.1]    

spawn command命令會fork一個子程序去執行command命令,然後在此子程序中執行後面的命令;   

spawn是進入expect環境後才可以執行的expect內部命令,如果沒有裝expect或者直接在預設的SHELL下執行是找不到spawn命令的。所以不要用 “which spawn“之類的命令去找spawn命令。好比windows裡的dir就是一個內部命令,這個命令由shell自帶,你無法找到一個dir.com 或 dir.exe 的可執行檔案。    

    它主要的功能是給ssh執行程序加個殼,用來傳遞互動指令。   
   
[expect "password:"]   
    這裡的expect也是expect的一個內部命令,有點暈吧,expect的shell命令和內部命令是一樣的,但不是一個功能,習慣就好了。這個命令的意思是判斷上次輸出結果裡是否包含“password:”的字串,如果有則立即返回,否則就等待一段時間後返回,這裡等待時長就是前面設定的30秒   
   
[send "ispass\r"]   
    這裡就是執行互動動作,與手工輸入密碼的動作等效。   
    溫馨提示: 命令字串結尾別忘記加上 “\r”,如果出現異常等待的狀態可以核查一下。   
   
[interact]    

    執行完成後保持互動狀態,把控制權交給控制檯,這個時候就可以手工操作了。如果沒有這一句登入完成後會退出,而不是留在遠端終端上。如果你只是登入過去執行一段命令就退出,可改為[expect eof]

expect可以讓你使用“-c”選項,直接在命令列中執行它,例如:

expect -c '
        spawn git pull
        expect {
        "Usernam*" {send "[email protected]\n"; exp_continue }
        "Passwor*" {send "$GIT_CODE_PASSWORD\n" ; exp_continue}
        }
        '

相關推薦

shell自動互動方法

第一種:輸入重定向Here Document重定向操作符command << delimiter是一種非常有用的命令,shell將分界符delimiter之後直至下一個同樣的分界符之前的所有內容都作為輸入,遇到下一個分界符, shell就知道輸入結束了。最常見的d

(轉)shelltest命令方法詳解

目的 判斷字符串 演示 警告 gic 一個數 平臺 oracl 差異 test命令用法。功能:檢查文件和比較值 原文:https://www.cnblogs.com/guanyf/p/7553940.html    1)判斷表達式   if test (表達式為真)

Linux shell自動完成登錄

分享 ont 指定 png 服務 ict 密碼 操作 uri 在寫shell腳本時,需要登錄到不同的服務器上執行相關命令,在未建立信任之前如何批量操作。 1、ssh 首次登錄服務器時會提示RSA key fingerprint輸入yes/no,可以通過

shell傳送郵件方法小結

1.mail工具 mail是unix-like中傳送和接收郵件的程式。linux的每一個賬戶都有一個信箱/var/spool/mail/wahaha(未讀郵件),還有一個收件箱~/mbox(已讀郵件會

linux shell自動互動

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

Linuxshell自動互動的使用

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

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

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

Linux Shell自動互動的三種方法

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

shellscp自動輸入密碼

shell``` #!/bin/bash des_pass=testtest expect -c " spawn scp target/aaa-0.0.1.war [email protected]/* */:/home/GameUser/MagicvesselUserWeb/aaa-releas

[ SHELL編程 ] shell編程數值計算方法實例

最長 否則 style += int 完整 精度 font pan SHELL編程中經常會涉及到數值的相關計算,有時候對於這些計算命令的時候場景容易忘記或者混淆,這裏針對常用的計算做一個總結。主要包括let、bc、expr、(())等。 1、let 使用格式

[ SHELL編程 ] shell各種括號的使用方法

也會 保留字 val 返回值 之間 數值 dir 常用 過去 轉載自:http://www.jb51.net/article/60326.htm 在這裏我想說的是幾種shell裏的小括號,大括號結構和有括號的變量,命令的用法,如下:1.${var} 2.$(cmd) 3.(

利用Django的url方法實現地址動態拼接自動生成超鏈接地址

蝴蝶 控制 可選 編寫 alt .html url pytho 條件 目標 建立一個圖書列表頁面,顯示圖書名列表,並實現點擊書名跳轉到圖書詳細頁面,顯示圖書詳細信息。 URL方法簡介 功能:返回一個絕對路徑的引用(不包含域名的URL);該引用匹配一個給定的視圖函數和 一

[轉] linux下shell使用上下鍵翻出歷史命名時出現^[[A^[[A^[[A^[[B^[[B的問題解決,Linux使用退格鍵時出現^H解決方法

XA TP brk 因此 上下 參數 csdn def 無法 [From] https://www.zmrbk.com/post-2030.html https://blog.csdn.net/suifengshiyu/article/details/40952771

python執行shell的兩種方法總結

sleep follow 命令執行 inux 接收 以及 Go ber BE 這篇文章主要介紹了python中執行shell的兩種方法,有兩種方法可以在Python中執行SHELL程序,方法一是使用Python的commands包,方法二則是使用subprocess包,這

的構造方法實例化的時候自動執行

private 構造方法 static 實例化 In ring spa oid println 在實例化一個類時,類中的構造方法自動執行的,例如: 1 class Demo{ 2 private static int count=0; 3 publi

bash shell 時間操作常用方法總結

hour day 當前時間 簡單的 之前 nbsp seconds 獲取 相互   在日常的工作中,bash shell 的時間操作非常頻繁。比如shell腳本定時發送數據統計的時候,會查看當前是否為預定的發送時間。或者使用文件保存一些數據時,一般會生成時間字符串當做文

Nodejs調用系統命令、Shell腳本的方法和實例

signal 改密 inf tar tde 控制 西北風 接口 func 每種語言都有自己的優勢,互相結合起來各取所長程序執行起來效率更高或者說哪種實現方式較簡單就用哪個,nodejs是利用子進程來調用系統命令或者文件,文檔見http://nodejs.org/api/ch

Shell字串拼接的方法

我們可以看到在系統中,字串的拼接方法為(.bash_profile檔案): PATH=$PATH:$HOME/.local/bin:$HOME/bin 以及《Linux命令列與Shell指令碼程式設計大全中提到的》 var=${var1}${var2} #!/bin/bash va

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

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

shell執行多個命令的方法

shell中執行多個命令的方法 1、在命令列中同時輸入多個語句: 直接在linux命令列中可以依次執行多個命令,多個命令間可採用“;”、“&&”和"||"分割,三個分隔符作用不同: (1);分割符:前後命令間沒有必然的聯絡,前一個執行結束後、再執行第二個,沒有邏輯關聯;