Ayuda con script loop / counter

Estoy tratando de crear una secuencia de comandos simple de bucle / contador para mostrar información sobre las impresoras instaladas. Principal el nombre, PPD, versión de PPD y URI. Tengo dos problemas … 1 – el nombre no aparece; 2 – la segunda impresora PPD es incorrecta.

Aquí lo que 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 "" 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 "" 

La salida:

  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  

Gracias.

  1. La secuencia de comandos está buscando “Nombre”, pero no existe ningún campo titulado “Nombre”, por lo que no se encuentra nada. Hay un comando alternativo lpstat que puede ser más fácil analizar el nombre y devuelve el mismo orden:

     /usr/bin/lpstat -p | awk '{print $2}' 
  2. Dado que PPD también está en la PPD Version , esto causa un conflicto. En su lugar, PPD: como el siguiente:

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

Aquí hay un script completo – parece 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 "" 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 "" 

La salida (para mis impresoras instaladas):

  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