Corrigindo o script bash

3

Atualmente, estou com dificuldades para conseguir dois códigos trabalhando no meu script bash. Ambos trabalham separadamente, mas uma vez que ambos estão no código, eles não trabalham.

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

A primeira variável var deve conter o valor do arquivo rotacional. Solicita que 0 seja para SSD e 1 para HDD.

A segunda variável var1 verifica se a virtualização está presente em sua máquina. Se o número que ele reter for 0 , então vtype será definido como no , se for outra coisa, então vtype será definido como yes . Esses comandos funcionam perfeitamente, se eu fizer em arquivos de código diferentes. Mas eu preciso dos dois juntos. Alguma sugestão?

    
por TheSebM8 26.03.2018 / 09:44

1 resposta

12

Existem quatro questões principais neste script:

  1. A #! -line na parte superior está ausente. Tanto quanto eu posso ver, isso pode ser #!/bin/sh .

  2. Expansões variáveis não são citadas. Use aspas duplas para evitar a divisão de palavras e a globalização de nomes de arquivos. Por exemplo, if [ "$var" = 0 ] . Aqui você também pode escolher usar -eq no lugar de = , já que você está fazendo um teste aritmético.

  3. As atribuições não devem ter espaços em torno de = .

  4. O primeiro argumento de printf deve ser uma string de formato, por exemplo, printf '%s %s\n' "$dtype" "$vtype" .

Essas coisas podem ser encontradas usando o site do ShellCheck .

Há também uma pequena ineficiência:

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

poderia ser escrito, quase de forma equivalente,

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

Não sei por que você colocou espaços nos valores de algumas das variáveis, por exemplo, dtype=' HDD ' .

    
por 26.03.2018 / 10:30

Tags