柚子快報(bào)邀請碼778899分享:網(wǎng)絡(luò) 免交互
柚子快報(bào)邀請碼778899分享:網(wǎng)絡(luò) 免交互
1、定義
交互:我們發(fā)出指令控制程序的運(yùn)行,程序在接受到指令之后按照指令的效果做出對應(yīng)的反應(yīng)。
免交互:間接的通過第三方把指令傳送給程序,不用直接的下達(dá)指令
2、Here Document 免交互
這是命令行格式也可以寫在腳本當(dāng)中。通過I/O重定向的方式將命令的列表傳送給交互式程序或命令。是標(biāo)準(zhǔn)輸入的一種替代品,代替了人工的輸入方式
2.1語法格式
命令(linux的系統(tǒng)命令) <<標(biāo)記 ?
內(nèi)容1 ?
內(nèi)容2 ?
內(nèi)容3 ?
標(biāo)記
2.2注意事項(xiàng)
(1)標(biāo)記可以是任意合法字符(一般不用特殊字符,也不以數(shù)字開頭,通常以EOF作為默認(rèn)的標(biāo)記位)
(2)結(jié)尾的標(biāo)記一定要定格寫且前面不能有任何字符,空格也不行
(3)結(jié)尾的標(biāo)記后面也不能有任何字符,包括空格
(4)開頭的標(biāo)記前后的空格都會被省略掉
2.3用法
統(tǒng)計(jì)行數(shù)
[root@test1 ~]# wc -l < > 123 > 456 > 789 > xy102 3 read命令輸入內(nèi)容并打印 [root@test1 ~]# read i < 更改用戶密碼 [root@test1 ~]# passwd dn < cat命令+免交互 [root@test1 ~]# cat < tee命令 [root@test1 opt]# tee test1.txt< 引入變量 file="test1.sh" i=school cat > $file < 整體變量賦值 var="Great!I am going to school" myvar=$(cat < 3、Expect實(shí)現(xiàn)免交互 3.1定義 用tcl語言寫的一個(gè)工具,主要用于自動化控制和測試,解決shell腳本交互的問題 3.2轉(zhuǎn)義符 \n:換行 \r:回車 \t:相當(dāng)于一個(gè)tab鍵 \b:表示退格,相當(dāng)于刪除 3.3用法 3.3.1修改用戶密碼 #!/usr/bin/expect #聲明解釋器,不再是默認(rèn)的bash,需要聲明 set timeout 5 #set設(shè)置,timeout超時(shí)時(shí)間,expect有一個(gè)默認(rèn)的超時(shí)時(shí)間為10秒,設(shè)置超時(shí)時(shí)間為5秒 #也可以作為設(shè)置變量 spawn passwd dn #spawn后面用來聲明需要執(zhí)行的命令,開啟會話過程,并且跟蹤后續(xù)的交互信息 expect "新的 密碼:" #捕獲需要執(zhí)行的命令行,只要能夠捕獲即可,不需要完整的,可以用*代表所有 send "abc123\r" #輸入指令代碼 expect "重新輸入新的 密碼:" send "abc123\r" #最后一定要有結(jié)束語,結(jié)束語只能寫一個(gè) expect eof #交互指令結(jié)束之后會退回原用戶,切換回之前的用戶 interact #留在當(dāng)前用戶,不會動 免交互只能先賦權(quán)再./執(zhí)行 chomod 777 passwd.sh ./passwd.sh 3.3.2su免交互切換用戶 #!/usr/bin/expect set timeout 5 #傳參的方式來表示 set username [lindex $argy 0] set passwd [lindex $argy 1] #這種方式就是位置變量 #開始追蹤 spawn su - $username #免交互開始執(zhí)行 expect "密碼" send "$passwd\r" #繼續(xù)捕獲 expect "~]$" (普通用戶) 【expect "~]#" ?(管理員)】 send_user "ok" #send_user = echo 打印指定內(nèi)容 #結(jié)束語 interact expect eof 3.3.3嵌入執(zhí)行模式 ? 在shell當(dāng)中加入expect。涉及到環(huán)境切換的場景不建議使用嵌套。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 ssh免密登錄 ?#!/usr/bin/expect set ip 192.168.230.30 set user root set password 123 set timeout 5 #進(jìn)入命令行: spawn ssh $user@$ip expect { ? ? ? ? "yes/no" {send "yes\r";exp_continue} #這里捕獲兩次,表示該項(xiàng)被匹配之后,繼續(xù)匹配其他指定的內(nèi)容,類似于循環(huán)的continue,允許expect語句繼續(xù)向下執(zhí)行 ? ? ? ? ?"password" {send "$password\r"} } interact ?主機(jī)連接 #!/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 "主機(jī)名/ip有誤\n"} ? ? ? ? "Connection refused" {send_user "ssh連接拒絕\n"} ? ? ? ? "(yes/no)" {send "yes\r";exp_continue} ? ? ? ? "password" {send "$password\r"} } interact 柚子快報(bào)邀請碼778899分享:網(wǎng)絡(luò) 免交互 參考閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。