R6/2/3 日経Linuxが休刊を迎えたことを知りました。もうLinux使っていませんが、お疲れさまでした。当ブログの更新はいつかまた、、きっと、、
roadtoalinuxmintuser

theming

roundup
スポンサーサイト

一定期間更新がないため広告を表示しています

| - |
Shell :シェルスクリプトを組もう! Dialog 編 08:00

Zenity よりはあまり知られていないかもしれませんが、シェルスクリプトの中でダイアログボックスを表示するのに使えるユーティリティーは他にもたくさんあり、今回は「dialog」を紹介します。dialog を使ってシェルスクリプトに GUI (的な要素)を組み込む方法を見ていきます。

dialog は以下の 8 種類のボックスを作ることができます:
  • はい/いいえボックス
  • メニューボックス
  • 入力ボックス
  • メッセージボックス
  • テキストボックス
  • 情報ボックス
  • チェックリストボックス
  • ラジオリストボックス


以下のコマンドはタイトルに「通知」、メッセージに「プログラムを開始します。」という 5 行分の高さと半角 30 文字分の横幅を持つメッセージボックスを表示します:
dialog --title "プログラムの開始" --msgbox "プログラムを開始します。" 5 30


基本的にダイアログボックスは dialog、続いてタイトル(オプション)、続いてボックスの種類、続いて表示したいメッセージ、最後にサイズを指定します。

次のコマンドでは <はい>・<いいえ> のボタンが下部に表示されます。<はい> が押されると 0 を返し、<いいえ> が押されると 1 を返します:
dialog --title "プログラムの続行" --yesno "プログラムを続行しますか?" 5 35
response=$?
case $response in
0) echo "はいが押されました";;
1) exit 0 ;;
esac



ダイアログボックスのサイズが小さすぎると文字が隠れてしまうので注意してください。
最初にメッセージボックスを見ましたが、インフォボックスも似たようなボックスです。違う点は、了解ボタンが無い点です:
dialog --infobox "しばらくお待ちください。" 10 30 ; sleep 4


入力ボックスはユーザーに文字列を入力させることができます。編集キー(恐らくバックスペースキーやデリートキーなどのことだと思います)も使用できます。テキストフィールドは必要な時スクロールします。データが入力された後、Stream 2 ("STDERR") に出力されますが、より一般的にはファイルに出力をリダイレクトして使います:
dialog --inputbox "ユーザー名は?:" 8 40 2>answer
return=$(cat answer)
echo $return
rm -f answer



テキストボックスはシンプルなファイルビューアーで、パラメータにファイル名を指定します。ここでは矢印キーや
Page Up
Page Down
Home
などが使えます。
ESC
あるいは
Enter
で抜け出せます:
dialog --textbox /etc/profile 22 70


メニューは選択肢を表示し、ユーザーにどれか選ばせることができます。構文は以下の通りです:
dialog --menu "文字列" 高さ 幅 選択肢の数 1 選択肢1 2 選択肢2 3 選択肢3
ユーザーは矢印キーで移動した後、
Enter
を押すことで選択できます。Stream 2 ("STDERR") に出力されます。例えばこのような感じで使います:
dialog --menu "一つ選んでください:" 10 30 3 1 赤 2 緑 3 青 2>temp
return=$(cat temp)
echo "あなたが選んだのは:"$return
rm -f temp



チェックリストではユーザーに選択肢のリストを表示しスペースで個別に ON/OFF を切り替えることができます。三つ目のフィールドにはデフォルトの ON/OFF を設定します:
dialog --checklist "使ったことのあるデスクトップ環境を選んで下さい:" 13 40 3 \
1 "Cinnamon" on \
2 "MATE" on \
3 "Xfce" off 2>temp



最後にラジオリストを取り上げます。基本的にはチェックリストと同じですが、ユーザーが選べるのは一つだけという違いがあります:
dialog --backtitle "Game Console Selection" \
--radiolist "一番好きなゲーム機は:" 10 40 4 \
1 "XBox One" off \
2 "Play Station 4" on \
3 "Nintendo Switch" off \
4 "Nintendo DS 3" off 2>temp



実際にスクリプトを組んでみる


北陸先端科学技術大学院大学のミラーサーバーから指定の Linux Mint 19.1 64bit をダウンロードするスクリプトです。簡単なスクリプトですが雰囲気はつかめると思います:
#!/bin/sh

dialog --backtitle "ダウンロードしたいエディションをえらでください:" --radiolist "一つ選んでください:" 10 40 3 1 "Cinnamon 64bit" on 2 "MATE 64bit" off 3 "Xfce 64bit" off 2>temp

# OK が押されたら
if [ "$?" = "0" ]
then
_return=$(cat temp)

# 1 を選んだ時
if [ "$_return" = "1" ]
then
url="http://ftp.jaist.ac.jp/pub/Linux/linuxmint/isos/stable/19.1/linuxmint-19.1-cinnamon-64bit.iso"
fi

# 2 を選んだ時
if [ "$_return" = "2" ]
then
url="http://ftp.jaist.ac.jp/pub/Linux/linuxmint/isos/stable/19.1/linuxmint-19.1-mate-64bit.iso"
fi

# 3 を選んだ時
if [ "$_return" = "3" ]
then
url="http://ftp.jaist.ac.jp/pub/Linux/linuxmint/isos/stable/19.1/linuxmint-19.1-xfce-64bit.iso"
fi

# キャンセルが押されたら
else
echo "取消が押されました。"
fi

dialog --menu "保存先を選んでください" 10 30 3 1 /tmp 2 ~/ダウンロード 3 ~/デスクトップ 2>temp

# OK が押されたら
if [ "$?" = "0" ]
then
_return=$(cat temp)

# /tmp を選んだ時
if [ "$_return" = "1" ]
then
wget "$url" -P /tmp
fi

# ~/ダウンロードを選んだ時
if [ "$_return" = "2" ]
then
wget "$url" -P $HOME/ダウンロード
fi

# ~/デスクトップを選んだ時
if [ "$_return" = "3" ]
then
wget "$url" -P $HOME/デスクトップ
fi

# キャンセルが押されたら

else
echo "取消が押されました。"
fi

# temp ファイルの削除
rm -f temp


参考元: Linux Journal
<< NEW | TOP | OLD>>
スポンサーサイト 08:00
| - |

Show some apps list:


miku

Follow on your feed reader:


About this blog:

Linux Mint-centric chronicle with anime girls since 2009.Best View with Google Chrome 1980x1080 dimension.
Info 更新は不定期です。

script

LinuxMint ISO 日本ミラーサーバー:




Amazon: