Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 计算字符串在随机生成器中出现的次数_Bash - Fatal编程技术网

Bash 计算字符串在随机生成器中出现的次数

Bash 计算字符串在随机生成器中出现的次数,bash,Bash,我有一个带字符串数组的while循环和一个简单的随机化 然而,我的问题是计算循环运行时相同字符串出现的次数 例: oc/open字符串已出现3次 rw/read字符串已出现2次 oc/close字符串已出现3次 等等 目前我在循环中使用if-else方法,但是一定有更好的方法来计算它们吗?有什么建议吗 function injection { COUNTER=0 countopen=0 while [ $COUNTER -lt 10 ]; do module[0]="oc/open" mod

我有一个带字符串数组的while循环和一个简单的随机化

然而,我的问题是计算循环运行时相同字符串出现的次数

例: oc/open字符串已出现3次 rw/read字符串已出现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

如果可以使用外部命令,请使用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

你好厉害!我没有想到我可以使用外部命令。这使脚本变得更好,我可以在脚本+100的更多地方使用关于命令的建议