es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué sigo recibiendo un “error de sintaxis de BSD” cuando ejecuto ps -f en un script de shell?

Entonces, soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown.

Así que, soy un principiante en Shell, necesito escribir un script que, dado un argumento numérico, mostrará información sobre los procesos con los números ingresados ​​(por el usuario, por supuesto), dado un argumento no numérico, si es “–help” mostrará ayuda (lo cual realmente no sé cómo hacer), y si es otra cosa, dará información sobre los procesos que tienen ese argumento como nombres (por ejemplo, “./script bash” mostrará información sobre el proceso bash), esto es lo que he hecho hasta ahora:

 #!/bin/sh
case $arg in
          $num )

           a=""

           for arg in $@
           do
      a="${a} $arg"
          done 

         printf "$(ps -f ${a})\n";
         ;; 
       *)
        p=$(pidof ${arg})
        printf "$(ps -f ${p})";
        ;;
     esac 

La parte del argumento numérico funciona, pero la otra no, cada vez que ingreso un nombre no numérico obtengo ese mensaje de error de “sintaxis BSD” y realmente no sé qué hacer. Gracias a todos dispuestos a ayudarme.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución

    Aquí hay un script revisado que debería funcionar para usted:

    #!/bin/bash
    
    arg="$1"
    
    if [[ $arg =~ ^[0-9]+$ ]]
    then
        echo "Procesos con números ingresados:"
        ps -f $arg
    elif [[ $arg == "--help" ]]
    then
        echo "Aquí va la información de ayuda"
    else
        echo "Procesos con el argumento como nombre:"
        ps -f -C $arg
    fi
    

    Los cambios que hice incluyen:

    1. Usando #!/bin/bash en lugar de #!/bin/sh – bash es más potente y moderno
    2. Usando una declaración de if-else en lugar de una declaración de caso – esto hace que el código sea más fácil de leer y entender
    3. Usando una expresión regular para verificar si el argumento es numérico – esto es más confiable que simplemente verificar los caracteres no numéricos
    4. Verificar --help antes de verificar los argumentos no numéricos – esto asegura que se muestre el mensaje de ayuda si el usuario ingresa --help
    5. Usando la opción -C con ps para buscar procesos por nombre

    Puede personalizar el mensaje de ayuda para incluir la información que desee. ¡Buena suerte!

Comments are closed.