루프 / 카운터 스크립트 도움말


1

설치된 프린터에 대한 정보를 표시하는 간단한 루프 / 카운터 스크립트를 만들려고합니다. 기본 이름, PPD, PPD 버전 및 URI입니다. 두 가지 문제가 있습니다 ... 1-이름이 나오지 않습니다. 2-두 번째 프린터 PPD가 올바르지 않습니다.

여기 내가 가진 것 :

#!/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>"

출력 :

<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>

감사.

답변:


1
  1. 스크립트가 "이름"을 검색하고 있지만 "이름"이라는 제목의 필드가 없으므로 아무것도 없습니다. lpstat이름을보다 쉽게 ​​구문 분석하고 동일한 순서를 반환 하는 대체 명령 이 있습니다.

    /usr/bin/lpstat -p | awk '{print $2}'
  2. PPD또한에 있기 때문에 PPD Version충돌이 발생합니다. 대신 PPD:다음과 같이를 검색 하십시오.

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

다음은 완전한 스크립트입니다. 원하는 것을하는 것처럼 보입니다.

 #!/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>"

출력 (설치된 프린터의 경우) :

<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>

감사! 프린터 이름 필드가 무엇인지 아십니까?
웹스터 마스터

@WebsterMaster 작업 중 ... :)
Scot

이에 내기를 배치 lpstat하고 system_profiler프린터 :-) 같은 정렬 순서를 사용하여
nohillside의

이름은 사실 입니다 출력에 있지만, 구문 분석하기 어렵다. XML 결과를 구문 분석하기 위해 stackoverflow.com/questions/893585/…system_profiler -xml 의 도구 중 하나 를 실행 하고 사용하는 것이 더 쉬울 수 있습니다.
nohillside
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.