shell之免交互

免交互
交互:發出指令控制指令的運行,程序再接收到指令的效果做出對應的反應。
免交互:間接的,通過第三方的方式把指令傳送給程序,不用直接的下達指令
Hhere Document 免交互
這是命令行格式,也可以寫在腳本當中。通過I/O重定向的方式將命令傳送給交互式程序或指令
是標準輸入的一種替代品。代替了人工的輸入方式。
語法格式:
命令(Linux的系統命令) <<標記
內容1
內容2
內容3
標記
注意事項:
1、標記可以是任意合法字符(一般不用特殊字符,不以數字開頭,通常以EOF作為默認的標記位)
2、結尾的標記一定要頂格寫,且前面不能有任何字符,空格也不行
3、結尾的標記后面也不能有任何字符,包括空格
4、開頭的標記前后的空格都會被省略

read i << EOF
> 22
> EOF

在這里插入圖片描述

cat <<EOF>>test2.txt
> 123
> 456
> 789
> EOF

在這里插入圖片描述

tee test3.txt <<EOF
> 1
> 2
> 1
> 2
> EOF

在這里插入圖片描述

vim mjh.sh
#!/bin/bash
#引入變量
file="test1.sh"
i=school
cat > $file <<EOF
i am going to $i
EOF
sh mjh.sh
cat test1.sh

在這里插入圖片描述

在這里插入圖片描述

#!/bin/bash
#整體變量賦值
var="good!"
myvar=$(cat <<EOF	
#myvar=$(cat <<'EOF' 不向文件內傳輸 
this school is beautiful
$var
EOF
)
echo $myvar

在這里插入圖片描述

Expect實現免交互
用tcl語言寫的一個工具,主要用自動化控制和測試。解決shell腳本交互的問題。
yum install -y expect
轉義符
\n:換行
\r:回車
\t:相當于一個tab鍵
\b:backspace表示退格,刪除

vim passwd.sh
#!/usr/bin/expect 
set timeout 5
#set相當于設置,timeout超時時間,expect有一個默認的超時時間10s。設置超時時間5s
#set也可以作為設置變量
spawn passwd dn
#spawn后面用來聲明需要執行的命令,開啟會話過程,并且跟蹤后續的交互信息。
expect "新的密碼:"
#捕獲需要執行的命令行,只要能夠捕獲即可,不需要完整的,可以用*代表所有
send "123\r"
#輸入指令代碼
expect "重新輸入新的密碼"
send "123\r"
#最后一定要有結束語,結束語只能寫一個
expect eof
#交互指令結束以后,會退回原用戶,切換回之前的用戶
interact
#留在當前用戶不會變
chmod 777 passwd.sh
./passwd.sh

在這里插入圖片描述

在這里插入圖片描述

vim su.sh
#!/usr/bin/expect
set timeout 5
#傳參的方式來表示
set username [lindex $argv 0]
set password [lindex $argv 1]
#這種方式就是位置變量
#開始追蹤
spawn su - $username
#免交互開始執行
expect "密碼"
send "$password\r"
#繼續捕獲
expect "~]$"
send_user "ok"
#sed_user = echo 打印指定內容
#結束語
interact	#留在當前用戶不會變
chmod 777 su.sh
./su.sh 用戶 密碼

在這里插入圖片描述

在這里插入圖片描述

嵌入執行模式,在shell中加入expect,涉及到環境切換的場景不建議使用嵌套。
ssh su不適合使用嵌入模式

#!/bin/bash
user=$1
password=$2
#非交互命令,使用shell
useradd $user
#嵌入免交互
/usr/bin/expect <<-EOF
spawn passwd $user
expect "新的*"
send "$password\r"
expect "重新*"
send "$password\r"
expect eof
EOF

在這里插入圖片描述

在這里插入圖片描述

#!/usr/bin/expect
set ip 192.168.233.10
set user root
set password 123
set timeout 5
#進入命令行交互
spawn ssh $user@$ip
expect {
"yes/no" {send "yes\r";exp_continue}
#這里捕獲兩次,表示該項被匹配之后,繼續匹配其他的指定內容。類似于循環的continue。允許expect語句繼續向下執行。
"password" {send "$password\r"}
}
interact

在這里插入圖片描述

在這里插入圖片描述

