Linux 쉘 스크립트에 GUI를 추가하는 방법

0
1061

우분투 터미널에서 zenity 정보 창이 시작되었습니다.

Bash 스크립트에서 GUI 창, 슬라이더, 라디오 버튼, 진행률 표시 줄 등을 사용할 수 있습니다. 사용법을 배우십시오 zenity 툴킷을 작성하고 Bash 스크립트를 개선하십시오. 우리는 당신에게 방법을 보여줄 것입니다.

Bash 스크립팅은 강력한 프로그래밍 언어이며 Bash 셸에 내장되어 있으므로 누구나 쉽게 사용할 수 있습니다. 프로그래밍을 시작하기 쉬운 언어입니다. 통역되므로 스크립트를 컴파일 할 필요가 없습니다. 스크립트 파일을 편집하고 실행 가능하게 만들면 바로 실행할 수 있습니다. 따라서 코딩, 실행 및 디버깅주기가 매우 효율적입니다.

사람들이 Bash 스크립트에 대해 두 가지 주요 불만이 있으며 첫 번째는 속도입니다. Bash 쉘은 스크립트의 명령을 해석하기 때문에 컴파일 된 코드만큼 빠르게 실행되지 않습니다. 그러나 이것은 트랙터가 자동차만큼 빠르지 않다고 불평하는 것과 같습니다. 그것들은 다른 것들을위한 것입니다.

그러나 두 가지 종류의 속도가 있습니다. C와 같은 컴파일 된 언어로 솔루션을 개발하는 것보다 빠른 스크립트를 함께 사용하여 훨씬 빠르게 작업을 수행 할 수 있습니다.

사람들이 Bash 스크립트에 대해 두 번째로 제기하는 불만은 사용자 인터페이스이며 이는 터미널 창입니다. 물론 때로는 인터페이스가 중요하지 않습니다. 스크립트를 사용하는 사람이 작성자 인 경우 인터페이스가 그렇게 중요하지 않을 수 있습니다. 백그라운드 및 배치 유형 처리를 수행하는 스크립트도 중요하지 않습니다. 일반적으로 이러한 스크립트에는 사용자 상호 작용이 많이 필요하지 않습니다 (있는 경우).

터미널 창보다 조금 더 직관적이고 현대적인 것이 필요한 경우가 있습니다. 대부분의 사람들은 그래픽 사용자 인터페이스 (GUI)에 익숙합니다. 사람들에게 가능한 한 마찰이없는 경험을 제공하려면 스크립트에서 GUI 요소를 작성하고 사용해야합니다.

zenity 응용 프로그램

zenity Bash 스크립트에 광범위한 그래픽 인터페이스 요소를 통합 할 수 있습니다. 스크립트에 현대적인 느낌과 현대적이고 친숙한 모양을 제공하는 강력한 툴킷입니다.

zenity Ubuntu, Fedora 및 Manjaro 배포판에 사전 설치되어 있습니다. 그놈의 일부입니다. KDE를 사용하는 경우 체크 아웃 할 수 있습니다. kdialog 대신에 zenity 모든 데스크탑 환경에서 실행됩니다.

이 기사의 예제는 명령 행에서 다른 대화 상자 창을 작성하는 방법, 변수에서 리턴 값 및 사용자 선택 사항을 캡처하는 방법 및 스크립트에서 대화 상자 창을 사용하는 방법을 보여줍니다.

세 가지 유형의 대화 상자 창을 모두 사용하는 작은 응용 프로그램으로 마무리합니다.

캘린더 대화창

캘린더 대화 상자 창에서 누군가 날짜를 선택할 수 있습니다. 와 하나를 만들려면 zenity 두 단어의 단일 명령이 필요합니다.

zenity --calendar
터미널 창에서 "zenity --calendar"

캘린더 대화 상자가 나타납니다. 여기에는 표준 날짜 선택 도구에서 기대할 수있는 모든 기능이 있습니다. 월과 연도를 변경하고 요일을 클릭하여 해당 날짜를 선택할 수 있습니다. 기본적으로 오늘 날짜는 창이 나타날 때 강조 표시됩니다.

2019 년 7 월의 달력 달력 창.

“확인”을 클릭하여 대화창을 닫고 강조 표시된 날짜를 선택하십시오. 날짜를 두 번 클릭해도 마찬가지입니다.

