字符串處理

1.字符串切片

①${#var}:
返回字符串變量var的長(zhǎng)度
②${var:offset}:
返回字符串變量var中從第offset個(gè)字符后(不包括第offset個(gè)字符)的字符開(kāi)始,到最后的部分,offset的取值在0到 ${#var}-1 之間(bash4.2后这敬,允許為負(fù)值)
③${var:offset:number}:
返回字符串變量var中從第offset個(gè)字符后(不包括第offset個(gè)字符)的字符開(kāi)始鸳址,長(zhǎng)度為number的部分
④${var: -length}:
取字符串的最右側(cè)幾個(gè)字符
注意:冒號(hào)后必須有一空白字符
⑤${var:offset:-length}:
從最左側(cè)跳過(guò)offset字符餐弱,一直向右取到距離最右側(cè)lengh個(gè)字符之前的內(nèi)容
⑥${var: -length:-offset}:
先從最右側(cè)向左取到length個(gè)字符開(kāi)始窟赏,再向右取到距離最右側(cè)offset個(gè)字符之間的內(nèi)容
注意:-length前空格

Paste_Image.png

2.基于模式取子串

①${var#*word}:其中word可以是指定的任意字符
功能:自左而右僧家,查找var變量所存儲(chǔ)的字符串中瞄摊,第一次出現(xiàn)的word, 刪除字符串開(kāi)頭至第一次出現(xiàn)word字符之間的所有字符
②${var##*word}:同上勋又,貪婪模式
不同的是,刪除的是字符串開(kāi)頭至最后一次由word指定的字符之間的所有內(nèi)容

Paste_Image.png

③${var%word*}:其中word可以是指定的任意字符换帜;
功能:自右而左楔壤,查找var變量所存儲(chǔ)的字符串中,第一次出現(xiàn)的word, 刪除字符串最后一個(gè)字符向左至第一次出現(xiàn)word字符之間的所有字符惯驼;
④${var%%word*}:
同上蹲嚣,只不過(guò)刪除字符串最右側(cè)的字符向左至最后一次出現(xiàn)word字符之間的所有字符递瑰;
eg:

Paste_Image.png
Paste_Image.png

3. 查找替換

①${var/pattern/substr}:
查找var所表示的字符串中,第一次被pattern所匹配到的字符串端铛,以substr替換之
②${var//pattern/substr}:
查找var所表示的字符串中泣矛,所有能被pattern所匹配到的字符串,以substr替換之
③${var/#pattern/substr}:
查找var所表示的字符串中禾蚕,行首被pattern所匹配到的字符串您朽,以substr替換之
④${var/%pattern/substr}:
查找var所表示的字符串中,行尾被pattern所匹配到的字符串换淆,以substr替換之

4.查找并刪除

①${var/pattern}
刪除var所表示的字符串中第一次被pattern所匹配到的字符串
②${var//pattern}
刪除var所表示的字符串中所有被pattern所匹配到的字符串
③${var/#pattern}
刪除var所表示的字符串中所有以pattern為行首所匹配到的字符串
④${var/%pattern}
刪除var所表示的字符串中所有以pattern為行尾所匹配到了的字符串

![Upload Paste_Image.png failed. Please try again.]

5.字符大小寫(xiě)轉(zhuǎn)換

①${var^^}:把var中的所有小寫(xiě)字母轉(zhuǎn)換為大寫(xiě)
②${var,,}:把var中的所有大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)

Paste_Image.png
Paste_Image.png

6.高級(jí)變量用法-有類型變量

Shell變量一般是無(wú)類型的哗总,但是bash Shell提供了declare和typeset兩個(gè)命令用于指定變量的類型,兩個(gè)命令是等價(jià)

(1)declare [選項(xiàng)] 變量名

-r 聲明或顯示只讀變量
-i 將變量定義為整型數(shù)
-a 將變量定義為數(shù)組
-A 將變量定義為關(guān)聯(lián)數(shù)組
-f 顯示已定義的所有函數(shù)名及其內(nèi)容
-F 僅顯示已定義的所有函數(shù)名
-x 聲明或顯示環(huán)境變量和函數(shù)
-l 聲明變量為小寫(xiě)字母 declare –l var=UPPER
-u 聲明變量為大寫(xiě)字母 declare –u var=lower

(2)eval命令

eval命令將會(huì)首先掃描命令行進(jìn)行所有的置換倍试,然后再執(zhí)行該命令讯屈。該命令適用于那些一次掃描無(wú)法實(shí)現(xiàn)其功能的變量.該命令對(duì)變量進(jìn)行兩次掃描
eg:

[root@server ~]# CMD=whoami
[root@server ~]# echo $CMD
whoami
[root@server ~]# eval $CMD
root
[root@server ~]# n=10
[root@server ~]# echo {0..$n}
{0..10}
[root@server ~]# eval echo {0..$n}
0 1 2 3 4 5 6 7 8 9 10

7.間接變量引用

(1)如果第一個(gè)變量的值是第二個(gè)變量的名字,從第一個(gè)變量引用第二個(gè)變量的值就稱為間接變量引用
(2)variable1的值是variable2县习,而variable2又是變量名涮母,
variable2的值為value,間接變量引用是指通過(guò)variable1獲得變量值value的行為
variable1=variable2
variable2=value
(3)bash Shell提供了兩種格式實(shí)現(xiàn)間接變量引用
eval tempvar=$$variable1
tempvar=${!variable1}

eg:

[root@server ~]# N=NAME
[root@server ~]# NAME=yin
[root@server ~]# N1=${!N}
[root@server ~]# echo $N1
yin
[root@server ~]# eval N2=\$$N
[root@server ~]# echo $N2
yin

8.mktemp命令:創(chuàng)建并顯示臨時(shí)文件躁愿,可避免沖突

mktemp [OPTION]... [TEMPLATE]

TEMPLATE: filename.XXX
X至少要出現(xiàn)三個(gè)

OPTION:

-d: 創(chuàng)建臨時(shí)目錄
-p DIR或--tmpdir=DIR:指明臨時(shí)文件所存放目錄位置

Paste_Image.png

eg:

# mktemp /tmp/test.XXX
# tmpdir=`mktemp –d /tmp/testdir.XXX`
# mktemp --tmpdir=/testdir test.XXXXXX

9. install安裝復(fù)制文件

install [OPTION]... [-T] SOURCE DEST 單文件
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
install [OPTION]... -d DIRECTORY...創(chuàng)建空目錄
? 選項(xiàng):
-m MODE叛本,默認(rèn)755
-o OWNERsuoyouzhe
-g GROUP所屬組

eg:

# install -m 700 -o wang -g admins srcfile(源文件) desfile(目標(biāo)文件)
# install –m  700 –d /testdir/installdir 

10.expect

(1)介紹

expect 是由Don Libes基于Tcl( Tool Command Language)語(yǔ)言開(kāi)發(fā),主要應(yīng)用于自動(dòng)化交互式操作的場(chǎng)景彤钟,借助Expect處理交互的命令来候,可以將交互過(guò)程如:ssh登錄,ftp登錄等寫(xiě)在一個(gè)腳本上逸雹,使之自動(dòng)化完成营搅。尤其適用于需要對(duì)多臺(tái)服務(wù)器執(zhí)行相同操作的環(huán)境中,可以大大提高系統(tǒng)管理人員的工作效率

(2)expect命令

expect [選項(xiàng)] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]
選項(xiàng)

-c:從命令行執(zhí)行expect腳本梆砸,默認(rèn)expect是交互地執(zhí)行的
示例:expect -c 'expect "\n" {send "pressed enter\n"}
-d:可以輸出輸出調(diào)試信息
示例:expect -d ssh.exp

(3)expect中相關(guān)命令

spawn:?jiǎn)?dòng)新的進(jìn)程
send:用于向進(jìn)程發(fā)送字符串
expect:從進(jìn)程接收字符串
interact:允許用戶交互
exp_continue 匹配多個(gè)字符串在執(zhí)行動(dòng)作后加此命令

(4)expect最常用的語(yǔ)法(tcl語(yǔ)言:模式-動(dòng)作)

①單一分支模式語(yǔ)法:
expect “hi” {send “You said hi\n"}
匹配到hi后转质,會(huì)輸出“you said hi”,并換行
②多分支模式語(yǔ)法:
expect "hi" { send "You said hi\n" }
"hehe" { send “Hehe yourself\n" }
"bye" { send “Good bye\n" }
③匹配hi,hello,bye任意字符串時(shí)帖世,執(zhí)行相應(yīng)輸出休蟹。等同如下:
expect {
"hi" { send "You said hi\n"}
"hehe" { send "Hehe yourself\n"}
"bye" { send “Good bye\n"}
}

eg:

cat ssh1.exp
#!/usr/bin/expect
spawn ssh 192.168.8.100
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send “magedu\n" }
}
interact
#expect eof

示例:變量

cat ssh2.exp
#!/usr/bin/expect
set ip 192.168.8.100
set user root
set password magedu
set timeout 10
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
interact

示例:位置參數(shù)

vim ssh3.exp
#!/usr/bin/expect
set ip [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
interact
#./ssh3.exp 192.168.8.100 root magedu

示例:執(zhí)行多個(gè)命令

cat ssh4.exp
#!/usr/bin/expect
set ip [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
set timeout 10
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect "]#" { send "useradd haha\n" }
expect "]#" { send "echo magedu |passwd --stdin haha\n" }
send "exit\n"
expect eof
#./ssh4.exp 192.168.8.100 root magedu

示例:shell腳本調(diào)用expect

vim ssh5.sh
#!/bin/bash
ip=$1
user=$2
password=$3
expect <<EOF
set timeout 10
spawn ssh $user@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$password\n" }
}
expect "]#" { send "useradd hehe\n" }
expect "]#" { send "echo magedu |passwd --stdin hehe\n" }
expect "]#" { send "exit\n" }
expect eof
EOF
#./ssh5.sh 192.168.8.100 root magedu
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市狮暑,隨后出現(xiàn)的幾起案子鸡挠,更是在濱河造成了極大的恐慌,老刑警劉巖搬男,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拣展,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡缔逛,警方通過(guò)查閱死者的電腦和手機(jī)备埃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門姓惑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人按脚,你說(shuō)我怎么就攤上這事于毙。” “怎么了辅搬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵慧域,是天一觀的道長(zhǎng)响巢。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么氮墨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任埃儿,我火速辦了婚禮入问,結(jié)果婚禮上辨图,老公的妹妹穿的比我還像新娘。我一直安慰自己猿妈,他們只是感情好吹菱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著彭则,像睡著了一般鳍刷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上贰剥,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天倾剿,我揣著相機(jī)與錄音筷频,去河邊找鬼蚌成。 笑死,一個(gè)胖子當(dāng)著我的面吹牛凛捏,可吹牛的內(nèi)容都是我干的担忧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼坯癣,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼瓶盛!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起示罗,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤惩猫,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蚜点,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體轧房,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年绍绘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了奶镶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片迟赃。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖厂镇,靈堂內(nèi)的尸體忽然破棺而出纤壁,到底是詐尸還是另有隱情,我是刑警寧澤捺信,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布酌媒,位于F島的核電站,受9級(jí)特大地震影響迄靠,放射性物質(zhì)發(fā)生泄漏馍佑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一梨水、第九天 我趴在偏房一處隱蔽的房頂上張望拭荤。 院中可真熱鬧,春花似錦疫诽、人聲如沸舅世。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雏亚。三九已至,卻和暖如春摩钙,著一層夾襖步出監(jiān)牢的瞬間罢低,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工胖笛, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留网持,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓长踊,卻偏偏與公主長(zhǎng)得像功舀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子身弊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1、數(shù)組 定義?變量:存儲(chǔ)單個(gè)元素的內(nèi)存空間?數(shù)組:存儲(chǔ)多個(gè)元素的連續(xù)的內(nèi)存空間凑术,相當(dāng)于多個(gè)變量的集合?數(shù)組名和索...
    張大志的博客閱讀 805評(píng)論 0 0
  • 在做shell批處理程序時(shí)候翩蘸,經(jīng)常會(huì)涉及到字符串相關(guān)操作。有很多命令語(yǔ)句麦萤,如:awk,sed都可以做字符串各種操作...
    shu_ke閱讀 12,611評(píng)論 3 2
  • 1鹿鳖、字符串轉(zhuǎn)換 字符串轉(zhuǎn)換是最基礎(chǔ)的要求和工作扁眯,你可以將任何類型的數(shù)據(jù)都轉(zhuǎn)換為字符串,你可以用下面三種方法的任何一...
    fourzyz閱讀 610評(píng)論 0 0
  • 上一篇文章我介紹了AHK 中的字符串拼接和遍歷操作翅帜,但除此之外還有很多其他類型的字符串操作姻檀。本文會(huì)羅列 AHK 中...
    陌辭寒閱讀 4,180評(píng)論 2 2
  • 連續(xù)幾晚,迷迷糊糊夢(mèng)到自己還在和苦茶富繞境團(tuán)的大家徒步走路中涝滴,背景音樂(lè)是大甲媽繞境的《天上聖母媽祖頌》绣版。距離完成2...
    拍謝少女閱讀 1,035評(píng)論 0 50