![修复 bash 脚本](https://linux22.com/image/130276/%E4%BF%AE%E5%A4%8D%20bash%20%E8%84%9A%E6%9C%AC.png)
目前,我正在努力让 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
该脚本有四个主要问题:
#!
顶部的 - 行丢失。据我所知,这是可以的#!/bin/sh
。变量扩展不加引号。使用双引号以避免分词和文件名通配。例如,
if [ "$var" = 0 ]
。在这里,您也可以选择使用 来-eq
代替,=
因为您正在进行算术测试。作业周围不能有空格
=
。的第一个参数
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 '
。