1 votos

Ayuda con loop/contador de secuencia de comandos

Estoy tratando de crear un bucle simple/contador de secuencia de comandos para mostrar información acerca de las impresoras instaladas. Principal el Nombre, PPD, PPD Versión, y URI. Tengo dos problemas... 1 - el nombre no viene de arriba; 2 - el segundo PPD de la impresora es correcta.

Aquí lo tengo:

#!/bin/bash
name=($(/usr/sbin/system_profiler SPPrintersDataType | /usr/bin/awk -F ":" '/Name/{$1="";print $0}' | /usr/bin/sed 's/\ /-,--/g'))
ppd=($(/usr/sbin/system_profiler SPPrintersDataType | /usr/bin/awk -F ":" '/PPD/{$1="";print $0}' | /usr/bin/sed 's/\ /-,--/g'))
ppdversion=($(/usr/sbin/system_profiler SPPrintersDataType | /usr/bin/awk -F ":" '/PPD File Version/{$1="";print $0}' | /usr/bin/sed 's/\ /-,--/g'))
uri=($(/usr/sbin/system_profiler SPPrintersDataType | /usr/bin/awk '/URI/{print $NF}'))
total="${#ppdversion[@]}"
/bin/echo -n "<result>"
for ((counter=0; counter < "$total"; counter++))
{
    echo "name: ${name[$counter]}" | /usr/bin/sed 's/-,--/\ /g;s/\ \ //g'
    echo "PPD: ${ppd[$counter]}" | /usr/bin/sed 's/-,--/\ /g;s/\ \ //g'
    echo "PPD Version: ${ppdversion[$counter]}" | /usr/bin/sed 's/-,--/\ /g;s/\ \ //g'
    echo "URI: ${uri[$counter]}"
    echo
}
echo "</result>"

El resultado:

<result>
name: 
PPD: Canon MX410 series
PPD Version: 16.10.0.0
URI: lpd://printer.local


name: 
PPD: 16.10.0.0
PPD Version: 16.10.0.0
URI: dnssd://Canon%20MX410%20series%20_1B181C000000._printer._tcp.local./auto

</result>

Gracias.

1voto

abjbhat Puntos 184
  1. El guión está buscando un "Nombre", pero no de campo titulado "Nombre" existe, por lo que no se encuentra nada. Hay otro comando lpstat que puede ser más fácil de analizar que el nombre, y devuelve el mismo orden:

    /usr/bin/lpstat -p | awk '{print $2}'
    
  2. Desde PPD también en PPD Version, esto provoca un conflicto. Búsqueda en lugar de PPD:, como los siguientes:

    ppd=($(/usr/sbin/system_profiler SPPrintersDataType \
               | /usr/bin/awk -F ":" '/PPD:/{$1="";print $0}' \
               | /usr/bin/sed 's/\ /-,--/g'))
    

He aquí una secuencia de comandos completa - aparece para hacer lo que quieres:

 #!/bin/bash
 name=($(/usr/bin/lpstat -p | awk '{print $2}' | /usr/bin/sed 's/\ /-,--/g'))
 ppd=($(/usr/sbin/system_profiler SPPrintersDataType | /usr/bin/awk -F ":" '/PPD:/{$1="";print $0}' | /usr/bin/sed 's/\ /-,--/g'))
 ppdversion=($(/usr/sbin/system_profiler SPPrintersDataType | /usr/bin/awk -F ":" '/PPD File Version/{$1="";print $0}' | /usr/bin/sed 's/\ /-,--/g'))
 uri=($(/usr/sbin/system_profiler SPPrintersDataType | /usr/bin/awk '/URI/{print $NF}'))
 total="${#ppdversion[@]}"
 /bin/echo "<result>"
 for ((counter=0; counter < "$total"; counter++))
 {
     echo "name: ${name[$counter]}" | /usr/bin/sed 's/-,--/\ /g;s/\ \ //g'
     echo "PPD: ${ppd[$counter]}" | /usr/bin/sed 's/-,--/\ /g;s/\ \ //g'
     echo "PPD Version: ${ppdversion[$counter]}" | /usr/bin/sed 's/-,--/\ /g;s/\ \ //g'
     echo "URI: ${uri[$counter]}"
     echo
 }
 echo "</result>"

La salida (para mi impresoras instaladas):

<result>
name: Brother_MFC_9325CW
PPD: Brother MFC-9325CW CUPS
PPD Version: 4.5.2
URI: usb://Brother/MFC-9325CW?serial=000L2J998184

name: Canon_MX410
PPD: Canon MX410 series
PPD Version: 16.10.0.0
URI: dnssd://Canon%20MX410._printer._tcp.local./auto

</result>

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X