一、shell變量定義:
命名只能使用英文字母,數字和下划線,首個字符不能以數字開頭;
中間不能有空格,可以使用下划線;
不能使用標點符號;
不能使用bash里的關鍵字。
變量使用:
使用一個定義過的變量,只要在變量名前面加美元符號即可,
your_name="test" echo $your_name echo ${your_name}
花括號可以省略,但以下情況需要添加:
for skill in Ada Coffe Action Java; do echo "I am good at ${skill}Script" done
不然解釋器會把$skillScript當成一個變量。
只讀變量:
使用readonly命令可以將將變量定義為只讀變量,只讀變量的值不能被改變。
刪除變量:
使用unset命令可以刪除變量。
#!/bin/sh test="11111" readonly test test="22222" #報錯,不可修改 unset test echo $test #輸出為空,變量已刪除
運行shell時,會同時存在三種變量:
(1)局部變量,在腳本或命令中定義,僅在當前shell實例中有效,其他shell啟動的程序不能訪問局部變量;
(2)環境變量,包括shell啟動的程序,都能訪問環境變量;
(3)shell變量,由shell程序設置的特殊變量。shell變量中有一部分是環境變量,有一部分是局部變量。
二、shell字符串
字符串可以用單引號,也可以用雙引號,也可以不用引號。
str='this is a string'
單引號限制:
單引號里的任何字符都會原樣輸出,單引號字符串中的變量是無效的;
單引號字符串中不能出現單獨一個的單引號(也不能使用轉義符)。
雙引號:
your_name="test" str="Hello, I know you are \"$your_name\"! \n" echo -e $str # -e參數表明處理特殊字符,不會當成一般文字輸出,此處表示換行而不直接輸出"\n" 輸出為: Hello, I know you are "test"!
雙引號優點:引號里可以有變量,可以出現轉義字符。
獲取字符串長度:
string="abcd" echo ${#string} #輸出4
提取子字符串:
str="Hello, I know you!" echo ${str:1:4} #輸出從第2個字符開始的4個字符 輸出ello
查找子字符串:
str="Hello, I know you!" echo `expr index "$str" l` #輸出 3 注意和提取字符串的索引區別
三、shell數組
bash支持一維數組,下標由0開始,下標可以是整數或算術表達式。
定義數組:
array_name=(value0 value1 value2 value3)
或者
array_name=(
value0
value1
value2
value3
)
或單獨定義數組的各個分量
array_name[0]=value0
array_name[1]=value1
array_name[n]=value
讀取數組:
${數組名[下標]}
例如:
value=${array_name[1]}
使用@符號可以獲取數組中的所有元素,如下:
echo ${array_name[@]}
獲取數組長度:和獲取字符串長度的方法相同
length=${#array_name[@]} #取得數組元素的個數 #或者 length=${#array_name[*]} len=${#array_name[n]} #獲取數組單個元素的長度
