我有一个带字符串数组的while循环和一个简单的随机化。
然而,我的问题是计算循环运行时相同字符串出现的次数。
例如:
oc / open string出现了3次
rw /读取字符串已出现2次
oc / close字符串已出现3次
等...
目前我在循环中使用if else方法,但是必须有更好的方法来计算它们吗?有什么提示吗?
function injection {
COUNTER=0
countopen=0
while [ $COUNTER -lt 10 ]; do
module[0]="oc/open"
module[1]="oc/close"
module[2]="rw/read"
module[3]="rw/write"
randModule=$[$RANDOM % ${#module[@]}]
export MODULE=${module[$randModule]}
echo $MODULE
if [ $randModule == 0 ]; then
let countopen++
#let countclose++
#etc
#etc
fi
let COUNTER++
done
echo "Open $countopen"
}
injection
答案 0 :(得分:1)
如果您可以使用外部命令,请使用sort
和uniq
来计算出现次数:
#!/bin/bash
module=( oc/open oc/close rw/read rw/write )
for i in {1..100} ; do
echo ${module[RANDOM % ${#module[@]}]}
done | sort | uniq -c
您也可以在关联数组中自己计算:
#!/bin/bash
module=( oc/open oc/close rw/read rw/write )
declare -A count
for i in {1..100} ; do
mod=${module[RANDOM % ${#module[@]}]}
(( ++count[$mod] ))
done
for m in "${module[@]}" ; do
printf '%s %d\n' "$m" "${count[$m]}"
done