날짜를 선택하지 않으려면 “취소”를 클릭하고 키보드에서 “Esc”키를 누르거나 대화 상자 창을 닫으십시오.

2019 년 8 월 19 일이 선택된 zenity 일정 창.

위의 예에서 2019 년 8 월 19 일이 선택되었습니다. 사용자가 “확인”을 클릭하면 달력이 닫히고 선택한 날짜가 터미널 창에 인쇄됩니다.

터미널 창에 표시된 달력 (08/19/2019)에서 선택한 날짜입니다.

“GTKDialog는 일시적인 부모없이 매핑되었습니다. 이것은 권장되지 않습니다.”

GTK는 그놈 인터페이스 개발에 사용되는 툴킷 인 GIMP Tool Kit의 약자입니다. 원래 GNU 이미지 조작 프로그램 (GIMP)의 저자가 고안했습니다. GNU는 GNU의 유닉스가 아닙니다.

GTK 엔진은 zenity 비표준 방식으로 GTK 구성 요소를 사용했습니다.

날짜 값 캡처

터미널에 날짜를 인쇄하는 것은 우리에게별로 도움이되지 않습니다. 스크립트 중 하나에서이 캘린더를 호출하려면 선택한 날짜 값을 캡처하여 스크립트에서 유용한 기능을 수행해야합니다. 또한 캘린더를 약간 맞춤 설정할 것입니다.

달력과 함께 다음 옵션을 사용합니다. 모두 이중 대시“-”플래그와 함께 사용해야합니다.

  • -본문: 일정 관리에 표시 할 텍스트 문자열을 지정합니다. 기본값 인 “아래에서 날짜를 선택하십시오”를 대체합니다.
  • -표제: 캘린더 대화창의 제목을 설정합니다.
  • -일: 캘린더가 열릴 때 선택된 요일을 설정합니다.
  • -달: 캘린더가 열릴 때 선택된 월을 설정합니다.
  • -년: 캘린더가 열릴 때 선택된 연도를 설정합니다.

우리는라는 변수를 사용하고 있습니다 ChosenDate 달력에서 반환 된 날짜를 캡처합니다. 그리고 우리는 echo $ChosenDate 해당 날짜를 터미널 창에 인쇄합니다.

예, 이전 예와 동일한 결과를 얻었지만 여기에는 선택한 날짜가 변수에 저장되어 있습니다. 이전 예에서는 인쇄되어 잊혀졌습니다.

ChosenDate=$(zenity -- calendar --text "Choose a date" --title "How-To Geek Rota" --day 1 -- month 9 --year 2019); echo $ChosenDate

"ChosenDate = $ (zenity-calendar --text"날짜 선택 "--title"How-To Geek Rota "-일 1-9 월-2019 년)) echo $ ChosenDate"를 터미널 창에 표시하십시오.

이제 달력에 프롬프트와 창 제목이 표시됩니다. 날짜는 오늘 날짜가 아닌 선택한 시작 날짜로 설정됩니다.

시작 날짜가 선택된 zenity calendar (2019 년 9 월 1 일).

선택시 반환되는 날짜 문자열의 형식을 사용자 정의 할 수도 있습니다. 그만큼 --date-format 옵션 뒤에 형식 지정자가 와야합니다. 이것은 출력에 포함될 데이터 및 형식을 정의하는 일련의 토큰입니다. 토큰은 strftime() C 언어 기능과 다양한 선택이 있습니다.

우리가 사용하는 토큰은 다음과 같습니다.

  • %ㅏ: 요일의 전체 이름입니다.
  • %디: 월의 일을 숫자로 나타냅니다.
  • %미디엄: 숫자를 나타내는 월입니다.
  • %와이: 연도는 두 자리 숫자 (세기 없음)입니다.
ChosenDate=$(zenity -- calendar --text "Choose a date" --title "How-To Geek Rota" --date-format="%A %d/%m/%y" --day 1 -- month 9 --year 2019); echo $ChosenDate

"ChosenDate = $ (zenity-calendar --text"날짜 선택 "--title"How-To Geek Rota "--date-format ="% A % d / % m / % y "--day 1- -9 월-2019 년), 터미널 창에 $ ChosenDate "를 에코합니다.

누군가 날짜를 선택합니다.

2019 년 9 월 16 일이 선택된 zenity 일정 창

그리고 날짜는 우리 형식으로 반환됩니다. 요일의 이름을 표시하고 그 뒤에 날짜, 일, 월, 유럽 순서로 날짜를 표시합니다.

터미널 창에서 달력으로 반환 된 유럽 형식의 날짜입니다.

파일 선택 대화 상자 창 : 파일 선택

파일 선택 대화창은 매우 복잡합니다. 사람들은 파일 시스템을 탐색하고 파일을 강조 표시 한 다음“확인”을 클릭하여 해당 파일을 선택하거나 선택을 모두 취소 할 수 있습니다.

zenity 이 모든 기능 등을 제공합니다. 그리고 캘린더 대화창처럼 사용하기 쉽습니다.

우리가 사용할 새로운 옵션은 다음과 같습니다.

  • – 파일 선택: 알려줍니다 zenity 파일 선택 대화창을 사용하려고합니다.
  • -배수: 누군가 하나 이상의 파일을 선택할 수 있습니다.
  • – 파일 필터: 표시 할 파일 형식을 파일 대화 상자 창에 알려줍니다.
zenity --file-selection --tile "How-To Geek" --multiple --file-filter='*.mm *.png *.page *.sh *.txt'

파일 선택 대화창은 다른 파일 선택 창처럼 작동합니다.

폴더가 선택된 zenity 파일 섹션 대화 상자 창.

사용자는 파일 시스템을 탐색하고 원하는 파일을 선택할 수 있습니다.

파일이 선택된 zenity 파일 선택 대화 상자 창

새 디렉토리를 탐색하고 “button_hybrid.png”라는 파일을 선택했습니다.

“확인”을 클릭하면 파일 선택 대화 상자 창이 닫히고 파일 이름과 경로가 터미널 창에 인쇄됩니다.

터미널 창에서 선택된 파일 이름.

추가 처리에서 파일 이름을 사용해야하는 경우 달력에서 날짜와 마찬가지로 파일 이름을 변수로 캡처 할 수 있습니다.

파일 선택 대화창 : 파일 저장

하나의 옵션을 추가하면 파일 선택 대화 상자 창을 파일 저장 대화 상자 창으로 바꿀 수 있습니다. 옵션은 --save. 우리는 또한 --confirm-overwrite 선택권. 그러면 기존 파일을 덮어 쓸 것인지 확인하라는 메시지가 표시됩니다.

Response=$(zenity --file-selection --save --confirm-overwrite); echo $Response

터미널 창에 "Response = $ (zenity --file-selection --save --confirm-overwrite); echo $ Response"를 입력하십시오.

파일 저장 대화 상자가 나타납니다. 누군가 파일 이름을 입력 할 수있는 텍스트 필드가 있습니다.

zenity 파일 저장 대화창.

사용자는 파일 시스템 내에서 원하는 위치를 찾거나 파일 이름을 제공하거나 기존 파일을 클릭하여 덮어 쓸 수 있습니다.

기존 파일이 선택된 zenity 파일 저장 대화 상자.

위의 예에서 사용자는 기존 파일을 강조 표시했습니다.

“확인”을 클릭하면 기존 파일을 교체 할 것인지 묻는 확인 대화 상자가 나타납니다. 파일 이름이 경고 대화 상자에 나타납니다. 그것이 세부 사항에 대한 관심의 종류입니다. zenity 전문적인 외관.

우리가 사용하지 않은 경우 --confirm-overwrite 옵션을 선택하면 파일이 자동으로 덮어 써집니다.

zenity 덮어 쓰기 확인 대화 상자.

파일 이름은 변수에 저장됩니다 Response터미널 창에 인쇄됩니다.

터미널 창에 저장된 파일 이름.

알림 대화창

zenity스크립트에 매끄러운 알림 대화 상자 창을 포함시키는 것은 쉽지 않습니다. 사용자에게 정보, 경고, 오류 메시지 및 질문을 제공하기 위해 호출 할 수있는 재고 대화 상자 창이 있습니다.

오류 메시지 대화 상자 창을 작성하려면 다음 명령을 사용하십시오.

zenity --error --width 300 --text "Permission denied. Cannot write to the file."

우리가 사용하는 새로운 옵션은 다음과 같습니다.

  • -오류: 알려줍니다 zenity 에러 대화창을 사용하고 싶습니다.
  • -폭: 창의 초기 너비를 설정합니다.

"zenity --error --width 300 --text"권한이 거부되었습니다. 터미널 창에서 파일을 쓸 수 없습니다. "

오류 대화창이 지정된 너비로 나타납니다. 표준 GTK 오류 아이콘을 사용합니다.

zenity error 대화창.

정보 대화 상자 창을 만들려면 다음 명령을 사용하십시오.

zenity --info --width 300 --text "Update complete. Click OK to continue."

우리가 사용하는 새로운 옵션은 --info 알려줍니다 zenity 정보 대화창을 생성합니다.

zenity 정보 대화창.

질문 대화 상자 창을 만들려면 다음 명령을 사용하십시오.

zenity --question --width 300 --text "Are you happy to proceed?"; echo $?

우리가 사용하는 새로운 옵션은 --question알려줍니다 zenity 질문 대화창을 생성합니다.

"zenity --question --width 300 --text"행복하겠습니까? "; echo $?" 터미널 창에서.

그만큼 $? 특수 매개 변수입니다. 가장 최근에 실행 된 포 그라운드 파이프 라인의 리턴 값을 보유합니다. 일반적으로 이는 가장 최근에 닫힌 프로세스의 값입니다. 0 값은 “확인”을 의미하고 하나 이상의 값은 “취소”를 의미합니다.

이것은 당신이에 적용 할 수있는 일반적인 기술입니다 zenity 대화창. 스크립트에서이 값을 확인하면 대화 상자 창에서 리턴 된 데이터를 처리해야하는지 또는 무시해야하는지 판별 할 수 있습니다.

zenity 질문 대화.

“예”를 클릭 했으므로 리턴 코드는 “확인”을 나타내는 0입니다.

터미널 창에서 제로 (0) 리턴 코드.

경고 대화 상자 창을 만들려면 다음 명령을 사용하십시오.

zenity --warning --title "Low Hard Drive Space" --width 300 --text "There may not be enough hard drive space to save the backup."

우리가 사용하는 새로운 옵션은 --warning 알려줍니다 zenity 경고 대화 상자 창을 만듭니다.

"zenity --warning --title"Low Hard Drive Space "--width 300 --text"백업을 저장할 하드 드라이브 공간이 충분하지 않을 수 있습니다. "터미널 창에.

경고 대화 상자가 나타납니다. 질문이 아니므로 버튼 하나만 있습니다.

zenity 경고 대화창.

진행률 대화창

당신은 사용할 수 있습니다 zenity 진행률 대화 상자 창에 스크립트 완료 정도를 나타내는 진행률 표시 줄이 표시됩니다.

진행률 표시 줄은 스크립트에서 파이프에 연결된 값에 따라 진행됩니다. 원리를 설명하려면 다음 명령을 사용하십시오.

(for i in $(seq 0 10 100); do echo $i; sleep 1; done)

터미널 창에서 "(i의 경우 $ (seq 0 10100); echo $ i; sleep; done)"

명령은 다음과 같이 분류됩니다.

  • 그만큼 seq 명령은 0에서 100까지의 시퀀스를 10 단계로 단계별로 실행합니다.
  • 각 단계에서 값은 변수에 저장됩니다 i. 터미널 창에 인쇄됩니다.
  • 명령으로 인해 1 초 동안 명령이 일시 중지됩니다. sleep 1 명령.

우리는 이것을 사용할 수 있습니다 zenity 진행률 표시 줄을 보여주는 진행률 대화 상자 창. 이전 명령의 출력을 zenity:

(for i in $(seq 0 10 100); do echo $i; sleep 1; done) | zenity --progress --title "How-To Geek" -- auto-close

터미널 창에서 "(i의 경우 $ (seq 0 10 100); echo $ i; sleep 1; done) | zenity --progress --title"How-To Geek "-자동 닫기"

우리가 사용하는 새로운 옵션은 다음과 같습니다.

  • -진행: 알려줍니다 zenity 진행률 대화 상자 창을 사용하려고합니다.
  • – 자동 닫기: 진행률 표시 줄이 100 %에 도달하면 대화 상자를 닫습니다.

진행률 대화 상자 창이 나타나고 막대가 100 %로 진행되어 각 단계 사이에 1 초 동안 일시 중지됩니다.

zenity progress 대화 상자.

우리는 그 배관 가치 개념을 zenity 스크립트에 진행률 대화 상자 창을 포함시킵니다.

이 텍스트를 편집기에 입력하고“progress.sh”로 저장하십시오.

!/bin/bash

function work-list () {

echo "# First work item" 
echo "25"
sleep 1

echo "# Second work item" 
echo "50"
sleep 1

echo "# Third work item" 
echo "75"
sleep 1

echo "# Last work item" 
echo "100"
sleep 1

}

work-list | zenity --progress --title "How-To Geek" --auto-close

exit 0

스크립트는 다음과 같습니다.

  • 스크립트는 work-list. 여기에 실제 작업을 수행하기위한 명령과 지시 사항이 있습니다. 각각을 교체하십시오 sleep 1 당신의 실제 명령.
  • zenity 수락 echo "# ..." 진행 대화 상자 창에 표시합니다. 이 행의 텍스트를 변경하여 정보 메시지를 사용자에게 전달하십시오.
  • 그만큼 echo 숫자가 포함 된 줄 (예 : echo "25" 에 의해 허용됩니다. zenity 진행률 표시 줄의 값을 설정하십시오.
  • 작업리스트 기능이 호출되고 zenity.

스크립트를 실행 가능하게하려면이 명령을 사용하십시오.

chmod +x progress.sh

터미널 창에서 "chmod + x progress.sh"

이 명령을 사용하여 스크립트를 실행하십시오.

./progress.sh

터미널 창에서 "./progress.sh".

스크립트가 실행되고 스크립트의 각 단계가 실행될 때 문자 메시지가 변경됩니다. 진행률 표시 줄이 100 %로 단계적으로 이동합니다.

zenity 진행률 표시 줄 대화 상자 창.

스케일 대화창

배율 대화 상자 창을 사용하면 슬라이더를 움직여 숫자 값을 선택할 수 있습니다. 이는 너무 높거나 낮은 값을 입력 할 수 없음을 의미합니다.

우리가 사용하는 새로운 옵션은 다음과 같습니다.

  • -규모: 알려줍니다 zenity 스케일 대화창을 사용하고 싶습니다.
  • – 최소값: 스케일의 최소값을 설정합니다.
  • – 최대 값: 스케일의 최대 값을 설정합니다.
  • -단계: 화살표 키를 사용할 때 슬라이더가 이동하는 양을 설정합니다. 누군가 마우스를 사용하는 경우 슬라이더 이동에는 영향을 미치지 않습니다.
  • -값: 슬라이더의 초기 값과 위치를 설정합니다.

이것이 우리가 사용하는 명령입니다.

Response=$(zenity --scale --title "How-To Geek" --text "Select magnification." --min-value=0 --max-value=30 --step=3 --value15); echo $Response

"Response = $ (zenity --scale --title"How-To Geek "-텍스트"자기 선택 "--min-value = 0 --max-value = 30 --step = 3 --value15); 터미널 창에 $ Response "를 반향하십시오.

슬라이더가 15로 설정된 슬라이더 대화 상자가 나타납니다.

zenity scale 대화창.

사용자는 슬라이더를 움직여 새로운 값을 선택할 수 있습니다.

사용자 선택이 가능한 zenity scale 대화 상자

“확인”을 클릭하면 값이 변수로 전송됩니다. Response 터미널 창에 인쇄됩니다.

터미널 창에서 정점 스케일 값.

입력 대화창

입력 대화 상자 창에서 누군가 텍스트를 입력 할 수 있습니다.

우리가 사용하는 새로운 옵션은 다음과 같습니다.

  • -기입: 알려줍니다 zenity 입력 대화창을 사용하려고합니다.
  • – 입력 텍스트: 텍스트 입력 필드에 제안 된 값을 입력하려는 경우이를 사용할 수 있습니다. 빈 칸을 강요하기 위해“”를 사용하고 있습니다. 꼭 필요한 것은 아니지만 옵션을 문서화하고 싶었습니다.

전체 명령은 다음과 같습니다.

Response=$(zenity --entry --text "Enter your search term" --title "Howe-To Geek" --entry-text=""); echo $Response

"Response = $ (zenity --entry --text"검색어를 입력하십시오 "--title"Howe-To Geek2 --entry-text = ""); 터미널 창에 $ Response "를 반향하십시오.

텍스트 입력 필드가 포함 된 간단한 대화 창이 나타납니다.

zenity 입력 대화창.

누군가 텍스트를 입력하고 편집 할 수 있습니다.

텍스트 필드에 입력 된 텍스트가있는 정점 입력 대화 상자 창.