#!/usr/bin/expect
set timeout 5
set hostname [lindex $argv 0]
set password [lindex $argv 1]
#進入命令格式
spawn ssh $hostname
expect {
"No route to host" {send_user "主機名/ip有誤\n"}
"Connection refusedi" {send_user "ssh連接拒絕\n"}
"(yes/no)" {send "yes\r";exp_continue}
"password" {send "$password\r"}
}
interact

在這里插入圖片描述

在這里插入圖片描述

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

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

相關文章

QTableWidget的使用

使用QTableWidget&#xff0c;初始化數據、設置列頭及格式&#xff0c;設置行數&#xff0c;設置每個單元格的編輯&#xff0c;間隔行底色變換、行選擇 &#xff0c;模式&#xff0c;單元格選擇模式、插入行 、追加行、刪除行&#xff0c;單元格加圖標&#xff0c;單元格顯示ch…

Android Gradle開發與應用

Android Gradle 開發是指在 Android 應用開發中使用 Gradle 作為構建工具的過程。Gradle 是一個基于 Groovy 的自動化構建工具&#xff0c;它允許開發者定義靈活的構建邏輯&#xff0c;并且能夠很好地與 Android Studio 集成。以下是一些關于 Android Gradle 開發與應用的基本概…

替換特殊符號

content content.replaceAll("[\\x00-\\x09\\x11\\x12\\x14-\\x1F\\x7F]", ""); 打印特殊符號&#xff1a; String s new String( Character.toChars(0)); System.out.println((char)0); 2024-06-20 17:21:26.155 ERROR 5584 --- [6884333_inbound] c.…

好記性不如爛筆頭(三)——文件保存后打開呈現亂碼問題

現象 請隨博主進行下列操作&#xff0c;神奇的事情會發生—— 1、新建記事本&#xff0c;里面輸入“同”字&#xff0c;保存為ANSI格式 2、再次打開會發現&#xff0c;“同”已經變成了亂碼 3、類似的字還有很多&#xff0c;例如“同學”的“學”。而有些字則不會出現這種情況…

3_電機的發展及學習方法

一、電機組成及發展 1、什么是勵磁&#xff1f; 在電磁學中&#xff0c;勵磁是通過電流產生磁場的過程。 發電機或電動機由在磁場中旋轉的轉子組成。磁場可以由 永磁體或勵磁線圈產生。對于帶有勵磁線圈的機器&#xff0c;電流必須在線圈中流動才能產生&#xff08;激發&#x…

香港服務器托管對外貿行業必要性和優勢

在當今全球化的經濟環境下&#xff0c;外貿企業面臨著前所未有的機遇與挑戰。其中&#xff0c;服務器托管的選擇對于外貿企業的運營效率和市場拓展具有舉足輕重的作用。香港服務器&#xff0c;憑借其獨特的地理位置、優質的網絡環境和卓越的服務性能&#xff0c;一直是外貿企業…

“Hello, World” 的歷史

“Hello, World!” —— 初學者進入編程世界的第一步 由布萊恩柯林漢 撰寫的“Hello, world”程序 (1978年) 布萊恩W.克尼漢&#xff08;Brian W. Kernighan&#xff09;—— Unix 和 C 語言背后的巨人 布萊恩W.克尼漢 布萊恩W.克尼漢在 1942 年出生在加拿大多倫多&#xff…

OS中斷機制-嵌套和競爭

對于FreeRTOS最好不去用中斷嵌套,中斷嵌套會增加堆棧空間的使用,因為每個中斷服務程序都需要保存和恢復寄存器狀態,這可能會耗盡有限的堆棧空間,從而導致系統故障。以及中斷嵌套時,不同的中斷服務程序可能會競爭訪問共享資源,從而增加死鎖的風險。這可能會導致系統出現故…

Verilog進行結構描述(structural modeling)(一):基本概念

目錄 1.結構描述(structural modeling)的內容&#xff1a;2.實例 微信公眾號獲取更多FPGA相關源碼&#xff1a; 1.結構描述(structural modeling)的內容&#xff1a; 用門來描述器件的功能基于基本元件和底層模塊例化語句最接近實際的硬件結構主要使用元件的定義、使用聲明以…

Flink——最流批的大數據框架(流批一體)

