03- Shell腳本學習--字符串和數組


字符串

字符串是shell編程中最常用最有用的數據類型(除了數字和字符串,也沒啥其它類型好用了),字符串可以用單引號,也可以用雙引號,也可以不用引號。單雙引號的區別跟PHP類似:

單雙引號的區別:

  • 雙引號里可以有變量,單引號則原樣輸出;
  • 雙引號里可以出現轉義字符,單引號則原樣輸出;
  • 單引號字串中不能出現單引號。

拼接字符串

#!/bin/bash

str1='i'
str2='love'
str3='you'

echo $str1 $str2 $str3
echo $str1$str2$str3
echo $str1,$str2,$str3

輸出:

i love you
iloveyou
i,love,you

獲取字符串長度

#!/bin/bash/

str='i love you'

echo ${#str}

# 輸出:10

截取字符串

#!/bin/bash/

str='i love you'

echo ${str:1} # 從第1個截取到末尾。注意從0開始。
echo ${str:2:2} # 從第2個截取2個。
echo ${str:0} # 全部截取。
echo ${str:-3} # 負數無效,視為0。

輸出:

love you
lo
i love you
i love you

查找字符串

#!/bin/bash/

str="i love you"

echo `expr index "$str" l`
echo `expr index "$str" love` #最后一個參數是字符,字符串只保留首字母
echo `expr index "$str" o`
echo `expr length "$str"` #字符串長度
echo `expr substr "$str" 1 6` #從字符串中位置1開始截取6個字符。索引是從0開始的。

輸出:

3
3
4
10
i love

注意字符串變量需要加雙引號。

*拓展:expr更多關於字符串用法:

STRING : REGEXP   anchored pattern match of REGEXP in STRING

match STRING REGEXP        same as STRING : REGEXP

substr STRING POS LENGTH   #從STRING中POS位置開始截取LENGTH個字符。POS索引是從1開始的。

index STRING CHARS         #在STRING中查找字符CHARS首次出現的位置,沒有找到返回0

length STRING              #字符串長度

數組

bash支持一維數組(不支持多維數組),並且沒有限定數組的大小。類似與C語言,數組元素的下標由0開始編號。獲取數組中的元素要利用下標,下標可以是整數或算術表達式,其值應大於或等於0。

在Shell中,用括號來表示數組,數組元素用空格符號分割開。定義數組的一般形式為:

array_name=(value1 value2 ... valuen)

例如:

array_name=(value0 value1 value2 value3)

或者

array_name=(
    value0
    value1
    value2
    value3
)

還可以單獨定義數組的各個分量:

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

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

下面來讀取數組:

echo ${array_name[2]} #讀取下標為2的元素
echo ${array_name[*]} #讀取所有元素
echo ${array_name[@]} #讀取所有元素


echo ${#array_name[*]} #獲取數組長度
echo ${#array_name[@]} #獲取數組長度
echo ${#array_name[1]} #獲取數組中單個元素的長度

輸出:

value2
value0 value1 value2 value3
value0 value1 value2 value3
4
4
6

總結

對比shell里字符串和數組,我們發現:

字符串

str="hello"
${#str} # 讀取字符串長度
echo ${str} # 讀取字符串全部
echo ${str:1} # 截取字符串

數組:

arr=(a1,a2,a3)
${#str[*]} # 讀取數組長度
${#str[1]} # 讀取數組某個元素長度

echo ${str[*]} # 讀取數組全部
echo ${str[1]} # 讀取數組某個元素

${#ele*}用來讀取ele元素長度屬性
${ele*}用來讀取或操作ele元素

Shell腳本學習系列教程github: https://github.com/52fhy/shell-book


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM