shell中的数组操作

shell中数组操作

1.将一个字符串按照指定分隔符转换成数组

在shell处理中,经常需要将一个字符串按照字符串中的某个分隔符转换成一个数组,从而方便处理,转换时需要环境变量IFS,指定分隔符类型:

#!/bin/bash
# test.sh
# 给定字符串,以 ; 进行分割
TEST_STR="abc;def;ghi;jkl"
# 备份之前的分隔符环境变量
OLD_IFS=$IFS
# 指定分隔符为 ;
IFS=";"
# 将字符串以 ; 分割成数组
STR_LIST=($TEST_STR)
# 恢复分隔符环境变量
IFS=$OLD_IFS

# 数组大小
echo "arry size: ${#STR_LIST[@]}"
# 数组内容
echo "arry content: ${STR_LIST[@]}"

$./test.sh
arry size: 4
arry content: abc def ghi jkl

2.判断数组中是否包含某字符串

#!/bin/bash
# test.sh
# 给定字符串,以 ; 进行分割
item_arry=($1)

# 扩展给定数组的所有索引值
for i in ${!item_arry[@]};
do
    if [ "${item_arry[$i]}" == "abc" ]; then
        echo "abc is in arry"
    fi
done

$./test.sh "abc def ghi jkl"
abc is in arry

3.判断数组内是否有重复元素

由于没有找到对应的操作,借助awk实现判断数组内是否有重复元素:

#!/bin/bash
# test.sh

# 将输入参数转为数组
item_arry=($1)

# 遍历数组元素
for i in ${item_arry[@]}; do
    echo $i
done | awk ‘{a[$1]++}END{for(i in a) {print a[i] ,i}}‘ | awk ‘$1>1{print $2" imte is duplicate";exit 1}‘

# 判断awk的返回值,为1则有重复元素
if [ $? -ne 0 ]; then
    echo "item is duplicate"
else
    echo "item is unique"
fi

$./test.sh "abc def ghi jkl"
item is unique

$./test.sh "abcd def ghi jkl abcd"
abcd imte is duplicate
item is duplicate