, , ( )
まれなスクリプトでは、ユーザーと通信する必要がありません。 私たちは、プログラム(ユーティリティ)が私たちが望むことをすることを期待しています。 したがって、それらに影響を与えるツールが必要であり、プログラム自体がその作業の進捗状況を説明する必要があります。
このトピックでは、bashスクリプトをユーザーと対話するいくつかの方法を検討します。 この記事は、スクリプト作成の初心者を対象としていますが、経験のある人が自分にとって興味深いものを見つけられることを願っています。
トピックには、セマンティックの負荷をかけない原始的な例も含まれていますが、作業中に興味深いものを見ることができます。
変数
初期データを保存する最も一般的な方法は、変数を使用することです。 プログラムの最初の段階で、ユーザーが初期データを書き込む変数をいくつか宣言します。
#!/bin/bash # EMAIL=example@gmail.com echo " : $EMAIL"
この方法は、データが少なく、ユーザーの介入なしにスクリプトが自動的に実行されるように設計されている場合に適しています。 何をどこに入力する必要があるかをユーザーに明確に知らせる必要があります。 これらすべてを1つの場所、つまり構成ファイルに収集することをお勧めします 。 sourceコマンドで接続できます。 たとえば、構成ファイルがスクリプトと同じディレクトリにある場合、次のようになります。
#!/bin/bash source ./config.cfg echo " : $EMAIL"
config.cfgファイルで、
EMAIL=example@gmail.com
の行を忘れずに入力してください
コマンドラインオプション
プログラムにデータを報告する別の方法は、起動時にコマンドラインで指定することです。 これらのパラメーターは、番号付きの変数に含まれています。 例: $ 0-スクリプトの名前、 $ 1-最初のパラメーター、 $ 2-2番目のパラメーターなど。2つの補助変数もあります。 $#は渡された引数の数を含みます。 $ @には、スペースで区切られた、スクリプトに渡されるすべての引数が含まれます。
#!/bin/bash # for n in $@ do echo "$n" done

質問と確認

多くの人が上のスクリーンショットの質問に精通していると思います。 このようなダイアログは使用できます...まあ、あなたはそれがどこで使用できるかをあなた自身が推測しました。
#!/bin/bash echo -n "? (y/n) " read item case "$item" in y|Y) echo " «y», ..." ;; n|N) echo " «n», ..." exit 0 ;; *) echo " . ..." ;; esac
スクリーンショットでは、文字「D」が大きいことに注意してください。 これはデフォルトのアクションを意味します。つまり、ユーザーが何も入力しない場合、これは「D」を入力するのと同じになります。
OK /失敗
プログラムがユーザーと通信する別の方法は、実行ステータスです。 おそらく彼らはあなたになじみがあるでしょう。

実装も非常に簡単です。
#!/bin/bash SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m" SETCOLOR_NORMAL="echo -en \\033[0;39m" echo -e " ..." # , rm test_file if [ $? -eq 0 ]; then $SETCOLOR_SUCCESS echo -n "$(tput hpa $(tput cols))$(tput cub 6)[OK]" $SETCOLOR_NORMAL echo else $SETCOLOR_FAILURE echo -n "$(tput hpa $(tput cols))$(tput cub 6)[fail]" $SETCOLOR_NORMAL echo fi
これは、スクリプトの仕組みです。

優れた人々は、ログの記録と進捗状況を含むスクリプトの拡張バージョンを作成しました。 リンクを喜んで共有します。
上記のリンクに基づいて、コードを簡素化できます。
#!/bin/bash red=$(tput setf 4) green=$(tput setf 2) reset=$(tput sgr0) toend=$(tput hpa $(tput cols))$(tput cub 6) echo -e " ..." # , rm test_file if [ $? -eq 0 ]; then echo -n "${green}${toend}[OK]" else echo -n "${red}${toend}[fail]" fi echo -n "${reset}" echo
シュードグラフィックス
グラフィカルな表現が好きな人には、便利なツールdialogがあります。 デフォルトでは、システムにはないため、修正しましょう。
sudo apt-get install dialog
簡単なコマンドで試すことができます:
dialog --title " " --msgbox "\n - !" 6 50
進行状況ダイアログの例を次に示します。
#!/bin/sh ( c=10 while [ $c -ne 110 ] do echo $c ((c+=10)) sleep 1 done ) | dialog --title " " --gauge "Please wait ...." 10 60 0 clear
青い背景を残さないように、clearを挿入して画面をクリアすることを忘れないでください。 このユーティリティは、さらに多くの種類のダイアログボックスをサポートしています。 主な欠点は、デフォルトではシステムにないことです。
ダイアログの代わりにwhiptailがあります。これはデフォルトで一部のシステムにも存在します。
詳細については、リンクを参照してください。
http://unstableme.blogspot.com/2009/12/linux-dialog-utility-short-tutorial.html
http://www.cc-c.de/german/linux/linux-dialog.php
GUI
GUIには熱烈な反対者がいますが、明らかに存在する権利があります。 このようなダイアログは、 kdialogコマンド (KDEがグラフィカルシェルの場合)、またはgdialogとzenity (Gnomeの場合)を使用して取得できます。
たとえば、パスワード入力フォーム:
kdialog --password ", :"
どちらか
gdialog --password ", :"
別の例は、KDEの例です。
kdialog --question " ?" rc=$? if [ "${rc}" == "0" ]; then echo " yes" else echo " no" fi
Gnomeの場合:
#!/bin/bash name=$(gdialog --title " " --inputbox " :" 50 60 2>&1) echo " : $name"
ご覧のとおり、この方法の明らかな欠点は、特定のデスクトップ環境への接続です。 確かにグラフィカル環境では、これは存在しないかもしれません。 しかし、それにもかかわらず、いつか便利になるかもしれません。
リンクの詳細:
http://pwet.fr/man/linux/commandes/kdialog
http://linux.about.com/library/cmd/blcmdl1_gdialog.htm
http://www.techrepublic.com/blog/opensource/gui-scripting-in-bash/1667
PS継続するには...
UPD: 「OK / FAIL」セクションに簡略化されたコードを追加しました。
UPD2:構成ファイルを変数セクションに接続する例を追加しました。
2番目の部分は公開されています。