字串(string)就是一系列字元的組合。字串是 shell 程式設計中最常用的資料型別之一(除了數字和字串,也沒有其他型別了)。
字串和變數一樣也有三種方式
str1=hello
str2='shell'
str3="scirpt"
這個三種形式的區別
<1>由單引號』 '包圍的字串:
任何字元都會原樣輸出,在其中使用變數是無效的。
字串中不能出現單引號,即使對單引號進行轉義也不行。
<2> 由雙引號" "包圍的字串:
如果其中包含了某個變數,那麼該變數會被解析(得到該變數的值),而不是原樣輸出。
字串中可以出現雙引號,只要它被轉義了就行。
<3> 不被引號包圍的字串
不被引號包圍的字串**現變數時也會被解析,這一點和雙引號" "包圍的字串一樣。
字串中不能出現空格,否則空格後邊的字串會作為其他變數或者命令解析。
方法如下:
$
示例:
#!/bin/bash
str="hello shell script"
echo $(
#str)
執行結果:
[root@system ~]
# ./test1.sh
18
在 shell 中你不需要使用任何運算子,將兩個字串併排放在一起就能實現拼接
#!/bin/bash
a="hello"
b="shell script"
str1=$a
$b#中間不能有空格
str2="$a
$b"#如果被雙引號包圍,那麼中間可以有空格
str3=$a
"-"$b
#中間可以出現別的字串
str4="$ haha $++"
#這個時候需要給變數名加上大括號
echo
$str1
echo
$str2
echo
$str3
echo
$str4
執行結果
[root@system ~]
# ./test1.sh
helloshell script
hello shell script
hello-shell script
hello haha shell script++
shell 擷取字串通常有兩種方式:從指定位置開始擷取和從指定字元(子字串)開始擷取。
格式說明
$從 string 字串的左邊第 start 個字元開始,向右擷取 length 個字元。
$從 string 字串的右邊第 start 個字元開始,向右擷取 length 個字元。
$從 string 字串第一次出現 *chars 的位置開始,擷取 *chars 右邊的所有字元。
$從 string 字串最後一次出現 *chars 的位置開始,擷取 *chars 右邊的所有字元。
$從 string 字串第一次出現 *chars 的位置開始,擷取 *chars 左邊的所有字元。
$從 string 字串最後一次出現 *chars 的位置開始,擷取 *chars 左邊的所有字元。
示例:
[root@system ~]
# str="abcdefghigklmn"
[root@system ~]
# echo $
bcde
echo 「*** index ***」 字元索引值,返回字元在字串中第一次出現的索引值,此索引值從1開始;如果未找到則返回0
[root@system ~l]
# str="hello world"
[root@system ~]
# echo `expr index "$str" a`
0 #字串中未找到字元a
[root@system ~]
# echo `expr index "$str" e`
2[root@system ~]
# echo `expr index "$str" d`
11
上例中expr命令用於計算數值與處理字串
expr命令還可以用於:
數字運算
echo
"*** + - * / % ***"
#數字運算,最終返回計算結果。不過僅支援整數運算,如果使用浮點數將會報錯,例如:
echo `expr 8 + 2` #10,數字加法
字元匹配
echo
"*** : match ***"
#字元匹配,其中第2個引數是正規表示式,並且會從第1個引數所代表的字串中從頭開始匹配,最終返回正確匹配的字元數;如果匹配失敗,則返回0
echo `expr "$str" : "ing"` #0,無法匹配字串的開頭,所以匹配失敗
echo `expr "$str" : "st"` #2,成功匹配字串的前2個字元
獲取字串長度
echo
"*** length ***"
#字串長度,返回字串中所有字元的個數
echo `expr length "$str"` #17,返回字串的長度
提取字串
echo
"*** substr ***"
#提取子字串,第2個引數是開始提取的索引值,第3個引數是提取子字串的長度,最終返回所提取的子字串
echo `expr substr "$str" 13 5` #line.,成功提取了最後乙個單詞和句點
echo `expr substr "$str" 1 6` #string,成功提取了第乙個單詞
Shell基礎 4 Shell陣列
陣列中可以存放多個值。bash shell 只支援一維陣列 不支援多維陣列 初始化時不需要定義陣列大小 與 php 類似 與大部分程式語言類似,陣列元素的下標由0開始。shell 陣列用括號來表示,元素用 空格 符號分割開,語法格式如下 array name value1 value2 valuen...
其他4 shell指令碼後台執行知識
在實際工作中,一般會通過ssh連線伺服器,隱藏可能就會有指令碼或命令在執行期間不能中斷的需求,若中斷,則不僅前功盡棄,還可能破壞系統資料,下面是防止指令碼執行終端的3種方法 命令命令說明 a.sh 將a.sh放到後台執行,常用 ctrl c 停止當前前台指令碼或任務 ctrl z 暫停當前前台指令碼...
shell小指令碼4
1 編寫指令碼selinux.sh,實現開啟或禁用selinux功能 selinux有三種模式 enforcing 強制模式。代表selinux在執行,且已經開始限制domain type之間的驗證關係 permissive 寬容模式。不會限制domain type之間的驗證關係,即使驗證不正確,程...