Shell學習 (3)替換,字串,陣列

2021-07-08 19:02:18 字數 3152 閱讀 4487

替換

shell變數替換,命令替換,轉義字元

命令替換命令替換是指shell可以先執行命令,將輸出結果暫時儲存,在適當的地方輸出。

命令替換的語法:

複製

純文字新視窗

`command`

`command`

注意是反引號,不是單引號,這個鍵位於 esc 鍵下方。

下面的例子中,將命令執行結果儲存在變數中:

複製

純文字新視窗

#!/bin/bash

date

=`date`

echo "date is $date"

變數替換變數替換可以根據變數的狀態(是否為空、是否定義等)來改變它的值

可以使用的變數替換形式:

形式說明

$變數本來的值

$如果變數 var 為空或已被刪除(unset),那麼返回 word,但不改變 var 的值。

$如果變數 var 為空或已被刪除(unset),那麼返回 word,並將 var 的值設定為 word。

$如果變數 var 為空或已被刪除(unset),那麼將訊息 message 送到標準錯誤輸出,可以用來檢測變數 var 是否可以被正常賦值。

若此替換出現在shell指令碼中,那麼指令碼將停止執行。

$如果變數 var 被定義,那麼返回 word,但不改變 var 的值。

字元轉義

舉個例子:

複製

純文字新視窗

#!/bin/basha=

10echo -e

"value of a is $a \n"

#!/bin/bash

a=10

echo -e "value of a is $a \n"

執行結果:

value of a is 10
這裡 -e 表示對轉義字元進行替換。如果不使用 -e 選項,將會原樣輸出:

value of a is 10\n

下面的轉義字元都可以用在 echo 中:

轉義字元

含義\\

反斜槓\a

警報,響鈴

\b退格(刪除鍵)

\f換頁(ff),將當前位置移到下頁開頭

\n換行

\r回車

\t水平製表符(tab鍵) 

\v垂直製表符

可以使用 echo 命令的 -e 選項禁止轉義,預設也是不轉義的;使用 -n 選項可以禁止插入換行符。

bash 支援很多運算子,包括算數運算子、關係運算子、布林運算子、字串運算子和檔案測試運算子。

原生bash不支援簡單的數**算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。

expr 是一款表示式計算工具,使用它能完成表示式的求值操作。

例如,兩個數相加:

複製

純文字新視窗

#!/bin/bash

val=`expr 2+2`

echo "total value : $val"

#!/bin/bash

val=`expr 2 + 2`

echo "total value : $val"

執行指令碼輸出:

total value : 4
兩點注意:

字串是shell程式設計中最常用最有用的資料型別(除了數字和字串,也沒啥其它型別好用了),字串可以用單引號,也可以用雙引號,也可以不用引號。單雙引號的區別跟php類似。

複製

純文字新視窗

str

='this is a string'

str='this is a string'

單引號字串的限制:

複製

純文字新視窗

your_name

='qinjx'

str=

"hello, i know your are

\"$your_name

\"! \n"

your_name='qinjx'

str="hello, i know your are \"$your_name\"! \n"

雙引號的優點:

定義陣列

在shell中,用括號來表示陣列,陣列元素用「空格」符號分割開。定義陣列的一般形式為:

array_name=(value1 ... valuen)

例如:

複製

純文字新視窗

array_name

=(value0 value1 value2 value3)

array_name=(value0 value1 value2 value3)

或者

複製

純文字新視窗

array_name

=(value0

value1

value2

value3

)

array_name=(

value0

value1

value2

value3

)

還可以單獨定義陣列的各個分量:

複製

純文字新視窗

array_name[

0]=value0

array_name[

1]=value1

array_name[

2]=value2

array_name[0]=value0

array_name[1]=value1

array_name[2]=value2

可以不使用連續的下標,而且下標的範圍沒有限制。

shell 字串替換

替換特定字串,原變數並未修改 echo 匹配字元 替換字元 www.google.com echo net 原變數並未修改 替換所有匹配到的字元,應該通過 echo 將net的.替換為 echo 將net的.替換為 只替換開頭匹配的字串 對於add www.xiaomi.com.www的開頭的www...

Shell字串的替換

字串的替換 1 只替換第1個子串 格式 還以前面的phone變數為例,確認原始值 1.root dyy echo phone 2.13788768897將字串中的第1個8替換為x 1.root dyy echo 2.137x87688972 替換全部子串 格式 將phone字串中的所有8都替換為x ...

shell 字串操作 變數替換

這篇部落格和我之前整理的字串處理有部分重疊 但是主要字串的特換還是有用,就 了一下。表示式含義 獲取字串 string 的長度 從字串 string position 處擷取子串 從字串 string position 處擷取length 長度的子串 從字串 string 的開頭,刪除最短匹配 su...