Atualmente, estou lutando para obter 2 códigos funcionando em meu script bash. Ambos trabalham separadamente, mas uma vez que ambos estão no código, eles não funcionam.
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. Asks 0
é 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 contém for 0
, então vtype
é definido como no
, se for outro, então vtype
é definido como yes
. Esses comandos funcionam perfeitamente, se eu os fizer em diferentes arquivos de código. Mas preciso dos dois juntos. Alguma sugestão?
Há quatro questões principais neste script:
A
#!
linha no topo está faltando. Tanto quanto eu posso ver, isso pode ser#!/bin/sh
.As expansões variáveis não estão entre aspas. Use aspas duplas para evitar divisão de palavras e aglomeração de nomes de arquivos. Por exemplo,
if [ "$var" = 0 ]
. Aqui você também pode optar por usar-eq
no lugar de=
, já que está fazendo um teste de aritmética.As atribuições não devem ter espaços ao redor
=
.O primeiro argumento de
printf
deve ser uma string de formato, por exemploprintf '%s %s\n' "$dtype" "$vtype"
.Essas coisas podem ser encontradas usando o site ShellCheck .
Há também uma pequena ineficiência:
poderia ser escrito, quase equivalentemente,
Não sei por que você colocou espaços nos valores de algumas das variáveis, por exemplo
dtype=' HDD '
.