“확인”을 클릭하면 입력 한 값이 변수 응답에 할당됩니다. echo를 사용하여 터미널 창에서 변수 값을 인쇄합니다.

터미널 창에서 사용자 텍스트 입력 용어.

함께 모아서

이러한 기술을 결합하고 기능적인 스크립트를 만들어 봅시다. 스크립트는 하드웨어 정보 스캔을 수행하고 결과를 스크롤 텍스트 창에 표시합니다. 그녀는 길거나 짧은 스캔 유형을 선택할 수 있습니다.

이 스크립트에서는 세 가지 유형의 대화 상자 창을 사용합니다.이 중 두 가지가 새로운 것입니다.

  • 첫 번째는 목록 대화 상자입니다. 그것은 누군가가 선택할 수있게합니다.
  • 두 번째는 진행 상황 대화 창으로, 사용자에게 무슨 일이 일어나고 있는지 알려주고 기다려야합니다.
  • 세 번째는 텍스트 정보 창으로, 결과를 사용자에게 표시합니다.

이 텍스트를 편집기에 입력하고 “hardware-info.sh”로 저장하십시오.

#!/bin/bash

# Display hardware listing for this computer

TempFile=$(mktemp)

ListType=`zenity --width=400 --height=275 --list --radiolist 
     --title 'Hardware Scan' 
     --text 'Select the scan type:' 
     --column 'Select' 
     --column 'Scan Type' TRUE "Short" FALSE "Long"`

if (( $? -eq 1 )); then

  # they pressed Cancel or closed the dialog window 
  zenity --error --title="Scan Declined" --width=200 
       --text="Hardware scan skipped"
  exit 1
 
elif ( $ListType == "Short" ); then

  # they selected the short radio button 
  Flag="--short"
 
else

  # they selected the long radio button 
  Flag="" 
fi

# search for hardware info with the appropriate value in $Flag
hwinfo $Flag | tee >(zenity --width=200 --height=100 
     --title="Collating Information" --progress 
     --pulsate --text="Checking hardware..." 
     --auto-kill --auto-close) >${TempFile}
 
# Display the hardware info in a scrolling window
zenity --width=800 --height=600 
     --title "Hardware Details" 
     --text-info --filename="${TempFile}"
 
exit 0

실행 가능하게하려면이 명령을 사용하십시오.

chmod +x hardware-info.sh

"chmod + x haredware-info.sh in a"터미널 창.

이 스크립트는 임시 파일을 작성하며 파일 이름은 TempFile 변수에 있습니다.

TempFile=$(mktemp)

스크립트는 --list 만들기위한 옵션 zenity 대화 상자 창을 목록 대화 상자 창이라고합니다. 줄 끝의 “”문자는 스크립트가 줄을 감싸는 하나의 긴 줄로 처리하도록 지시합니다. 과정은 다음과 같습니다.

  • 창의 너비와 높이를 지정합니다.
  • 목록 대화창은 열을 지원합니다. 그만큼 --radiolist 옵션은 첫 번째 열이 단일 선택 단추 열이되도록합니다.
  • 창의 제목과 텍스트 프롬프트를 설정합니다.
  • 첫 번째 열의 제목을 “선택”으로 설정했습니다. 이 열의 내용은 라디오 버튼입니다.
  • 두 번째 열의 제목을 “선택”으로 설정하고 두 번째 열의 내용을 제공합니다. 이 열에는“Short”와“Long”이라는 두 개의 텍스트 레이블이 있습니다. TRUE 및 FALSE 표시기는 대화 창이 나타날 때 기본적으로 “Short”옵션이 선택되었음을 의미합니다.
  • 이 대화창의 결과를 변수라는 변수에 저장하고 있습니다 ListType.
ListType=`zenity --width=400 --height=275 --list --radiolist  
     --title 'Hardware Scan'  
     --text 'Select the scan type:'  
     --column 'Select'  
     --column 'Scan Type' TRUE "Short" FALSE "Long"`

