欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請(qǐng)碼778899分享:shell腳本【免交互】

柚子快報(bào)邀請(qǐng)碼778899分享:shell腳本【免交互】

http://yzkb.51969.com/

目錄

1. Here Document 免交互

1.1? Here Document概述

1.2 實(shí)驗(yàn)操練?

1.3 tee命令?

?1.4 變量替換

??2. expect 免交互

2.2 實(shí)驗(yàn)操練

1. Here Document 免交互

1.1? Here Document概述

? *使用I/O重定向的方式將命令列表提供給交互式程序或命令,比如 ftp、cat 或 read 命令。 ? *標(biāo)準(zhǔn)輸入的一種替代品, Here Document 也可以與非交互式程序和命令一起使用。

語法格式:

命令 <<標(biāo)記 (此處標(biāo)記的前后面可以有空格)

...

內(nèi)容 #標(biāo)記之間是傳入內(nèi)容

...

標(biāo)記 #結(jié)尾的標(biāo)記字符要和開頭的標(biāo)記字符,保持相同的大小寫,并且結(jié)尾標(biāo)記必須要頂格寫

注意事項(xiàng):

?

1.2 實(shí)驗(yàn)操練?

一、免交互修改用戶密碼

[root@localhost ~]# vim /etc/passwd

[root@localhost ~]# passwd liuyuchun <

> abc1234

> abc1234

> EOF

更改用戶 liuyuchun 的密碼 。

新的 密碼:無效的密碼: 密碼未通過字典檢查 - 過于簡單化/系統(tǒng)化

重新輸入新的 密碼:passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。

?二、免交互修改配置文件

[root@localhost ~]# cat < local.repo

> [local]

> name=local

> baseurl=file:///mnt

> enabled=1

> gpgcheck=0

> EOF

[root@localhost ~]# cat local.repo

[local]

name=local

baseurl=file:///mnt

enabled=1

gpgcheck=0

1.3 tee命令?

?tee命令解釋

[root@localhost day20]# cat <

> 123

> 456

> abc

> EOF

123

456

abc

[root@localhost day20]# cat <

> 淳人

> 好老師

> EOF

淳人

好老師

[root@localhost day20]#

[root@localhost day20]# cat abc.txt

123

456

abc

淳人

好老師

[root@localhost day20]#

[root@localhost day20]# cat <

> 1111

> 2222a

> EOF

1111

2222a

1111

2222a

[root@localhost day20]# cat <

> 1111

> 2222A

> EOF

1111

2222A

1111

2222A

1111

2222A

[root@localhost day20]# ls | tee file

abc.txt

day20

file

file1

file2

test.txt

[root@localhost day20]# cat file

abc.txt

day20

file

file1

file2

test.txt

?1.4 變量替換

初始狀態(tài)

默認(rèn)情況下EOF中間的內(nèi)容支持變量的替換;如果要關(guān)閉變量的替換,開頭標(biāo)記要用 '' 括起來,即 ?<<'EOF'

如果要抑制行首的制表符空白,開頭標(biāo)記前要加 - ,即 <<-EOF

如果要注釋多行內(nèi)容,可用 ?: <

?2. expect 免交互

建立在tcl語言基礎(chǔ)上的一個(gè)工具,常被用于進(jìn)行自動(dòng)化控制和測試,解決shell腳本中交互相關(guān)的問題??

rpm -q expect

rpm -q tcl

yum install -y expect

基本命令:(1)腳本解釋器 expect 腳本中首先引入文件,表明使用的是哪一個(gè) shell。 #!/usr/bin/expect

(2)spawn spawn 后面通常跟一個(gè)Linux執(zhí)行命令,表示開啟一個(gè)會(huì)話、啟動(dòng)進(jìn)程,并跟蹤后續(xù)交互信息。 例:spawn passwd root

(3)expect判斷上次輸出結(jié)果中是否包含指定的字符串,如果有則立即返回,否則就等待超時(shí)時(shí)間后返回; 只能捕捉由spawn啟動(dòng)的進(jìn)程的輸出; 用于接收命令執(zhí)行后的輸出,然后和期望的字符串匹配

(4)send 向進(jìn)程發(fā)送字符串,用于模擬用戶的輸入;該命令不能自動(dòng)回車換行,一般要加\r(回車)或者\(yùn)n 例: 方式一:

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

方式二:

expect "密碼"?? ?

send "abc123\r"?? ??? ??? ??? ??? ??? ??? ?#換行send部分不需要有{}

方式三:

expect支持多個(gè)分支

expect?? ??? ??? ??? ??? ?#只要匹配了其中一個(gè)情況,執(zhí)行相應(yīng)的send語句后退出該expect語句

{

"密碼1" {send "abc123\r"}

"密碼2" {send "123456\r"}

"密碼3" {send "123123\r"}

}

?

(5)結(jié)束符expect eof 表示交互結(jié)束,等待執(zhí)行結(jié)束,退回到原用戶,與spawn對(duì)應(yīng)。 比如切換到root用戶,expect腳本默認(rèn)的是等待10s,當(dāng)執(zhí)行完命令后,默認(rèn)停留10s后,自動(dòng)切回了原用戶

