Linux:shell腳本數組和腳本免交互

目錄

一、shell數組的定義

二、定義數組的方式

(1)數組名=(value1 value2 value3 value4 ...)

(2)獲取數組的長度

(3)獲取數組下標對應的值

?(4)數組的遍歷

(5)數組切片?

(6)數組替換?

(7)?數組刪除和指定下標的值刪除

(8)數組追加元素?

(9)查看所有數組

?三、Here Document免交互

3.1變量替換成實際值

四、expect免交互

1.expect定義

2. expect中相關命令

3.示例腳本:免交互


一、shell數組的定義

  • 數組中可以存放多個值。Bash Shell 只支持一維數組(不支持多維數組)

數組元素的下標由 0 開始。

  • Shell 數組用括號來表示,元素用"空格"符號分割開

在shell語句中,使用、遍歷數組的時候,數組格式要寫成 arr[@]或{arr[@]} 或 arr[@]或{arr[*]}

二、定義數組的方式

數組包括的數據類型:

  • 數值型
  • 字符型 (如果元素值為字符類型,需要加單引號或雙引號,防止單個元素中有空格被當成2個元素)
  • 混合型數值+字符??

(1)數組名=(value1 value2 value3 value4 ...)

(2)獲取數組的長度

(3)獲取數組下標對應的值

?

?(4)數組的遍歷

(5)數組切片?

?

(6)數組替換?

(7)?數組刪除和指定下標的值刪除

(8)數組追加元素?

第一種?直接使用下標進行元素的追加

第二種?將數組的長度作為下標進行追加元素

? 第三種:使用+=進行追加

(9)查看所有數組

?三、Here Document免交互

使用I/O重定向的方式將命令列表提供給交互式程序

標準輸入的一種替代品

Here Document 是標準輸 入的一種替代品,可以幫助腳本開發人員不必使用臨時文件來構建輸入信息,而是直接就地 生產出一個文件并用作命令的標準輸入,Here Document 可以與非交互式程序和命令一起使用

注意事項:

  • 標記可以使用任意合法字符通用的字符是EOF
  • 結尾的標記一定要頂格寫,前面不能有任何字符
  • 結尾的標記后面也不能有任何字符(包括空格)
  • 開頭標記前后的空格會被省略掉

?例1:使用 wc -l 命令后面直接跟文件名就可以統計文件內有多少行內容,將要統計的內容置于標記“EOF” 之間,直接將內容傳給 wc -l 來統計。

<<EOF

.......

EOF

3.1變量替換成實際值

四、expect免交互

1.expect定義

建立在tcl語言基礎上的一個工具,常被用于進行自動化控制和測試主要解決shell腳本中交互相關的問題。

使用expect命令前需要先進行安裝tcl與expect軟件,在安裝expect軟件自動安裝依賴包tcl
先檢查系統內是否安裝expect軟件包

2. expect中相關命令

  • spawn 啟動新的進程(監控,捕捉)

spawn ?passwd root

(1)腳本解釋器

expect 腳本中首先引入文件,表明使用的事哪一種shell

#!/usr/bin/expect

(2)spawn

spawn 后面通常跟一個Linux執行命令,表示開啟一個會話、進程,并跟蹤后續交互信息

例: spawn passwd root

(3)expect

判斷上次輸出結果中是否包含指定的字符串,如果有則立即返回,否則就等待超時時間后返回;只能捕捉有swpan啟動的進程輸出;

用于接受命令執行后的輸出,然后和期望的字符串匹配

(4)send

  • 向進程發送字符串,用于模擬用戶的輸入
  • 該命令不能自動回車換行,一般要加\r(回車)或者\n,用于代表回車鍵

方式一:
expect "密碼" {send "abc123\r"} ? ? #同一行send部分要有{}

方式二:
expect "密碼" ?
send "abc123\r" ? ? ? ? ? ? ? ? ? ?# 換行send部分不需要有{}


