Cómo convertir la variable de script de shell de cadena a un entero

0

Mi script tiene una línea que mide el número de instancias de un proceso en ejecución

procs=$(pgrep -f luminati | wc -l);

Sin embargo, a pesar de que el contenido de $procs es un número, el script de shell no está almacenando $procs como un entero Se está almacenando como una cadena.

Por lo tanto, no puedo ejecutar condicionales como

if $procs > 3

¿Hay alguna forma de convertir esta variable a tipo entero?

  • 1
    PD: shellcheck detecta automáticamente este y otros problemas comunes. – 
  • 0
    Todo en shell es una cadena. Debe usar los comandos y operadores correctos que pueden tratar las cadenas como números. – 
Etiquetas de preguntas:

2 respuestas

2
Mejor respuesta

En bash > es truncate que escribe en un archivo. Probablemente tengas un archivo llamado 3 ahora. Deberías usar el comparador -gt :

if [[ "$procs" -gt 3 ]]; then
    ...
fi

Además, no tiene tipos separados para enteros y cadenas.

Editar: como explicó @chepner, para la compatibilidad POSIX debe usar paréntesis individuales:

if [ "$procs" -gt 3 ];
La respuesta fue
Fuente
  • 0
    LOL, de hecho, tenía un archivo llamado 3 usando el signo > que conocía pero que no pensaba en este contexto. Pero tu solución está en marcha. Gracias. – 
  • 2
    '>' no está truncate dentro de [[ ]] , es una comparación ascii – 
Mostrar mas 4 comentarios
2
Mejor respuesta

Debiera ser

if [[ "$procs" -gt 3 ]]
then
 ...
fi
La respuesta fue
Fuente
Comunidad Progexpertos
Arriba
Menu