導航:首頁 > 程序命令 > shellexpect命令

shellexpect命令

發布時間:2023-02-13 22:22:11

A. shell腳本中,用expect命令如何實現自動遠程操作,折磨我好久了..

既然$無法匹配,我覺得你完全可以單獨配置一個環境變數,比如說我登錄到伺服器後
echo "SCPGOGOGO"
expect捕獲到SCPGOGOGO 開始執行scp
expect好久不寫了,不知道$?判斷怎麼寫,如果要寫我的翻書了。

當判斷$?為真,然後執行send "java -jar"。不過我想在仔細思考一下可能會有更好的邏輯。
我不太稀飯expect這種交互寫法。

因為有更多簡單便捷的方法,不知道你為什麼不用。
sshpass ssh密鑰 簡單點直接用sh操作ssh就可以達到你想要的效果,why死扣expect?,
各種集中式管理軟體(puppet,salt,ansible...)都是為了方便遠程操作管理的東西why?不用?
本來1小時解決的問題,死扣expect花了好幾天,這種把一個問題發展到解決2個問題的做事方法不可取。

B. shell腳本expect自動登錄後,怎麼又自動退出了

1.安裝expect
需要先安裝tcl:apt-get install tcl
apt-get install expect
2.expect使用
2.1一個簡單的輸入密碼操作
#!/usr/bin/expect
set timeout 100
set password "123456"
spawn sudo rm -rf zzlogic
expect "root123456"
send "$password\n"
interact
說明:
第一行#!/usr/bin/expect表示使用expect的shell交互模式
set是對變數password賦值
set timeout 100:設置超時時間為100秒,如果要執行的shell命令很長可以設置超時時間長一些。expect超過超時時間沒有監測到要找的字元串,則不執行,默認timeout為10秒
spawn在expect下執行shell腳本
expect對通過spawn執行的shell腳本的返回進行判斷,是否包含「」中的欄位
send:如果expect監測到了包含的字元串,將輸入send中的內容,\n相當於回車
interact:退出expect返回終端,可以繼續輸入,否則將一直在expect不能退出到終端
2.2expect的命令行參數
[lindex $argv n]獲得index為n的參數(index從0開始計算)
$argc為命令行參數的個數
[lrange $argv 0 0]表示第一個參數
[lrange $argv 0 3]表示第1到第3個參數
例如scp_service.sh文件,可以./scp_service.sh -rm來執行,這時是賦值了一個參數
set option [lindex $argv 0](獲得第一個參數存到變數option中,參數是的index是從0開始計算的)
2.3if...elif...else...
expect支持if語句,
if {條件1} {
條件1執行語句
} elif {條件2} {
條件2執行語句
} else {
其他情況執行語句
}
說明:
1.if的條件用{}來包含條件
2.if和後面的{}必須有空格隔開
3.兩個花括弧之間必須有空格隔開,比如if {} {},否則會報錯 expect:extra characters after close-brace
3.使用{來銜接下一行,所以if的條件後需要加左花括弧{
4.else不能單獨放一行,所以else要跟在}後面
2.4 expect {},多行期望,匹配到哪條執行哪條
背景:有時執行shell後預期結果是不固定的,有可能是詢問是yes/no,有可能是去輸入密碼,所以可以用expect{}
花括弧內放多行語句,從上至下匹配,匹配到哪個expect執行哪句。
3.shell中調用expect來實現登錄
我是通過在shell腳本中執行expect腳本的方式來實現的。當然可以將shell中定義的一些變數傳遞給expect腳本作為參數輸入。

C. 如何在bash shell腳本中使用expect

1、首先檢查你機器上有沒有expect(我知道ubuntu默認是沒有安裝的)
ls /usr/bin | grep expect 看看有沒有裝expect
2、沒有的話需要安裝
在ubuntu的軟體安裝中心,搜索tcl 和tk 和expect並安裝;
也可以命令行輸入sudo apt-get install tcl tk expect
3. 環境ready了後,可以在shell腳本中用Here document的方式使用expect命令
Here document格式如下:
expect <<!
這中間都是expect命令
!
為防止錯誤,建議都頂格寫,前面不要留空格。

D. 使用 expect 的時候,怎麼使用shell的命令啊

expect 用的是 tcl 語言,你可以用
exec sleep 1
if { [file isfile certs/cert.key] } {
send_user "file existing"
} else {
send_user "file not existing"
}

更多細節可以去學一下 tcl 語言。

E. shell中 expect使用

send "pwd" 之後應該繼續 expect 一個提示符,或者等待一個 timeout 的時間,然後send 一條命令 touch file1,如此繼續。

不考慮 expect 練習的目的的話,完全這個任務最方便的是用 sudo 代替 su,可配置 sudo 執行你這個操作時不用密碼。

閱讀全文

與shellexpect命令相關的資料

熱點內容
光遇安卓與ios什麼時候互通 瀏覽:596
js如何運行時編譯 瀏覽:915
引力app在哪裡下載 瀏覽:609
編寫app如何得到錢 瀏覽:800
吉利汽車軟體放哪個文件夾安裝 瀏覽:223
多文件編譯c 瀏覽:541
頭頂加密後為什麼反而更稀疏 瀏覽:793
離心機壓縮機揚程高 瀏覽:658
xshell連接linux命令 瀏覽:5
把多個文件夾的內容合並在一起 瀏覽:483
基於單片機的澆花系統設計ppt 瀏覽:685
卷積碼編解碼及糾錯性能驗證實驗 瀏覽:354
請在刪除驅動器之前暫停加密什麼意思 瀏覽:787
光催化pdf 瀏覽:98
java字元串包含某字元 瀏覽:528
ssm身份認證源碼 瀏覽:466
預排序遍歷樹演算法 瀏覽:671
加密裝置如何打開ping功能 瀏覽:480
python下載372 瀏覽:903
u盤子文件夾隱藏 瀏覽:297