Shell指令碼 4 Shell字串詳解

2021-10-06 16:36:30 字數 3016 閱讀 3743

字串(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之間的驗證關係,即使驗證不正確,程...