사용자가 '취소'를 누르면 값을 확인할 필요가 없습니다. ListType, 우리는 단순히 종료 할 수 있습니다. “OK”를 누르면 “Short”또는 “Long”라디오 버튼을 선택했는지 확인해야합니다.

  • 특별한 매개 변수 $? 사용자가 “확인”을 누르면 0이됩니다. “취소”를 누르거나 창을 닫으면 1과 같습니다.
  • 1과 같으면 스크립트가 오류 정보 대화 상자 창을 표시하고 종료합니다. 그가 “확인”을 누르면, 우리는 ListType 변하기 쉬운.
  • 만약 ListType variable은 “Short”값을 보유하고 스크립트는 Flag “– 짧음”과 같습니다.
  • 만약 ListType 변수는 '짧은'값을 보유하지 않으며 '긴'값을 보유해야합니다. 스크립트는 Flag 빈 문자열 인 “”와 같습니다.
  • 스크립트는 Flag 다음 섹션에서 변수.
if (( $? -eq 1 )); then 

  # they pressed Cancel or closed the dialog window 
  zenity --error --title="Scan Declined" --width=200  --text="Hardware scan skipped" 
  exit 1 

elif ( $ListType == "Short" ); then 

 # they selected the short radio button 
 Flag="--short" 

else 

 # they selected the long radio button 
 Flag="" 
fi

스크립트는 사용자가 원하는 스캔 유형을 알고 있으므로 하드웨어 정보 스캔을 수행 할 수 있습니다.

  • 스크립트는 hwinfo 명령을 실행하여 Flag 변하기 쉬운.
  • 만약 Flag “– 짧음”을 포함하고 hwinfo 명령은 짧은 스캔을 수행합니다. 값이 Flag “”입니다. hwinfo 기본 긴 스캔이 수행됩니다.
  • 스크립트는 다음에서 출력을 파이프합니다. hwinfo 으로 tee. tee 출력을 zenity 그만큼 TempFile.
  • 스크립트는 진행률 표시 줄 대화 상자 창을 만듭니다. 대화 상자 창의 너비와 높이, 제목 및 프롬프트 텍스트를 설정합니다.
  • 스크립트는 얼마나 많은 정보를 미리 알 수 없습니다 hwinfo 명령이 생성되므로 진행률 표시 줄을 100 %로 올바르게 진행하도록 설정할 수 없습니다. 그만큼 --pulsate 옵션을 선택하면 진행률 대화 상자에 이동 표시기가 표시됩니다. 이것은 사용자에게 무언가 일어나고 있음을 알리고 기다려야합니다.
  • 그만큼 --auto-kill “취소”를 클릭하면 스크립트가 종료됩니다.
  • 그만큼 --auto-close 옵션을 사용하면 모니터링중인 프로세스가 완료되면 진행률 대화 상자가 자동으로 닫힙니다.
# search for hardware info with the appropriate value in $Flag
hwinfo $Flag | tee >(zenity --width=200 --height=100 
     --title="Collating Information" --progress 
     --pulsate --text="Checking hardware..." 
     --auto-kill --auto-close) >${TempFile}

hwinfo 스캔 완료, 스크립트 호출 zenity 와 텍스트 정보 대화 상자 창을 만들려면 --text-info 선택권. 텍스트 정보 대화창은 TempFile 파일:

  • 스크립트는 대화창의 너비와 높이 및 제목 텍스트를 설정합니다.
  • 그만큼 --flename 옵션은 파일의 내용을 읽는 데 사용됩니다 TempFIle 변하기 쉬운.
# Display the hardware info in a scrolling window 
zenity --width=800 --height=600  
     --title "Hardware Details"  
     --text-info --filename="${TempFile}"

사용자가 텍스트 정보 대화 상자 창을 닫으면 스크립트가 종료됩니다.

exit 0

발사해서 살펴 봅시다.

./hardware-info.sh

터미널 창에서 "./hardware-info.sh".

목록 상자가 나타납니다. “Short”옵션이 기본적으로 선택되어 있습니다.

"짧은"옵션이 선택된 목록 대화 상자.

“Long”을 선택한 다음“OK”를 클릭하십시오.

"긴"옵션이 선택된 목록 대화 상자

진행률 창에 슬라이딩 표시기가 나타납니다. 하드웨어 스캔이 완료 될 때까지 화면에 남아 있습니다.

슬라이딩 표시기가있는 진행 창.

하드웨어 스캔이 완료되면 스캔 정보가 포함 된 텍스트 정보 대화 상자가 나타납니다.

텍스트 정보 대화창의 하드웨어 스캔 정보.

“확인”을 클릭하십시오.

다이-하드 커맨드 라인 자키조차도 GUI 대화창 몇 개를 인정해야한다.