Apache Flink基礎教程 資料來源&#xff1a;Apache Flink Tutorial (tutorialspoint.com) Apache Flink是Apache Hadoop的開源本地分析數據庫。它由Cloudera、MapR、Oracle和Amazon等供應商提供。本教程中提供的示例是使用Cloudera Apache Flink開發的。 本教程是為那些想要學…

fork 是一個創建新進程的系統調用

在計算機科學中&#xff0c;fork 是一個創建新進程的系統調用。具體來說&#xff0c;fork 調用會創建一個與當前進程幾乎完全相同的副本&#xff0c;包括父進程的內存布局、環境變量、打開的文件描述符等。這個新的進程被稱為子進程&#xff0c;而原始進程被稱為父進程。 以下…

光伏開發有沒有難點?如何解決?

隨著全球對可再生能源的日益重視&#xff0c;光伏技術作為其中的佼佼者&#xff0c;已成為實現能源轉型的關鍵手段。然而&#xff0c;光伏開發并非一帆風順&#xff0c;其過程中也面臨著諸多難點和挑戰。本文將對這些難點進行探討&#xff0c;并提出相應的解決策略。 一、光伏開…

12 學習總結:操作符

目錄 一、操作符的分類 二、二進制和進制轉換 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;二進制 &#xff08;三&#xff09;進制轉換 1、2進制與10進制的互換 &#xff08;1&#xff09;2進制轉化10進制 &#xff08;2&#xff09;10進制轉化2進制 2…

解決vs2022scanf報錯問題

vs2022scanf報錯問題 大家下完vs2022之后,開心的寫下一段簡單的代碼: #include <stdio.h> #include <stdlib.h>int main() {int a;scanf("%d", &a);printf("%d", a);return 0; } vs2022會毫不猶豫的報錯,下面是報錯信息: 翻譯過來就是v…

探究InnoDB Compact行格式背后

目錄 一、InnoDB 行格式數據準備 二、COMPACT行格式整體說明 三、記錄的額外信息 &#xff08;一&#xff09;變長字段長度列表 數據結構 存儲過程 讀取過程 變長字段長度列表存儲示例 &#xff08;二&#xff09;NULL 值位圖 數據結構 存儲過程 讀取過程 NULL 值…

【MySQL進階之路 | 高級篇】索引的聲明與使用

1. 索引的分類 MySQL的索引包括普通索引&#xff0c;唯一性索引&#xff0c;全文索引&#xff0c;單列索引和空間索引. 從功能邏輯上說&#xff0c;索引主要分為普通索引&#xff0c;唯一索引&#xff0c;主鍵索引和全文索引.按物理實現方式&#xff0c;索引可以分為聚簇索引…

蘋果電腦清理垃圾怎么清理 macbook怎么清理電腦垃圾文件 macos優化軟件 cleanmymac怎么使用

在選擇電腦時&#xff0c;不少人都會選擇擁有高性能和輕薄機身的mac。一開始&#xff0c;它確實如我們所期待的那樣健步如飛&#xff0c;然而&#xff0c;隨著時間的流逝&#xff0c;有沒有覺得您的Mac有時候像是需要一個好的春季大掃除一樣&#xff1f;隨著我們不斷使用電腦&a…

Lobe Chat openai claude

claude-3-5-sonnet-20240620 $ docker run -d -p 3210:3210 \-e OPENAI_API_KEYsk-xxxx \-e OPENAI_PROXY_URLhttps://api-proxy.com/v1 \-e ACCESS_CODElobe66 \--name lobe-chat \lobehub/lobe-chatDocker 部署 更新 docker ps CONTAINER ID IMAGE …

1590. 【中山市第十二屆義務教育段學生信息學邀請賽】除法運算(divide)

時間限制: 1 s 空間限制: 256 MB 題目描述 Jimmy 開始學習除法啦&#xff01;一開始他學習了余數為 0 的除法&#xff08;也就是我們常說的整除&#xff09;&#xff0c;后來又學習了余數不為 0 的除法&#xff0c;所以 Jimmy 對被除數、除數、商、余數這些概念都已經了如指…

C語言學習步驟

C語言學習步驟 學習C語言是一個系統化的過程&#xff0c;以下是一些基本的步驟和建議&#xff1a; 1. 理解基礎概念&#xff1a;首先&#xff0c;了解編程的基本概念&#xff0c;比如變量常量、數據類型、指針、控制結構&#xff08;順序語句、分支語句、循環語句&#xff09;、…