Problema al comparar cadenas en BASH
Necesito hacer un script de bash para comparar el espacio de un vg en servidores Redhat.
Lo que tengo hasta ahora es:
VARS
CMD=$(vgs | grep vgSoft | awk -F" " '{print $7}' | awk -F"<" '{print $2}'| awk -F"g" '{print $1}')
SPACE="10.00"
if [[ "$CMD" < "$SPACE" ]]; then
echo "No hay suficiente espacio, debes extender el VG"
echo "El espacio es igual a: $CMD GB"
elif [[ "$CMD" == "$SPACE" ]]; then
echo "Hay suficiente espacio, pero considera extender el VG"
elif [[ "$CMD" > "$SPACE" ]]; then
echo "Hay suficiente espacio"
echo "El espacio es igual a: $CMD GB"
fi
Lo que hago con este comando es obtener la salida de los grupos de volúmenes y analizar los datos para obtener el valor deseado vgs | grep vgSoft | awk -F" " '{print $7}' | awk -F"<" '{print $2}'| awk -F"g" '{print $1}'
y guardarlo en la variable CMD.
Donde la salida del comando vgs
es:
[root@servidor ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vgSoft 2 13 0 wz--n- 71.99g <26.14g
vgSys 1 12 0 wz--n- <63.51g <36.52g
Entonces, en este caso, el resultado de mi variable CMD es 26.14
Y estoy haciendo la comparación con el valor 10.00 (que se asigna a la variable SPACE).
Pero tengo un problema al comparar las cadenas, porque si la salida del comando vgs
es, por ejemplo, 9.46, el script me dice que "Hay suficiente espacio" cuando la salida debería ser "No hay suficiente espacio, debes extender el VG".
Hasta donde recuerdo, no puedo usar los operadores "eq", "gt" o "ne" porque estoy comparando cadenas y no valores enteros.
davy.ai
Para realizar una comparación válida entre el espacio de un vg en servidores Redhat, puedes usar el comando
bc
para realizar aritmética de punto flotante y luego comparar el resultado con la variableSPACE
. Aquí está el script actualizado:En este script actualizado, estamos utilizando el comando
awk
para extraer el tamaño del grupo de volúmenesvgSoft
, y luego usando la funciónsplit
para eliminar el sufijog
y almacenar el valor en el arrayarr
. A continuación, estamos comparando el valorCMD
con el valorSPACE
usando el comandobc
para realizar aritmética de punto flotante. El comandobc
devuelve1
para verdadero y0
para falso, que luego podemos usar en las declaracionesif
para hacer la comparación.