shell脚本基础知识汇总3

电子说

1.3w人已加入

描述

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 语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。

语法格式如下:


casein
模式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."

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分