方式三:
expect 支持多個分支
expect ? ? ? ? ?#只要匹配了其中一個情況,執行相應的send 語句后退出該expect 語句
只匹配一次
expect
{
{"密碼1" ?{send "abc123\r"}
{"密碼2" ?{send "123123\r"}
{"密碼3" ?{send "123456\r"}

}

?(5)?expect eof:結束符

表示交互結束,等待執行結束,退回到原用戶,與spawn對應。

比如切換到root用戶,expect腳本默認的是等待10s當執行完命令后,默認停留10s后,自動切回了原用戶

(6)exp_continue匹配多個字符串在執行動作后加此命令

exp_continue 表示允許 expect 繼續向下執行指令.

exp_continue附加于某個expect 判斷選項之后,可以是該項被匹配后還能繼續匹配expect 判斷語句內的其他項。exp_continue類似于控制語句的continue語句。表示允許expect繼續向下執行命令。

(7)set

expect 默認的超時時間是10秒,通過set 命令可以設置會話超時時間,若不限制超時時間則應設置為-1

例子: set time out 30

(8)send_user

表示回顯命令與echo相同

(9)接收參數(位置變量)

expect 腳本可以接受從bash命令行傳遞參數,使用 [lindex $argv n]獲得。其中你從0開始,分別表示第一個,第二個,第三個.....參數

例子:

set hostname [lindex $argv 0] 相當于hostname=$1

set password [lindex $argv 1] 相當于passswd=$2

expect直接執行,需要expect命令去執行腳本

3.示例腳本:免交互

?①echo '123123' |passwd ? --stdinzhangsan ? #將123123通過標準輸入傳給passwd命令,改222用戶密碼

?②passwd 222 <<EOF ? ? ? #passwd多行重定向輸入密碼給張三

? ? ? ? ? ?12345678

? ? ? ? ? ?12345678

? ? ? ? ? ? EOF
?

vim ?ssh.sh
創建腳本
腳本內容:
#!/usr/bin/expect
#聲明腳本使用的shell
set ip 192.168.30.100
#設ip的為 192.168.30.12
set password 123456
#設置變量password的內容為123456
spawn ssh $ip
#捕捉ssh 192.168.30.100
expect {
#spawn捕捉成功則繼續使用expect捕捉
? ? ? ? "yes/no" {send "yes\n";exp_continue}
#若捕捉到yes/no此內容則輸入yes\n,\n為回車,然后繼續捕捉,若只捕捉一次則不需要繼續捕捉exp_continue
? ? ? ? "password" {send "$password\n"}
#繼續捕捉內容password,捕捉到后輸入變量$password的內容,\n為回車,不繼續捕捉則不需要exp_continue
}
interact ?
#結束符
?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/43694.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43694.shtml
英文地址,請注明出處:http://en.pswp.cn/news/43694.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

qsort函數詳解

大家好&#xff0c;我是蘇貝&#xff0c;本篇博客帶大家了解qsort函數&#xff0c;如果你覺得我寫的不錯的話&#xff0c;可以給我一個贊&#x1f44d;嗎&#xff0c;感謝?? 文章目錄 一. qsort函數參數詳解1.數組首元素地址base2.數組的元素個數num和元素所占內存空間大小w…

ThreeJS——在3D地球上標記中國地圖板塊

Threejs3D地球標記中國地圖位置 先看效果 地球預覽視頻效果 用到的庫 TweenJS (動畫庫)用來做相機轉場的動畫Jquery(這里只用到一個 each 循環方法&#xff0c;可以使用 js 去寫)ThreeJS (3D 地球制作)100000.json(全國城市經緯度)d3.v6.js用來設置平面轉3D效果(本來考慮做成…

深入解析IDS/IPS與SSL/TLS和網絡安全

目錄 防火墻 IDS IPS DMZ VPN VPS SSL/TLS 動態IP 靜態IP 防火墻 防火墻是一種網絡安全設備&#xff0c;用于監控和控制網絡流量&#xff0c;保護網絡免受未經授權的訪問、惡意攻擊和威脅。防火墻可以基于規則進行數據包過濾&#xff0c;允許或阻止特定類型的流量通過…

Lead-Lag控制器形式

對于Lead-Lag&#xff08;超前—滯后&#xff09;&#xff0c;有的地方叫做控制器 Controller&#xff0c;有的地方叫補償器 Compensator&#xff0c;有的地方叫濾波器 Filter&#xff0c;都是一個東西。 Lead-Lag也有幾種不同的形式&#xff0c;一種是 G c ( s ) 1 a T s 1…

QT設置widget背景圖片

首先說方法&#xff0c;在給widget或者frame或者其他任何類型的控件添加背景圖時&#xff0c;在樣式表中加入如下代碼&#xff0c;指定某個控件&#xff0c;設置其背景。 類名 # 控件名 { 填充方式&#xff1a;圖片路徑 } 例如&#xff1a; QWidget#Widget {border-image: url…

無涯教程-TensorFlow - 優化器

Optimizers是擴展類&#xff0c;其中包括用于訓練特定模型的附加信息&#xff0c;Optimizers類使用給定的參數初始化&#xff0c;用于提高速度和性能&#xff0c;以訓練特定模型。 TensorFlow的基本Optimizers是- tf.train.Optimizer 此類在tensorflow/python/training/opti…

C語言:深度學習知識儲備

目錄 數據類型 每種類型的大小是多少呢&#xff1f; 變量 變量的命名&#xff1a; 變量的分類&#xff1a; 變量的作用域和生命周期 作用域&#xff1a; 生命周期&#xff1a; 常量 字符串轉義字符注釋 字符串&#xff1a; 轉義字符 操作符&#xff1a; 算術操作符…

圖神經網絡 day2 圖的分類

圖神經網絡基礎算法 1 GCN2 GraphSAGE2.1 采樣&#xff1a;采樣固定長度的鄰居2.2 聚合2.3 GraphSAGE_minibatch2.4 GraphSAGE_embedding 3 GAT4. 圖網絡的分類4.1 遞歸圖神經網絡 RGNN4.2 圖卷積神經網絡GCN4.3 圖注意力網絡 GAT4.4 圖自動編碼 GAE4.5 圖時空網絡 GSTN4.6 圖生…

typeScript 接口和類

工具&#xff1a; PlayGround 接口 接口用來定義對象的結構和類型&#xff0c;描述對象應該具有哪些屬性和方法。 它僅用于聲明&#xff0c;而不是實現&#xff1b; 這對于編寫可重用的代碼非常有用。它可用于&#xff1a; 關鍵字是interface&#xff0c; 注意&#xff1a;它…

OSPF在廣播類型的網絡拓撲中DR和BDR的選舉

指定路由器&#xff08;DR&#xff09;&#xff1a; 一個網段上的其他路由器都和指定路由器&#xff08;DR&#xff09;構成鄰接關系&#xff0c;而不是它們互相之間構成鄰接關系。 備份指定路由器&#xff08;BDR&#xff09;&#xff1a; 當DR出現問題&#xff0c;由BDR接…

redis事務對比Lua腳本區別是什么

redis官方對于lua腳本的解釋&#xff1a;Redis使用同一個Lua解釋器來執行所有命令&#xff0c;同時&#xff0c;Redis保證以一種原子性的方式來執行腳本&#xff1a;當lua腳本在執行的時候&#xff0c;不會有其他腳本和命令同時執行&#xff0c;這種語義類似于 MULTI/EXEC。從別…

中間件: Kafka安裝部署

單機部署 下載二進制包 cd /opt/soft/archive wget http://archive.apache.org/dist/kafka/3.2.0/kafka_2.12-3.2.0.tgz tar -zxf kafka_2.12-3.2.0.tgz -C ../ cd ../kafka_2.12-3.2.0修改配置 vim config/server.propertiesadvertised.listenersPLAINTEXT://39.105.11.50:…

C++系列-函數重載

C系列-函數重載 函數重載函數重載的條件函數重載注意事項引用作為重載函數重載遇到默認參數 函數重載 函數名可以相同&#xff0c; 提高復用性 函數重載的條件 同一個作用域下函數名相同函數參數不同 – 參數個數不同 – 參數順序不同 – 參數類型不同不可以使用返回值作為重…

UI和API自動化測試的失敗原因

一、UI自動化失敗原因&#xff1a; 界面發生了變化&#xff0c;但是腳本沒有更新腳本中的等待時間太短了&#xff0c;導致元素還沒出來就被判定為失敗了網絡因素&#xff0c;網絡如果太慢的話&#xff0c;界面元素的顯示就會滯后執行的時候突然彈出一個窗口影響了元素的定位Ag…

Python web實戰之Django 的跨站點請求偽造(CSRF)保護詳解

關鍵詞&#xff1a;Python、Web、Django、跨站請求偽造、CSRF 大家好&#xff0c;今天我將分享web關于安全的話題&#xff1a;Django 的跨站點請求偽造&#xff08;CSRF&#xff09;保護&#xff0c;介紹 CSRF 的概念、原理和保護方法. 1. CSRF 是什么&#xff1f; CSRF&#…

微服務與Nacos概述-6

RBAC 模型 RBAC 基于角色的訪問控制是實施面向企業安全策略的一種有效的訪問控制方式。 基本思想是&#xff0c;對系統操作的各種權限不是直接授予具體的用戶&#xff0c;而是在用戶集合與權限集合之間建立一個角色集合。每一種角色對應一組相應的權限。一旦用戶被分配了適當…

【MySQL】MySQL基礎知識詳解(一)

MySQL select列的別名去除重復行空值參與運算著重號查詢常數顯示表結構過濾數據 排序使用 ORDER BY 對查詢到的數據進行排序操作。使用列的別名&#xff0c;進行排序二級排序 分頁LIMIT 分頁顯示公式&#xff1a;&#xff08;當前頁數減一&#xff09;*每頁條數&#xff0c;每頁…

【AIGC】 快速體驗Stable Diffusion

快速體驗Stable Diffusion 引言一、安裝二、簡單使用2.1 一句話文生圖2.2 詳細文生圖 三、進階使用 引言 stable Diffusion是一款高性能的AI繪畫生成工具&#xff0c;相比之前的AI繪畫工具&#xff0c;它生成的圖像質量更高、運行速度更快&#xff0c;是AI圖像生成領域的里程碑…

【100天精通python】Day41:python網絡爬蟲開發_爬蟲基礎入門

目錄 專欄導讀 1網絡爬蟲概述 1.1 工作原理 1.2 應用場景 1.3 爬蟲策略 1.4 爬蟲的挑戰 2 網絡爬蟲開發 2.1 通用的網絡爬蟲基本流程 2.2 網絡爬蟲的常用技術 2.3 網絡爬蟲常用的第三方庫 3 簡單爬蟲示例 專欄導讀 專欄訂閱地址&#xff1a;https://blog.csdn.net/…

【玩轉Linux操作】crond的基本操作

&#x1f38a;專欄【玩轉Linux操作】 &#x1f354;喜歡的詩句&#xff1a;更喜岷山千里雪 三軍過后盡開顏。 &#x1f386;音樂分享【Counting Stars 】 歡迎并且感謝大家指出小吉的問題&#x1f970; 文章目錄 &#x1f354;概述&#x1f354;命令?常用選項 &#x1f354;練…