数组:
一堆变量的集合。
声明:
declare -a ARRAYNNAME
其中每个变量为ARRAYNAME[INDEX]
INDEX从0开始。
赋值:
ARRAYNAME[INDEX] = VALUE
ARRAYNAME = (VALUE1 VALUE2 ...)
ARRAYNAME = ( [INDEX1]=VALUE1 [INDEX2]=VALUE2 ...)
特殊引用方法:
${#ARRAYNAME} 显示第一个元素的字符长度。
${#ARRAYNAME[INDEX]} 显示INDEX个元素的字符长度
${#ARRAYNAME[*]} 显示数组中值不为空的元素的个数
${#ARRAYNAME[@]} 显示数组中值不为空的元素的个数
信号捕捉:
常见的信号:
1.SIGHUP
2.SIGINT
9.SIGKILL
15.SIGTERM
18.SIGCONT
19.SIGSTOP
其中,SIGKIL和SIGTERM一般不允许捕捉。
#trap ‘ACTION’ SIGTYPE
实例:
1.创建数组,并显示数组中的元素
#vim 1.sh
#!/bin/bash
AA=([0=jerry [1]=tom [5]=mike])
echo ${AA[0]}
echo ${AA[4]}
#bash 1.sh
jerry
2.随机显示其中的变量:
#vim 1.sh
#!/bin/bash
INDEX=$[$RANDOM%7]
AA=([0=jerry [1]=tom [5]=mike])
echo ${AA[$INDEX]}
3.随机显示30次
#vim 1.sh
#!/bin/bash
AA=([0=jerry [1]=tom [5]=mike])
for I in {1..20} ; do
INDEX=$[$RANDOM%7]
echo ${AA[$INDEX]}
done
4.显示数组中值不为空元素的个数,及某个元素字符的长度
#vim 1.sh
#!/bin/bash
AA=([0=jerry [1]=tom [5]=mike])
echo${#AA}
echo ${AA[3]}
echo ${AA[@]}
#bash 1.sh
5
0
3
5.从数组中选择5个不同元素
6.生成一组随机数,并找出其中的最大数
#vim findmax.sh
#!/bin/bash
for I in {0 .. 9} ;do
ARR[$I]=$RANDOM
echo -n "${ARR[$I]}"
done
echo
declear -i MAX=${ARR[0]}
INDEX=$[${#ARR[*]}-1]
for I in `seq 1 $INDEX` ;do
if [ $MAX -it ${AAR[$I] ] then
MAX=${AAR[$I]
fi
done
echo $MAX
#bash findmax.sh
92
7.生成一个数组,个数用用户输入。数组中的元素不能相同。生成后显示数组中元素的值
#vim 2.sh
#!/bin/bash
function COMP {
for K in `seq 0 $[${#ARR[*]}-1]` ;do
if [ $1 -eq $ARR[$K] ] then
return 1
fi
done
return 0
}
read -p "Enter the sum of array" SUM
declare -a ARR
for I in `seq 0 $[$SUM-1]`;do
while ture;do
ELE=$RANDOM
COMP $ELE
if [ $? -eq 0 ];then
break
fi
done
$ARR[$I]=$ELE
echo ${ARR[$I]}
done
8.实现信号捕捉,按下ctrl+c不取消。
#vim findmax.sh
#!/bin/bash
trap ‘echo “no quit!” ’ INT
for I in {0 .. 9} ;do
ARR[$I]=$RANDOM
echo -n "${ARR[$I]}"
done
echo
declear -i MAX=${ARR[0]}
INDEX=$[${#ARR[*]}-1]
for I in `seq 1 $INDEX` ;do
if [ $MAX -it ${AAR[$I] ] then
MAX=${AAR[$I]
fi
done
echo $MAX
#bash findmax.sh
ctrl+c
no quit!
9.实现信号捕捉
#vim test.sh
#!/bin/bash
trap ‘rm -rf /tmp/test;echo "clean ok";exit 5‘ INT
mkdir -p /tmp/test
while ture;do
touch /tmp/test/file-`date =%F-%H-%M-%S`
sleep 2
done
10.使用函数改写上述脚本
#vim test.sh
#!/bin/bash
function CLEAN()){
rm -rf /tmp/test
echo "clean ok"
}
trap ‘$CLEAN;exit 5‘ INT
mkdir -p /tmp/test
while ture;do
touch /tmp/test/file-`date =%F-%H-%M-%S`
sleep 2
done