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文章
11357浏览量
210861 -
文本编辑器
+关注
关注
0文章
28浏览量
8152 -
javascript
+关注
关注
0文章
525浏览量
54064 -
Shell
+关注
关注
1文章
366浏览量
23504
发布评论请先 登录
相关推荐
Shell基础知识(上)
Shell脚本编程实验
嵌入式和物联网的shell脚本学习指南之shell脚本入门免费下载

109个实用shell脚本分享
shell脚本基础知识汇总1
shell脚本基础知识汇总2
shell脚本基础知识汇总4
shell脚本基础知识
Linux Shell脚本经典案例分享

评论