天天看點

Day04 字元串截取&字元串初值&數組&字元串替換一、字元串截取二、路徑分割三、字元串替換四、字元串掐頭去尾4.2 字元串去尾五、字元串初值判斷六、數組七、expect預期互動

":"代表截取

起始位置從0開始(為0可以省略)

x=13918581996

echo ${x::5}#隻取前5位數字

13918

起始位置從1開始

expr substr "$x" 1 5

按照順序截取,起始位置從1開始

echo $x|cut -b 1-5

echo $x|cut -b 1,2,3,4,5

echo $x|cut -b 5,4,3,2,1

截取目錄位置

y=/etc/httpd/conf/httpd.conf

dirname $y

/etc/httpd/conf

截取檔案位置

basename $y

httpd.conf

"/"代表替換

隻替換第一個比對結果。即隻把最近的一個old替換成new,"/"符号表示替換一個。花括号裡面支援通配符

echo ${x/1/}

3918581996

替換全部比對結果。即把所有的old替換成new,"//"符号表示全部替換

echo ${x//1/}

39858996

"#"代表掐頭;"%"代表去尾

#代表從左往右删,##表示最長比對

我想知道root使用者使用的解釋器是哪個?

n=<code>head -1 /etc/passwd</code>

echo ${n##:} #""比對所有 ":"符合也一樣會删除

/bin/bash

#代表從左往右删,最短比對

我想知道root使用者是否配置了密碼?

echo ${n#*:}

x:0:0:root:/root:/bin/bash

%代表從右往左删,%%表示最長比對

我想知道passwd的第一行使用者是誰?

echo ${n%%:*}

root

%代表從右往左删,最短比對

我想把root的使用者的解釋器删掉

echo ${n%:*}

root:x:0:0:root:/root

若變量var已存在且非Null,則傳回 $var的值;否則傳回字串“value”

即嘗試顯示$var的值,如果之前有指派就顯示指派内容;如果變量不存在或未指派,則顯示:-後面的value

echo ${pass:-123456}

123456 #此時顯示的是value

pass=8888

8888#現在顯示的是給$pass賦的值

一個變量可以存多個值,值預設為文本,用在數學運算中時,自動将其轉換為整數。數組最大的好處是如果要存的值數量很多,可以在一行裡面定義完成

6.2數組指派格式

整體指派,下标從0開始

SVRS=(www ftp mail game)

echo ${SVRS[]}

www ftp mail game

還可以對值進行修改

SVRS[3]=bbs

www ftp mail bbs

為單個元素指派,下标從0開始

FQDN[0]=www.tmooc.cn

FQDN[1]=www.baidu.com

輸出單個數組元素

擷取所有數組元素

擷取所有數組元素個數

擷取連續的多個數組元素

擷取某個元素的長度

截取單個數組元素的一部分(包含起始下标字元本身)

基于TCL語言編寫的自動互動式程式,可以用在Shell腳本中,為互動式過程自動輸送預先準備的文本或者指令,而無需人工幹預。

觸發條件是預期會出現的特征提示文本,隻要出現就給指令,隻要出現就發文本等等

#!/usr/bin/expect #指定腳本解釋器

set host #定義變量

set timeout #定義逾時時間,機關為秒

spawn #建立互動式程序殼

expect {

"特征文本" {send "指令"}

} #根據特征文本執行相應指令

exp_continue #前面的exepct條件滿足後,繼續執行後面的語句

interact #expect腳本執行完畢後不退出,控制權交給expect控制台

自動遠端登入伺服器執行指令後退出

bash腳本:

#!/bin/bash

host=192.168.4.7

user=root

pass="123456"

expect &lt;&lt; EOF

spawn ssh $user@$host 

expect "password" {set timeout 180;send "$pass\r"}

expect "#" {send "cat /etc/redhat-release\r"}

expect "#" {send "ls"}

EOF

interact

expect腳本:

#!/usr/bin/expect

set host 192.168.4.7

set user root

set pass "123456"

"yes" {send "yes\r" ;exp_continue}

"password" {set timeout 180;send "$pass\r";exp_continue}

"[$user\@" {send "cat /etc/redhat-release\r"}

"#" {send "ls"}

}

因為有些電腦之前儲存過密鑰,有些沒儲存過

一種辦法是修改sshd的配置檔案

另外一種辦法是修改expect的逾時計時器時間

本文轉自 goldwinner 51CTO部落格,原文連結:http://blog.51cto.com/355665/2071218,如需轉載請自行聯系原作者