shell脚本基础语法(if 和 数组)

条件判断命令:test 或者 [ ]

例:test 1 –lt 4 #判断1<4
test语句的等价形式[ 1 –lt 4 ] 

文件测试符号

-f 存在且是普通文件 
-d 存在且是目录 
-s 存在且字节数大于0 
-r 存在且可读 
-w 存在且可写 
-x 存在且可执行 
如:test -d “mydoc” :判断mydoc是否是目录

例子:
1.判断文件夹是否存在

#如果文件夹不存在,创建文件
if [ ! -d "/file" ]; then
    mkdir /file
fi

2.判断文件夹是否存在且具有可执行权限

#判断文件夹是否存在且具有可执行权限
if [ -d "/file" ]; then
    if [ -x "/file" ]; then
        echo "chmod x exist"
    else
        echo "chmod x no exist"
    fi
 fi

3.判断两个变量是否相等

#判断两个变量是否相等
if [ "$var1" = "$var2" ]; then
    echo '$var1 eq $var2'
else
    echo '$var1 not eq $var2'
fi

4.判断一个变量是否有值

# -n 判断一个变量是否有值
if [ ! -n "$var" ]; then
    echo "$var is empty"
    exit 0
fi

数组定义:

可以在单行中使用一列值来定义一个数组: 
array_var = (1 2 3 4 5 6) 
#这些值将会存储在以0为起始索引的连续位置上 
另外,还可以将数组定义成一组“索引-值”: 
array_var[0]="test1" 
array_var[1]="test2" 
array_var[2]="test3" 
array_var[3]="test4" 
array_var[4]="test5"

1.打印出特定索引的数组元素内容:

echo ${array_var[0]} 
test1

index=4 
echo ${array_var[$index]} 
test5

2.以清单形式打印出数组中的所有值:

echo ${array_var[*]}
test1 test2 test3 test4 test5

也可以这样使用 
echo ${array_var[@]}
test1 test2 test3 test4 test5

3.打印数组长度:

echo ${#array_var[*]} 
5

shell中的关联数组:

1.shell 提供了另外一种数组,其可以使用任意的字符串作 为下标(不必是整数)来访问数组元素。这种数组叫做关联数组(associative array)。 
2.关联数组的下标和值称为键值对,它们是一一对应的关系 。在关联数组中,键是唯一的,值可以不唯一。 
3.shell 的关联数组和 shell 的下标数组在定义和使用上完 全一样,只是在索引上有区别。
4.需要注意的是,在使用关联数组之前,需要使用命令 declare -A array 进行显示声明

实例:

1、name=(jim tom lucy)
2、
declare -A phone 
phone=([jim]=135 [tom]=136 [lucy]=158)
3、
for i in `eval echo {0..$((${#name[*]}-1))}` 
do 
    echo ${name[i]} phone number is
${phone["${name[i]}"]}
done

关联数组常用语法

${!array[*]} 取关联数组所有键 
${!array[@]} 取关联数组所有键 
${array[*]}  取关联数组所有值 
${array[@]}  取关联数组所有值 
${#array[*]} 关联数组的长度 
${#array[@]} 关联数组的长度

猜你喜欢

转载自blog.csdn.net/wxc_qlu/article/details/82432853