1.7 關聯數組
關聯數組定義
Bash 支持關聯數組,可以使用任意的字符串、或者整數作為下標來訪問數組元素。與其他語言中的map是類似的,它是無序的。
關聯數組使用 declare
-A
命令來聲明,語法格式如下:
declare -A map=(["key1"]="value1" ["key2"]="value2")
和索引數組一樣,也支持指定key賦值,示例如下:
declare -A map=(["key1"]="value1" ["key2"]="value2")
declare -A map2
map2["key3"]="value3"
# 獲取指定key的值
echo ${map["key1"]}
# 獲取關聯數組的所有鍵
echo ${!map[*]}
echo ${map[*]}
獲取關聯數組長度
同獲取字符串長度一樣,也是通過${#variable_name}
方式獲取,示例如下:
declare -A map=(["key1"]="value1" ["key2"]="value2")
#獲取關聯數組長度
echo ${#map[*]}
# 輸出結果
2
獲取key與value
通過${map[key]}
方式獲取指定key的值,通過${map[*]}
獲取所有的值,通過${!map[*]}
獲取所有的鍵,示例如下:
map=(["key1"]="value1" ["key2"]="value2")
# 獲取指定key的值
echo ${map["key1"]}
echo ${map[*]}
echo ${!map[*]}
# 輸出結果
value1
value2 value1
key2 key1
1.8 流程控制
If else
判斷某個條件成立或者不成立時要執行的動作,中間的elif 和else都是可選,格式如下:
if condition1; then
command1
elif condition2; then
command2
else
command3
fi
常見的判斷操作符如下:
文件/目錄 | -f | 文件是否存在 | |
---|---|---|---|
-d | 目錄是否存在 | ||
-x | 文件存在且可執行 | ||
-r | 文件存在且可讀 | ||
-w | 文件存在且可寫 | ||
字符串 | -z | 字符串為空 | |
-n | 字符串不為空 | ||
= | 字符串相等 | ||
!= | 字符串不相等 | ||
=~ | 字符串包含 | ||
數字比較 | -eq | 相等 | |
-ne | 不相等 | ||
-lt | 小于 | ||
-le | 小于等于 | ||
-gt | 大于 | ||
-ge | 大于等于 |
if
使用示例如下:
# 判斷文件是否存在
if [ -f ~/.bashrc ]; then
echo "~/.bashrc exist"
fi
# 判斷字符串是否為空
if [ -z $str ];then
echo "str is empty"
else
echo "str is not empty"
fi
# 數字大小判斷
if [ "$var" -eq 1 ];then
echo "var equal 1"
elif [ "$var" -gt 4 ];then
echo "var great than 4"
else
echo "other case"
fi
for 循環
for循環格式如下,item列表值可以分別單獨寫出來,也可以是一個列表
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
代碼示例:
for loop in 1 2 3
do
echo "The value is: $loop"
done
list=(a b c)
for var in ${list[*]}
do
echo "var is $var"
done
# 輸出結果
The value is: 1
The value is: 2
The value is: 3
var is a
var is b
var is c
while
while condition
do
command
done
代碼示例:
a=1
while (( $a<=3 ));do
echo $a
let a++
done
# 結合read可以實現常見的按行讀取文件內容
echo "aa" > 1.text
echo "bb" >> 1.txt
while read line;do
echo $line
done < 1.text
# 輸出結果
1
2
3
aa
bb
case ... esac
為多選擇語句,與其他語言中的 switch ... case 語句類似,是一種多分支選擇結構,每個 case 分支用右圓括號開始, 用兩個分號 ** ;; ** 表示 break ,即執行結束,跳出整個 case ... esac 語句,esac(就是 case 反過來)作為結束標記。
可以用 case 語句匹配一個值與一個模式,如果匹配成功,執行相匹配的命令。
語法格式如下:
case 值 in
模式1)
command1
command2
;;
模式2)
command1
command2
;;
esac
echo -n "Enter the name of an animal: "
read ANIMAL
echo -n "The $ANIMAL has "
case $ANIMAL in
horse | dog | cat) echo -n "four";;
man | kangaroo ) echo -n "two";;
*) echo -n "an unknown number of";;
esac
echo " legs."
-
Linux
+關注
關注
87文章
11232瀏覽量
208950 -
文本編輯器
+關注
關注
0文章
28瀏覽量
8103 -
javascript
+關注
關注
0文章
516瀏覽量
53798 -
Shell
+關注
關注
1文章
363瀏覽量
23298
發布評論請先 登錄
相關推薦
評論