一、shell的字符串
字符串是shell編程中最常用最有用的數據類型(除了數字和字符串,也沒啥其它類型好用了),字符串可以用單引號,也可以用雙引號,也可以不用引號。
單引號
str='this is a string'
單引號字符串的限制:
- 單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
- 單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符后也不行),但可成對出現,作為字符串拼接使用。
雙引號
your_name="runoob" str="Hello, I know you are \"$your_name\"! \n" echo -e $str
輸出結果為:
Hello, I know you are "runoob"!
雙引號的優點:
- 雙引號里可以有變量
- 雙引號里可以出現轉義字符
拼接字符串
your_name="runoob" # 使用雙引號拼接 greeting="hello, "$your_name" !" greeting_1="hello, ${your_name} !" echo $greeting $greeting_1 # 使用單引號拼接 greeting_2='hello, '$your_name' !' greeting_3='hello, ${your_name} !' echo $greeting_2 $greeting_3
輸出結果為:
hello, runoob ! hello, runoob ! hello, runoob ! hello, ${your_name} !
獲取字符串長度
string="abcd" echo ${#string} #輸出 4
提取子字符串
以下實例從字符串第 2 個字符開始截取 4 個字符:
string="runoob is a great site" echo ${string:1:4} # 輸出 unoo
注意:第一個字符的索引值為 0。
查找子字符串
查找字符 i 或 o 的位置(哪個字母先出現就計算哪個):
string="runoob is a great site"
echo `expr index "$string" io` # 輸出 4
二、Shell的數組
定義數組
數組中可以存放多個值。Bash Shell 只支持一維數組(不支持多維數組),初始化時不需要定義數組大小(與 PHP 類似)。
與大部分編程語言類似,數組元素的下標由 0 開始。
Shell 數組用括號來表示,元素用"空格"符號分割開,語法格式如下:
array_name=(value1 value2 ... valuen)
我們也可以使用下標來定義數組:
array_name[0]=value0 array_name[1]=value1 array_name[2]=value2
讀取數組
讀取數組元素值的一般格式是:
${array_name[index]}
舉例:array_demo.sh
#!/bin/bash MY_ARRAY=('zhangsan' 18 'China') echo ${MY_ARRAY} echo "name: ${MY_ARRAY[0]}, age: ${MY_ARRAY[1]}, contry: ${MY_ARRAY[2]}"
運行:sh array_demo.sh
對數組進行賦值:
#!/bin/bash MY_ARRAY=('zhangsan' 18 'China') echo ${MY_ARRAY} echo "name: ${MY_ARRAY[0]}, age: ${MY_ARRAY[1]}, contry: ${MY_ARRAY[2]}" # 對數組進行賦值 MY_ARRAY[3]=180 MY_ARRAY[4]=75 echo "height: ${MY_ARRAY[3]}cm, weight: ${MY_ARRAY[4]}kg"
運行:
MBC02FV3MZMD6P:J_shell j$ sh array_demo.sh
zhangsan
name: zhangsan, age: 18, contry: China
height: 180cm, weight: 75kg
查看數組
1)查看系統聲明過的數組
declare -a
2) 訪問自定義數組的元素
遍歷數組
1)可以通過索引,依次獲取數組中的元素
2)for循環遍歷
【note】關聯數組的遍歷是通過索引值進行遍歷
關聯數組
1)什么是關聯數組---可以允許用戶自定義數組的索引,方便使用和高效
2)關聯數組一定要聲明,不聲明就是基本數組
聲明關聯數組:
declare -A ASS_ARRAY
舉例:關聯元祖有2種定義方式:
- 一次性賦一個值
- 一次性賦多個值
#!/bin/bash #聲明一個關聯數組 declare -a ass_array1 #自定義關聯數組的索引值 ass_array1[name]='zhangsan' ass_array1[age]=18
#一次性賦多個值 ass_array1=([contry]='China' [height]=180 [weight]=75) echo ${ass_array1} echo "name: ${ass_array1[0], age: ${ass_array1[1]}, weight: ${ass_array1[4]}"
【NOTE】基本數組的索引是從0,1,2.。。開始的,而關聯數組允許自定義索引,但是必須要先聲明為關聯數組