1. 程式人生 > >shell指令碼嵌入expect和awk命令

shell指令碼嵌入expect和awk命令

網上查了好多資料 感覺也沒怎麼看明白 哭暈在廁所 我這智商是不是得轉產品去了額。。。
主要是因為寫了好幾個版本 最後把能用的都改瞎了 看來還得再寫幾個別的 總結總結才好
總之 注意幾點:
1、expect程式碼塊裡面末尾需要寫
interact(但是我寫了這句話不太好使 可能是因為有EOF的原因?)

send exit\r
expect eof
2、expect程式碼塊中像簡單的send ls\r這種直接寫就好了,遇到比較複雜的awk命令得用{}闊起來,$需要轉義一下。。。
{}:保留所有字元原有的意思,而不做解釋,類似於shell中的單引號。

下面是最近寫的檢視n個伺服器上的nginx log檔案,然後統計每秒鐘訪問量最大的10個。。。awk命令用的也比較low。。。

#!/bin/sh
funcA() {
expect << EOF
set timeout 100
spawn ssh [email protected]$server
expect password
send $pass
send {cat /var/log/nginx-access.log-20180714 | awk -F '2018-07-13T' '{print \$2}'|awk -F '+' '{a[\$1]++} END{ for (i in a) print i,a[i]}' | sort -k 2 -rn | head -10}
send \r
send exit\r
expect eof
EOF
}

