虽然方法有点土,不过还好结果是正确的,希望以后能写出一些出色的Shell。
记录下来,这个N个指令不懂而且走了N多弯路的成为历史的我
--------------------------------------------------------------------------------------------
#!/bin/bash
#脚本开始
function randomnum {
#脚本开始
#初始化空数组array.
set -A array
#初始化数组下标.
i=0
#开始主循环.
while true;do
#产生随机数.
rand=$(perl -e "print int rand($(($1+1)))")
[[ $rand -eq 0 ]] && continue
#向数组array中添加不重复的元素.
if ! echo ${array[*]}|tr ' ' '/n'|grep -q "/<$rand/>";then
array[$i]=$rand.
((i+=1))
else
continue
fi
#当数组array元素个数满足条件,跳出循环.
((${#array[*]}==$1)) && break
done
#导出数组.
export var=${array[*]}
set -A array $(echo $var)
random=`echo ${array[*]}|sed -e 's/ //g'|sed 's/.$//'`
#eval "$random"
#echo $random
#脚本结束,取消脚本中无用变量
unset i rand var
unset array
}
#randomnum 20
#第二部分 处理问题文件
rm -f seeven_retest
touch seeven_retest
cat seeven_test|{
while read eachline; do
#判断指定部分是否数字和"."的组和,逻辑:把“.”都去掉就是数组
eachlinepart=`echo $eachline|grep -E " /(|NAME " | cut -f3 --delimiter=' '`
echo $eachlinepart
eachlinenum=`echo $eachlinepart|sed -e 's//.//g'|sed -n 's/^[0-9]/{1,/}$/number/p'`
#echo $eachlinenum
#echo $eachlinepart|sed -e 's//.//g'|sed -n 's/^[0-9]/{1,/}$/number/p'
#isFoundnum=`echo $?`
#if test $isFoundnum -eq 0; then
#if [$eachlinenum == "number" ]; then
#if [[$eachlinenum = "number"]]; then
if [[ $eachlinenum = "number" ]]; then
#printf ""
echo "num is"
echo $eachlinenum
else
randomnum 20
echo echo $random;
#sed "s/{$eachlinepart}/{$random}/g"> seeven_retest
#cat seeven_test|sed "s/^${eachlinepart}/^${random}/gi" >seeven_retest
echo $eachline|sed "s/${eachlinepart}/${random}/gi">>seeven_retest
#cat $3|sed "s/^#${x}/${x}/gi" >$3_1 这个真的是走了大弯路了,遍历文件输出后,发现完全又被覆盖了>_<,很久没有跳出错误思维
echo "clear"
fi
# if grep -E " /(|NAME " eachline| cut -f3 --delimiter=' '|sed -e 's//.//g'|sed -n 's/^[0-9]/{1,/}$/number/p' >/dev/null 2>&1; then
# printf ""
# else
# randomlist 20
# #grep -E " /(|NAME " $eachline| cut -f3 --delimiter=' '|sed -e 's/^*/'
#
# sed 's/$eachlinepart/$random/g' seeven_test > seeven_retest
# fi
done
}