1.7 關(guān)聯(lián)數(shù)組
關(guān)聯(lián)數(shù)組定義
Bash 支持關(guān)聯(lián)數(shù)組,可以使用任意的字符串、或者整數(shù)作為下標來訪問數(shù)組元素。與其他語言中的map是類似的,它是無序的。
關(guān)聯(lián)數(shù)組使用 declare
-A
命令來聲明,語法格式如下:
declare -A map=(["key1"]="value1" ["key2"]="value2")
和索引數(shù)組一樣,也支持指定key賦值,示例如下:
declare -A map=(["key1"]="value1" ["key2"]="value2")
declare -A map2
map2["key3"]="value3"
# 獲取指定key的值
echo ${map["key1"]}
# 獲取關(guān)聯(lián)數(shù)組的所有鍵
echo ${!map[*]}
echo ${map[*]}
獲取關(guān)聯(lián)數(shù)組長度
同獲取字符串長度一樣,也是通過${#variable_name}
方式獲取,示例如下:
declare -A map=(["key1"]="value1" ["key2"]="value2")
#獲取關(guān)聯(lián)數(shù)組長度
echo ${#map[*]}
# 輸出結(jié)果
2
獲取key與value
通過${map[key]}
方式獲取指定key的值,通過${map[*]}
獲取所有的值,通過${!map[*]}
獲取所有的鍵,示例如下:
map=(["key1"]="value1" ["key2"]="value2")
# 獲取指定key的值
echo ${map["key1"]}
echo ${map[*]}
echo ${!map[*]}
# 輸出結(jié)果
value1
value2 value1
key2 key1
1.8 流程控制
If else
判斷某個條件成立或者不成立時要執(zhí)行的動作,中間的elif 和else都是可選,格式如下:
if condition1; then
command1
elif condition2; then
command2
else
command3
fi
常見的判斷操作符如下:
文件/目錄 | -f | 文件是否存在 | |
---|---|---|---|
-d | 目錄是否存在 | ||
-x | 文件存在且可執(zhí)行 | ||
-r | 文件存在且可讀 | ||
-w | 文件存在且可寫 | ||
字符串 | -z | 字符串為空 | |
-n | 字符串不為空 | ||
= | 字符串相等 | ||
!= | 字符串不相等 | ||
=~ | 字符串包含 | ||
數(shù)字比較 | -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
# 數(shù)字大小判斷
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 循環(huán)
for循環(huán)格式如下,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
# 輸出結(jié)果
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
# 結(jié)合read可以實現(xiàn)常見的按行讀取文件內(nèi)容
echo "aa" > 1.text
echo "bb" >> 1.txt
while read line;do
echo $line
done < 1.text
# 輸出結(jié)果
1
2
3
aa
bb
case ... esac
為多選擇語句,與其他語言中的 switch ... case 語句類似,是一種多分支選擇結(jié)構(gòu),每個 case 分支用右圓括號開始, 用兩個分號 ** ;; ** 表示 break ,即執(zhí)行結(jié)束,跳出整個 case ... esac 語句,esac(就是 case 反過來)作為結(jié)束標記。
可以用 case 語句匹配一個值與一個模式,如果匹配成功,執(zhí)行相匹配的命令。
語法格式如下:
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
+關(guān)注
關(guān)注
87文章
11499瀏覽量
213344 -
文本編輯器
+關(guān)注
關(guān)注
0文章
28瀏覽量
8233 -
javascript
+關(guān)注
關(guān)注
0文章
525瀏覽量
54672 -
Shell
+關(guān)注
關(guān)注
1文章
372瀏覽量
24147
發(fā)布評論請先 登錄
Shell基礎(chǔ)知識(上)
Shell腳本編程實驗
嵌入式和物聯(lián)網(wǎng)的shell腳本學習指南之shell腳本入門免費下載

109個實用shell腳本分享
Linux開發(fā)_Makefile規(guī)則與Shell腳本語言
shell腳本基礎(chǔ)知識匯總1
shell腳本基礎(chǔ)知識匯總2
shell腳本基礎(chǔ)知識匯總4
shell腳本基礎(chǔ)知識
Linux Shell腳本經(jīng)典案例分享

評論