Linux中Shell自動化腳本

  1. <<EOF
    EOF
  2. expect
    expect基礎
yum -y install expect

在使用expect時,基本上都是和以下四個命令打交道:

命令 作用
send 用於向進程發送字符串
expect 從進程接收字符串
spawn 啓動新的進程
interact 允許用戶交互
exp_continue; 不退出,繼續接收
send命令接收一個字符串參數,並將該參數發送到進程。
expect命令和send命令相反,expect通常用來等待一個進程的反饋,我們根據進程的反饋,再發送對應的交互命令。
spawn命令用來啓動新的進程,spawn後的send和expect命令都是和使用spawn打開的進程進行交互。
interact命令用的其實不是很多,一般情況下使用spawn、send和expect命令就可以很好的完成我們的任務;但在一些特殊場合下還是需要使用interact命令的,interact命令主要用於退出自動化,進入人工交互。比如我們使用spawn、send和expect命令完成了ftp登陸主機,執行下載文件任務,但是我們希望在文件下載結束以後,仍然可以停留在ftp命令行狀態,以便手動的執行後續命令,此時使用interact命令就可以很好的完成這個任務。


#!/usr/tcl/bin/expect

set timeout 30
set host "101.200.241.109"
set username "root"
set password "123456"

spawn ssh $username@$host
expect "*password*" {send "$password\r"}
interact
#這是一段非常簡單的expect示例代碼,演示了expect的基本使用方法。


#!/usr/tcl/bin/expect:使用expect來解釋該腳本;
set timeout 30:設置超時時間,單位爲秒,默認情況下是10秒;
set host "101.200.241.109":設置變量;
spawn ssh $username@$host
#spawn是進入expect環境後纔可以執行的expect內部命令,如果沒有裝expect或者直接在默認的SHELL下執行是找不到spawn命令的。它主要的功能是給ssh運行進程加個殼,用來傳遞交互指令;
expect "*password*"
#這裏的expect也是expect的一個內部命令,這個命令的意思是判斷上次輸出結果裏是否包含“password”的字符串,如果有則立即返回;否則就等待一段時間後返回,這裏等待時長就是前面設置的30秒;
send "$password\r"
#當匹配到對應的輸出結果時,就發送密碼到打開的ssh進程,執行交互動作;
interact
#執行完成後保持交互狀態,把控制權交給控制檯,這個時候就可以手工操作了。如果沒有這一句登錄完成後會退出,而不是留在遠程終端上。

https://www.cnblogs.com/autopenguin/p/5918717.html
在這裏插入圖片描述

與EOF結合使用:

#!/bin/bash
host="192.168.200.113"
expect<<EOF
spawn ssh $host
expect {
        "*yes/no*"
                {send "yes\r";exp_continue;}
        "*password*"
                {send "redhat\r"}
} 
EOF

規範一點書寫:

#!/bin/bash
Host=$1
User=$2
> /root/.ssh/known_hosts
#檢測是否正確傳參
if [ $# != 2 ];then
#如果未正確傳參,提示
echo -e "\033[31mthis .sh wants two paraneters,like this<:bash $0 Host User>\033[0m" 
exit 1
fi
expect <<EOF
spawn ssh $User@$Host
expect {
        "*yes/no*"
                {send "yes\r";exp_continue;}
        "*password*"
                {send "redhat\r"}
}
EOF
echo -e '\r'
#輸出執行狀態碼
echo -e "\033[31m$?\033[0m\c"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章