标签:基础知识
shell脚本总结索引数组的几个常见用法
array[0] array数组的第一个值
array[*] array数组的所有值
#array[*] array数组里数值的个数
unset array[0] 删除array数组里的第一个值
unset array 删除掉array整个数组
数组切片:
${array[@]:num1:num2}
num1:要跳过的元素个数
num2:要取出的元素个数
取偏移量之后的所有元素
${arrray[@]:num1}
数组脚本练习:
1.编写脚本,定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件;统计出其下标为偶数的文件中的行数之和
#!/bin/bash
array=(/var/log/.log)
echo ${array[]}
sum=0
for i in $(seq 0 $[${#array[]}-1]);do
if [ $[$i%2] -eq 0 ];then
num=$(cat ${array[$i]}| wc -l )
sum=$[$sum+$num]
fi
done
echo $sum
2.输入若干个数值存入数组中,采用冒泡法进行升序或降序排序
[root@localhost 0323]# cat MaoPao
#!/bin/bash
i=0
flag=0
wrong=0
#--------------------------------------------保存数组值---------------------------------------------
while true;do
read -p "请输入数字(输入quit退出):" num
if [[ "$num" == ^"" ]];then
echo "请输入数字 你已经输错了$wrong 次"
let wrong++
fi
if [ $wrong -eq 5 ];then
echo "你居然能输错 $wrong 次 我受不了你了"
break
elif [[ $num == quit ]];then
break
elif [[ $num =~ ^[-]{0,1}[[:digit:]]{0,}[.]{0,1}[[:digit:]]{0,}[[:digit:]]$ ]];then #筛选出 整数 小数 负数
echo $num
array[$i]=$num
let i++
else
echo "请输入数字 你已经输错了$wrong 次"
let wrong++
fi
done
#---------------------------------------------比较两个数大小------------------------------------------
compare () {
echo $1 > /app/0324/tmp
echo $2 >> /app/0324/tmp
max=$(cat /app/0324/tmp|sort -nr|head -1)
if [[ "$max" == "$1" ]];then
flag=1
else
flag=0
fi
}
#-------------------------------------------冒泡排序---------------------------------------------------
length=${#array[*]}
for i in $(seq 0 $length);do
for j in $(seq 0 $[$length-$i]);do
t=$[$j+1]
compare ${array[$j]} ${array[$t]}
if [ $flag -eq 1 ];then
temp=${array[$j]}
array[$j]=${array[$t]}
array[$t]=$temp
fi
done
done
echo "从小到大排序为:${array[*]}"
最终结果图
3.实现矩阵转置
#!/bin/bash
#------------------------------------------输入矩阵---------------------------------------------------
read -p "请输入矩阵的行列数" raw
t=0
for i in $(seq 0 $[$raw-1]);do
for j in $(seq 0 $[$raw-1]);do
read -p "输入矩阵的值" value
array[$t]=$value
let t++
done
done
#------------------------------------------计算矩阵的中间位置 -------------------------------------------------------------
juzhen3 (){
t=0
if [ $[$raw%2] -eq 0 ];then
flag=$[$raw/2]
else
flag=$[$[$raw+1]/2]
fi
#------------------------------------------输出原矩阵--------------------------------------------------
for i in $(seq 0 $[$raw-1]);do
u=$i
for j in $(seq 0 $[$raw-1]);do
echo -e "${array[$t]} \c"
let t++
done
#------------------------------------------输出中间的传递符号---------------------------------------
if [ $[$i+1] -eq $flag ];then
echo -e " \c"
for m in $(seq 1 $raw);do
echo -e "=\c"
done
echo -e "> \c"
else
echo -e " \c"
for m in $(seq 1 $[$raw]);do
echo -e " \c"
done
echo -e " \c"
fi
#------------------------------------------输出转置矩阵------------------------------------------------
for j in $(seq 0 $[$raw-1]);do
echo -e "${array[$u]} \c"
let u=$[$u+$raw]
done
echo
done
unset t i
}
juzhen3
最终结果图:
几个常见用法
eval第一个功能就是可以对命令进行所有的置换,然后再执行该命令。
第二个功能就是进行标量的多重赋值
标签:基础知识
原文地址:http://blog.51cto.com/13572413/2090719