Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

245
Visualizações
Problema al comparar cadenas en BASH

Necesito hacer un script bash para comparar el espacio de un vg en servidores redhat. Lo que tengo hasta ahora es:

 #!/bin/bash ##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 "It's not enough space, you must extend the VG" echo "Space is equal to: $CMD GB" elif [[ "$CMD" == "$SPACE" ]]; then echo "It's enough space but consider extend the VG" elif [[ "$CMD" > "$SPACE" ]]; then echo "It's enough space" echo "Space is equal to: $CMD GB" fi

Lo que hago con este comando es obtener la salida de los grupos de volumen 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 guárdelo en la variable CMD. Donde la salida del comando vgs es:

 [root@server~]# 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 está asignado a la variable ESPACIO).

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, debe extender el VG" . Por lo que recuerdo, no puedo usar los operadores "eq" "gt" "ne" porque estoy comparando con cadenas y no con valores enteros.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Con sus muestras mostradas, intente seguir el código awk . Podemos hacer todo esto en un solo awk .

Tenemos un space con nombre de variable awk donde he definido el valor como 10 según los intentos mostrados de OP, uno podría cambiarlo según sea necesario.

 vgs | awk -v space="10" ' FNR==1 || !/vgSoft/{ next } { value=substr($7,2,length($7)-1)+0 } value<space { print "It\047s not enough space, you must extend the VG" next } value==space{ print "It\047s enough space but consider extend the VG" next } value>space { print "It\047s enough space" } '

O en caso de que tenga el séptimo campo en las líneas que podrían O no podrían tener un < inicial en su valor, por lo que para lidiar con este tipo de situaciones, intente seguir el código awk .

 vgs | awk -v space="10" ' FNR==1 || !/vgSoft/{ next } { sub(/^</,"",$7) value=$7+0 } value<space { print "It\047s not enough space, you must extend the VG" next } value==space{ print "It\047s enough space but consider extend the VG" next } value>space { print "It\047s enough space" } '

Explicación: Ejecutar primero el comando vgs y enviar su salida estándar como entrada estándar al programa awk . En el programa awk , se crea space variable con un valor de 10 según los intentos mostrados. Luego, en el programa principal, verifique la(s) condición(es) si su primera línea O la línea no contiene la cadena vgSoft y luego simplemente salte a la siguiente línea. Si una línea contiene una cadena vgSoft , entonces se crea una variable con el nombre de value que tendrá el valor del 7.° campo de la línea actual (sin < y g del 7.° campo), luego se usan 3 condiciones para verificar (si el valor es igual a O menor que O mayor que espacio o no) en consecuencia imprimiendo declaraciones entonces.

Advertencia justa: no tengo el comando vgs conmigo, así que probé este código colocando su salida de muestra del comando vgs en un Input_file y ejecutándolo contra el programa awk y funcionó bien para mí.

over 4 years ago · Santiago Trujillo Relatório

0

Puede usar el comando echo en combinación con bc para comparar, como se muestra a continuación.

 $ SPACE=10.00 $ CMD=9.46 $ echo "${CMD}>${SPACE}" | bc 0 $ CMD=10.46 $ echo "${CMD}>${SPACE}" | bc 1
over 4 years ago · Santiago Trujillo Relatório

0

awk en solo un momento:

 vgs | awk -v space=10.00 '/vgSoft/ { free = substr($7, 2, length($7) - 2)+0 # Assumes the < and g will always be there if (free < space) { print "It'"'"'s not enough space, you must extend the VG" print "Space is equal to: " space " GB" } else if (free == space) { print "It'"'"'s enough space but consider extend the VG" } else { print "It'"'"'s enough space" print "Space is equal to: " space " GB" } exit }'
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda