dd命令测试

ITERATION="2"
dd_write() {
    echo
    echo "--- dd write speed test ---"
    rm -f dd-write-output.txt
    for i in $(seq "${ITERATION}"); do
        echo "Running iteration ${i}..."
        rm -f dd.img
        echo 3 > /proc/sys/vm/drop_caches
        dd if=/dev/zero of=dd.img bs=1048576 count=1024 conv=fsync 2>&1 \
            | tee  -a "${pwd}"/dd-write-output.txt”
    done
}

dd_read() {
    echo
    echo "--- dd read speed test ---"
    rm -f dd-read-output.txt
    for i in $(seq "${ITERATION}"); do
        echo "Running iteration ${i}..."
        echo 3 > /proc/sys/vm/drop_caches
        dd if=dd.img of=/dev/null bs=1048576 count=1024 2>&1 \
            | tee -a "${pwd}"/dd-read-output.txt
    done
    rm -f dd.img
}

单独使用一个echo 便是换行,如果不想换行可以使用echo -n

dd命令中if表示:输入文件名

                of表示:输出文件名

                bs表示:bytes,读写的byte数

               count:读/写多少次bs

              conv=fsync: 将输入用ibs填充,不足的用NULL  补齐

tee -a表示将结果重定向到"${pwd}"/dd-write-output.txt“ 中



 将这段code 保存成dd.sh,运行效果如下图所示:

通过source 命令将dd.sh中定义的两个函数导入到当前的shell环境中,

dd命令测试_第1张图片


这样结果看起来还是有点乱,可以再写一个函数来整理结果

parse_output() {
    test_case_id="$1"
    itr=1
    while read -r line; do
        if echo "${line}" | egrep -q "(M|G)B/s"; then
            measurement="$(echo "${line}" | awk '{print $(NF-1)}')"
            units="$(echo "${line}" | awk '{print substr($NF,1,2)}')"
            result=$(convert_to_mb "${measurement}" "${units}")

            echo "${test_case_id}-itr${itr}" "pass" "${result}" "MB/s"
            itr=$(( itr + 1 ))
        fi
    done < "${pwd}/${test_case_id}-output.txt"
}

执行的dd-write 命令后生成的dd-write-output.txt文件的内容如下:

dd命令测试_第2张图片

调用parse_out dd-write 后parse结果如下:



你可能感兴趣的:(shell)