":"代表截取
起始位置從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 << 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,如需轉載請自行聯系原作者