修复 bash 脚本

修复 bash 脚本

目前,我正在努力让 2 个代码在我的 bash 脚本中工作。它们都是分开工作的,但是一旦它们都在代码中,它们就不再工作了。

var=$(cat /sys/block/vda/queue/rotational 2>/dev/null || cat /sys/block/sda/queue/rotational 2>/dev/null)
dtype='nil'
if [ $var = 0 ]; then
dtype=' SSD '
elif [ $var = 1 ]; then
        dtype=' HDD '
fi


var1=$(lsmod | grep kvm | awk 'NR==1{print $3}'  2>/dev/null)
vtype = 'no'
if [ $var1 = 0 ]; then
        vtype=' no '
else
    vtype = 'yes'
fi

printf '$dtype' '$vtype'
echo $dtype $vtype

第一个变量var应该保存旋转文件的值。询问的0是SSD,1是HDD。

第二个变量var1检查​​您的计算机中是否存在虚拟化。如果它保存的数字是0,则vtype设置为no,如果是其他数字,则vtype设置为yes。如果我在不同的代码文件上执行这些命令,这些命令可以完美运行。但我需要他们两个在一起。有什么建议么?

答案1

该脚本有四个主要问题:

  1. #!顶部的 - 行丢失。据我所知,这是可以的#!/bin/sh

  2. 变量扩展不加引号。使用双引号以避免分词和文件名通配。例如,if [ "$var" = 0 ]。在这里,您也可以选择使用 来-eq代替,=因为您正在进行算术测试。

  3. 作业周围不能有空格=

  4. 的第一个参数printf应该是格式字符串,例如printf '%s %s\n' "$dtype" "$vtype"

这些东西可以使用找到ShellCheck 网站

还有一个小的效率低下的地方:

lsmod | grep kvm | awk 'NR==1{print $3}'  2>/dev/null

几乎可以等价地写成

lsmod | awk '/kvm/ { print $3; exit }'

我不确定为什么你在某些变量的值中放置空格,例如dtype=' HDD '

相关内容