ips=(123.123
.123.123 456.456.456.456) length=${#ips[*]} pass='password\r' for((i=0;i<$length;i++)); do server=${ips[$i]} funcA done

相關推薦

shell指令碼嵌入expectawk命令

網上查了好多資料 感覺也沒怎麼看明白 哭暈在廁所 我這智商是不是得轉產品去了額。。。 主要是因為寫了好幾個版本 最後把能用的都改瞎了 看來還得再寫幾個別的 總結總結才好 總之 注意幾點: 1、expect程式碼塊裡面末尾需要寫 interact(但是我寫

Linux Shell指令碼程式設計--awk命令詳解

簡單使用: awk :對於檔案中一行行的獨處來執行操作 。 awk -F :'{print $1,$4}'   :使用‘:’來分割這一行,把這一行的第一第四個域打印出來 。 詳細介紹: AWK命令介紹 awk語言的最基本功能是在檔案或字串中基於指定規則瀏覽和抽取資訊,awk抽取資訊後,才能進行其他

shell程式設計之變數以及awk命令rename命令

常用的環境變數可以用env和set檢視,但是最全面的還是man bash來檢視。 在這裡舉例一些常用的環境變數echo $HOSTNAME                  檢視主機名 echo $HOSTTYPE                 檢視主機系統型別 echo

grep、sedawk命令的簡單使用

grep、sed和awk命令的簡單使用 grep 命令選項意義-c匹配行的數量-i忽略大小寫-h查詢多文件時不顯示文件名-l只列出匹配的文件名,不列匹配行-n列出匹配行,並列出行號-s不顯示不存在或無匹配的錯誤信息-v顯示不包含匹配文本的所有行-w匹配整詞-r遞歸

shell學習之locatefind命令

2linux系統中有幾個關於文件搜索的命令,例如:locate,wheris以及find在工作中比較常用到。. 1.locate命令:locate查找文件是基於/var/lib/mlocate數據庫,該數據庫包含所有的本地文件信息,Linux系統自動創建這個數據庫,並且每天自動更新一次。本地剛創建一個文件,但

[shell指令碼]條件判斷迴圈

基本語法 1、條件判斷 if [ condition1 ];then command 1 elif [ condition2 ];then command 2 else command3 fi 注意: (1)if .. fi標誌著判斷語句的開始和結束; (2)[ ]是條件判斷符,

Shell指令碼 判斷使用者使用者組是否已經存在/建立使用者使用者組

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

Linux Shell基礎 管道符grep命令

概述 管道符:管道符使用"丨"代表。如"命令1丨命令2"。表示命令 1 的正確輸出作為命令 2 的操作物件。命令 1 必須有正確輸出,而命令 2 必須可以處理命令 1 的輸出結果。 grep命令:在檔案中提取和匹配符合條件的字串行。 管道符 1. 在使用"||"命令査看/etc/ 目錄時顯示的內容非常

70個shell指令碼面試問題解答

轉載地址: 原文連結:http://linux.cn/article-5607-1.html 我們為你的面試準備選擇了 70 個你可能遇到的 shell 指令碼面試問題及解答。瞭解指令碼或至少知道基礎知識對系統管理員來說至關重要,它也有助於你在工作環境中自動完成很多工。在過去的幾年裡,我們注

shell指令碼使用catEOF組合新增刪除檔案內容

我們經常會碰到這樣一個場景: 執行指令碼的時候,需要往一個檔案裡自動輸入N行內容。如果是少數的幾行內容,還可以用echo追加方式,但如果是很多行,那麼單純用echo追加的方式就顯得愚蠢之極了! 這個時候,就可以使用EOF結合cat命令進行行內容的追加了。 下面就對EOF的

Hadoop叢集之shell -----指令碼xcall,同步指令碼xsync(一)

xcall指令碼 #!/bin/bash [email protected] i=1 for (( i=1 ; i <= 3 ; i = $i + 1 )) ; do echo ============= hadoop0$i $param

使用shell指令碼執行hive、sqoop命令

1、test.sh指令碼內容如下: #!/bin/bash #CURR_DATE=`date +"%Y-%m-%d %H:%M:%S"`------>不能使用v_sql="insert into

linux的shell指令碼中執行多個命令的方法

第一種是以分號(;)進行劃分:表示:各命令的執行的果,不會影響其它命令的執行。換句話說,各個命令都會執行,但不保證每個命令都執行成功。 第二種命令之間&&隔開 表示:若前面的命令執

shell指令碼的執行source

 shell命令可以事先寫入一個檔案中,使用時shell讀取檔案中的命令逐條解釋執行,這種檔案,被稱為指令碼。  執行指令碼的方法與執行其他程式一樣,如:   ./setenv.sh  #setenv.sh是當前目錄下的一個指令碼  以這種方法執行指令碼時,其中的命令是在一

shell 指令碼中獲取執行系統命令的輸出結果

這個主要介紹的方法是獲取命令的輸出內容,而不是命令執行成功與否的返回值。通常情況下,在shell指令碼中需要獲取命令的輸出內容,然後根據輸出內容判斷下一步的執行操作。比較常用的一種方式就是, 匹配命令輸出的內容中是否存在某些關鍵字,選擇執行的不同動作。比較常用的一種方式就是採

shell指令碼直接執行crontab結果不一樣

問題描述: 案例1. 以前寫了個更新svn然後cp到別外一個目錄(簡稱目錄a)的指令碼,達到另外一個目錄的程式定期svn同步的效果。(當然,你可能要問為啥目錄a不裝個svn up,這個你可以先不管) 指令碼寫好後,執行沒有問題,結果放到crontab中定時跑,卻怎麼也不行

shell指令碼中如何呼叫hadoop 命令

我們在shell指令碼中可能會用到hadoop或者其他命令,而這些命令可能是一個整體,如果我們只是簡單的寫入到shell指令碼中,可能會被分解成其他的各個子欄位,即有可能會分成兩部分去執行,這樣就會導致命令執行失敗。 hadoop fs -get /XX

Shell指令碼函式定義函式引數

一、Shell函式 本教程目前為止所有指令碼都是從頭到尾執行。這樣做很好,但你也許已經注意到有些指令碼段間互相重複。 shell允許將一組命令集或語句形成一個可用塊,這些塊稱為shell函式。 shell中函式的定義格式如下: 複製程式碼程式碼如下: 函式名(){     command1   

jenkin執行shell指令碼,找不到命令

jenkins預設是用非登入模式來執行shell命令,所有沒有載入環境變數配置檔案。 source /etc/profile 可以如下修改: 新增source /etc/profile

shell指令碼mac平臺執行sed命令報錯

mac執行sed命令報錯 $ touch testing.txt $ echo "this is mkyong.com" > testing.txt $ cat testing.txt this