Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

246
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!