標籤:linux 數組 shell
數組:
一堆變數的集合。
聲明:
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
本文出自 “小私的blog” 部落格,請務必保留此出處http://ggvylf.blog.51cto.com/784661/1668727
shell指令碼之數組