interact 執(zhí)行完成后保持交互狀態(tài),把控制權(quán)交給控制臺(tái),會(huì)停留在目標(biāo)終端而不會(huì)退回到原終端,這個(gè)時(shí)候就可以手工操作了,interact后的命令不起作用,比如interact后添加exit,并不會(huì)退出root用戶。而如果沒有interact則登錄完成后會(huì)退出,而不是留在遠(yuǎn)程終端上。 使用interact會(huì)保持在終端而不會(huì)退回到原終端,比如切換到root用戶,會(huì)一直在root用戶狀態(tài)下;比如ssh到另一服務(wù)器,會(huì)一直在目標(biāo)服務(wù)器終端,而不會(huì)切回的原服務(wù)器。

注意:expect eof 與 interact 只能二選一。

(6)set expect 默認(rèn)的超時(shí)時(shí)間是 10 秒,通過 set 命令可以設(shè)置會(huì)話超時(shí)時(shí)間, 若不限制超時(shí)時(shí)間則應(yīng)設(shè)置為-1。 例:set timeout 30

(7)exp_continue exp_continue 附加于某個(gè) expect 判斷項(xiàng)之后,可以使該項(xiàng)被匹配后,還能繼續(xù)匹配該 expect 判斷語句內(nèi)的其他項(xiàng)。exp_continue 類似于控制語句中的 continue 語句。表示允許 expect 繼續(xù)向下執(zhí)行指令。 例如:下例將判斷交互輸出中是否存在 yes/no 或 *password。如果匹配 yes/no 則輸出 yes 并再次執(zhí)行判斷;如果匹配 *password 則輸出 abc123 并結(jié)束該段 expect 語句。

expect {

? ? "(yes/no)" {send "yes\r"; exp_continue;}

? ? "*password" {set timeout 300; send "abc123\r";}

}

注意:使用exp_continue時(shí),如果跟蹤像 passwd 這樣的輸入密碼后就結(jié)束進(jìn)程的命令,expect{}外不要再加上expect eof 因?yàn)閟pawn進(jìn)程結(jié)束后會(huì)默認(rèn)向expect發(fā)送eof,會(huì)導(dǎo)致后面的 expect eof 執(zhí)行報(bào)錯(cuò)

(8)send_user send_user 表示回顯命令,相當(dāng)于 echo

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

set hostname [lindex $argv 0] ? ?? ?相當(dāng)于 hostname=$1

set password [lindex $argv 1]?? ??? ?相當(dāng)于 password=$2

2.2 實(shí)驗(yàn)操練

一、切換su用戶

#!/usr/bin/expect

set timeout 20

#設(shè)置退出時(shí)間

spawn su root

expect "密碼:" {send "abc1234\r"}

expect "*]#" {send_user "root用戶切換成功!"}

expect eof#退出免交互進(jìn)程,返回交互前狀態(tài),也就是原先未切換用戶的狀態(tài)

?二、ssh遠(yuǎn)程登錄

#!/usr/bin/expect

set dest_host {lindex $argv 0}

set password {lindex $argv 1}

spawn ssh $dest_host

expect {

"Connection refused" {send_user "目標(biāo)主機(jī)訪問被拒絕\n"}

"No route to host" {send_user "目標(biāo)主機(jī)沒有開機(jī)\n"}

"(yes/no)" {send "yes\r"; exp_continue;}

"*password:" {send "$password\r"}

}

#interact

expect eof

?三、創(chuàng)建用戶并設(shè)置密碼的免交互操作

?

[root@localhost /opt]# bash demo3.sh xiao

請(qǐng)輸入xiao的密碼:123

useradd:用戶“xiao”已存在

spawn passwd xiao

更改用戶 xiao 的密碼 。

新的 密碼:

無效的密碼: 密碼少于 8 個(gè)字符

重新輸入新的 密碼:

passwd:所有的身份驗(yàn)證令牌已經(jīng)成功更新。

[root@localhost /opt]# vim demo3.sh

#!/bin/bash外面環(huán)境仍然是shell腳本的shell環(huán)境

username=$1

read -p "請(qǐng)輸入$username的密碼:" password

useradd $username

#在bash環(huán)境中嵌入expect,expect嵌入模式不建議作ssh,su這種會(huì)保持狀態(tài)的交互操作

/usr/bin/expect << EOF #將EOF對(duì)中間的命令操作重定向輸入到/usr/bin/expect環(huán)境中

spawn passwd $username #spawn用來做定向跟蹤進(jìn)程

expect "新的*" #expect用來匹配指定字符

send "${password}\r" #send返回匹配后輸入的結(jié)果

expect "重新輸入*"

send "${password}\r"

expect eof #結(jié)束當(dāng)前免交互進(jìn)程

EOF

?

柚子快報(bào)邀請(qǐng)碼778899分享:shell腳本【免交互】

http://yzkb.51969.com/

參考鏈接

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18922247.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