linux - bash 中的变量比较

标签 linux bash variables

我正在尝试使用 bash 脚本确定磁盘是 SSD 还是 HDD。

logical_name="/dev/sda"
type="" 
disk=$(basename $logical_name)
x=`cat $filename | grep "${disk}" | awk '{print $2}'`
if [ ! -z "$x" ]
then
        if [ "$x" = "0" ]
        then
                type="SSD"
        fi  
        if [ "$x" = "1" ]
        then
                type="HDD"
        fi  
fi

echo $type

x 的值是正确的,0 或 1。但经过比较后,它没有为变量 type 分配任何值。它打印为空。谁能指出我在这里做错了什么?

更多信息:

$filename 是一个包含 sudo lsblk -d -o name,rota

输出的文件
NAME ROTA
sda     1
sdd     1
sdc     0

最佳答案

虽然我没有发现发布的代码有任何问题,但以下是一个更简化且可维护的版本,可以执行相同的操作。

DISK_NAMES=(SSD HDD)  # names are resolved by index

filename="in1.txt"
logical_name="/dev/sda"
disk="$(basename $logical_name)"
x="$(sed -n 's/'$disk' *\([0-9]*\)/\1/p' $filename)"
# check if $x is empty here, if required
echo "$x -> ${DISK_NAMES[$x]}"

关于linux - bash 中的变量比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55739150/

相关文章:

javascript - html/javascript : using a variable as url for <a href>

xcode - 对变量和包含该变量的类的访问控制声明的混淆

linux - 有没有办法在 Unix 中删除文件中的重复 header ?

c++ - OpenGL 窗口显示背景窗口中的内容而不是空白窗口

linux - 来自 Linux 的 WinRM 脚本

bash - 使用 sed 将字符串拆分为固定大小的片段

linux - 在 linux bash 中删除文件的简单脚本

linux - 查找深度为 1 的不包含文件的子目录

arrays - 为什么 bash 数组的一部分作为命令执行?

Python:使用正则表达式在GUI中搜索功能需要全局变量,但出现UnboundLocal错误