unix 在Bash脚本中比较IF语句中的变量

bkkx9g8r  于 2022-11-23  发布在  Unix
关注(0)|答案(1)|浏览(185)

我正在使用bash脚本,我希望将变量作为参数传递给脚本(值0-15),按数字排序。我的想法是在任何小于10的值前添加一个0。这是因为该变量将用于命名文件和服务。因此,它将按字母顺序排序(即,克隆固定在pci-XX-bay-00,克隆固定在pci-XX-bay-01,.. .克隆固定在pci-XX-bay-10)。当前,它被分类为-10,-11.. . -15,-0,-01 . . . -09。
if语句不起作用。我该如何解决这个问题,或者有没有更好的方法来解决这个问题?
脚本如下:

#!/bin/bash
echo [phy_sim_add.sh]: $1 $2 >> /CLONOS/log.txt

port_path=$(echo $1 | grep -P "pci.*port-\d*:\d*" -o)
port=$(echo $port_path | grep -P "port-\d*:\d*" -o)
phy_dir=$(ls "/sys/devices/"$port_path)
phy_num_full=$(echo $phy_dir | grep -P "phy-\d*:\d*" -o)
phy_num=$(echo $phy_num_full | grep -P "\d*\Z" -o)

echo [phy_sim_add.sh]: phy_num = $phy_num port_num = $port>> /CLONOS/log.txt 

echo $phy_num >> /CLONOS/tmp.txt

if (($phy_num < 9)); then
    #$phy_num = "0"$phy_num
    echo YAY >> /CLONOS/tmp.txt
fi

echo $phy_num >> /CLONOS/tmp.txt

mkdir -p /tmp/clonos_ports/$port/$phy_num

ln /dev/$2 /dev/pci-XX-bay-$phy_num

/bin/systemctl start clonos-fix@pci-XX-bay-$phy_num

我试过if语句,比如:

if [[]]; then
~~~~~~
fi

if (()); then
~~~~~~~~
fi

if [[]]
then
~~~~~~~~~
fi

一切都不起作用。

h7wcgrx3

h7wcgrx31#

正如erik 258所注解的,sort -n将为文件给予正确的排序顺序,但前提是数字值后面没有任何内容。然而,ls default将提供您所观察到的结果。正如您所选择的,在较小的整数前添加0前缀可确保ls报告的默认顺序与您想要的数字顺序相匹配。
因此,如果$2是指定的数字ID(0-15),则phy_num可以按以下方式正确格式化:

phy_num=$(echo "$2" | awk '{ printf("%02d\n", $1 ) ; }' )

这样就不需要使用if语句,因为它会给您带来问题。

相关问题