|

楼主 |
发表于 2003-12-26 16:05:53
|
显示全部楼层
这个贴子只能产生随机数,我用的方法是先创建一个初始数组,比如10,那么数组A就有10个元素,再建一个空的数组,然后用RANDOM产生随机数跟数组A来比较,出现过的元素被送至数组B,数组A用grep -v的形式再重新赋值创建,当循环的次数大于$1的时候退出,最后再用export导出,也就是说真正的可以在命令行中用echo ${array}回显出来~,目前难点是如果参数>=10的时候还得作些处理~,10以内的我作出来了,这是我做的,请指教  - [/home/javalee/myshell]cat rand
- #!/bin/ksh
- #
- set -A newarray
- n=1
- set -A array $(while ((n<=$1));do
- echo -n "$n "
- ((n+=1))
- done)
- echo "old array: ${array[*]}"
- i=0
- while
- do
- rand=$(echo $RANDOM|cut -b1) #???目前在努力...
- if echo ${array[*]}|tr ' ' '\n'|grep -q $rand ;then
- newarray[$i]=$rand
- set -A array $(echo -n ${array[*]}|tr ' ' '\n'|grep -v $rand|tr '\n' ' ')
- ((i+=1))
- else continue
- fi
- export var=${newarray[*]}
- if [[ ${#newarray[*]} -eq $1 ]];then
- break
- fi
- done
- set -A _array $(echo $var)
- echo "new array:${_array[*]}"
- unset array rand i n newarray
复制代码 测试:[/home/javalee/myshell]typeset|grep _array #没有这个数组
[/home/javalee/myshell]. rand 9 # 必须用dot命令!才可以导出数组
old array: 1 2 3 4 5 6 7 8 9
new array:3 1 2 4 9 6 7 8 5
[/home/javalee/myshell]typeset |grep _array
typeset _array #数组_array已经导出
[/home/javalee/myshell]echo ${_array} #显示数组所有元素
3 1 2 4 9 6 7 8 5
[/home/javalee/myshell]. rand 8
old array: 1 2 3 4 5 6 7 8
new array:3 1 2 5 7 4 8 6 |
|