Por exemplo, se eu tiver uma variável de dispositivo existente /dev/sda
, quero verificar se não é o nome de uma partição, mas de todo o disco.
Eu tentei isso:
[[ $(df --output=source "$var" 2> /dev/null | tail -n 1) = 'udev' ]]
mas isso retorna true se o var='/dev/sda'
dispositivo estiver conectado ou se a var='/dev/sda1'
partição não estiver montada.
Portanto, mesmo se você combinar a condição anterior com o seguinte:
if grep -sq "^$var " /proc/mounts; then ...
não seria suficiente dizer que é um nome de disco e não uma partição de disco.
Como posso verificar se a string
é um nome de dispositivo existente e não um nome de partição?
Você pode usar
lsblk
para isso - especificamentelsblk -o type
deve retornarpart
(para uma partição) oudisk
(para um dispositivo de bloco inteiro).Assim por exemplo dado:
então
ou
Usar
lsblk
:Se
"$var"
não for um dispositivo válido, por exemplovar="/dev/sda1"
,lsblk
terá um código de saída diferente de zero.Para obter a saída de todos os dispositivos:
Usar
mountpoint
.De
man mountpoint
: