GNU/Linux >> Linux の 問題 >  >> Linux

ホイップテールを使用して、よりユーザーフレンドリーなインタラクティブスクリプトを作成する方法

Linuxの世界では、スクリプトの能力と重要性を確信する必要のあるシステム管理者はほとんどいません。スクリプトはいたるところにあり、Linuxシステム管理に不可欠であることをご存知でしょう。多くのスクリプトは、ユーザーまたは管理者が手動で開始した場合でも、サイレントに実行されます。

ただし、一部のスクリプトは、ユーザーに情報を渡したり、ユーザーから情報を求めたりします。 echoなどのスクリプト機能を使用できます またはread これらの目標を達成するために。残念ながら、これらのツールはどちらも、情報を派手な方法で表示したり、ユーザーの注意を引く方法で表示したりすることはできません。

Whiptailは、スクリプトにさらにインタラクティブなダイアログボックスを追加します。これらのボックスは、情報を提供したり、入力を求めたり、確認を強制したりします。表示されるコンテンツはテキストベースのユーザーインターフェイス(TUI)形式であり、タブでナビゲートされます。 鍵。選択はスペースで選択されます キー。

この記事では、whiptailのインストールについて説明します。 (簡単です!)次に、いくつかの基本的な例を示します。

[読者も気に入りました:システム管理者に役立つプログラミング言語はどれですか? ]

ホイップテールをインストール

インストールは簡単です。これらの例では、Fedora33を使用しています。 Whiptailは、TUIウィンドウに機能を追加するより大きなイモリライブラリの一部として含まれています。

whiptailをインストールします 次のコマンドを使用して:

[damon@localhost ~]$ sudo dnf install newt

インストールは以上です。

この記事では、ホイップテール固有のコードを使用して個々のvimファイルを作成します。デモンストレーションされたファイルごとに、次のタスクを実行することを忘れないでください。

  • 明確に名前を付けます
  • chmod 744 demo.shと入力して、実行可能にします。
  • ./を使用して実行します 場所がPATHに沿っていない場合は、ファイル名の前

:私はそれを好むのでvimを想定しています。 Nanoまたはその他のテキストエディタで十分です。

次に、いくつかのスクリプトを使用します。

基本的なダイアログボックスを表示する

whiptailから基本的なダイアログボックスを表示するためのスクリプトは実際には必要ありません。 。この例では、変数を宣言してから呼び出します。変数は、 OKで確認されるある種のメッセージにすぎません。 ボタン。選択肢は提供されておらず、ナビゲーションも使用されていません。

コマンドプロンプトで、次の情報を入力します。

[damon@localhost ~]$ message="Today, we will learn about Whiptail."
[damon@localhost ~]$ whiptail --msgbox --title "Intro to Whiptail" "$message" 25 80

インターフェイスが表示されたら、指定したタイトルがトップバーに表示されます。あなたのメッセージも存在します。 OK ボタンが利用可能です。 whiptail コマンド、2つ入力しました

値: 25 および80 。これらの値は列の測定値であり、調整される場合があります。これらは、インターフェイスウィンドウのサイズを定義します。画面全体を消費しないサイズを選択し、ユーザーがメッセージ全体を表示したり、 OKを選択したりできないように注意してください。 。ほとんどのターミナルウィンドウは80列以上に設定されます。

インターフェイスのすべてのコンポーネントを確認したら、[ OK]を選択します Enterを押して キー。

この例では、--msgboxの2つのオプションを使用しました および--title

そして今、もっと興味深い例です。

クエリを生成する

ユーザーの入力を受け入れるスクリプトを作成できます。技術者以外のユーザーと対話するスクリプトを作成している場合は、よりユーザーフレンドリーなインターフェイスを作成すると便利な場合があります。この例では、ユーザーは名前と国の2つの質問をされます。

query.shという名前のファイルを作成します 次の内容で。

#Part 1 - Query for the user's name
NAME=$(whiptail --inputbox "What is your name?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)
                                                                        
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "Greetings," $NAME
else
echo "User canceled input."
fi

echo "(Exit status: $exitstatus)"

#Part 2 - Query for the user's country

COUNTRY=$(whiptail --inputbox "What country do you live in?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)
                                                                       
exitstatus=$?
if [ $exitstatus = 0 ]; then
echo "I hope the weather is nice in" $COUNTRY
else
echo "User canceled input."
fi

echo "(Exit status: $exitstatus)"

この例では、--inputboxを使用していることに注意してください。 --msgboxの代わりに 。 whiptailを整理しました if/thenステートメントとしてコーディングします。

8 および39 値はダイアログボックスのサイズを定義します。独自のラボ環境でフォローしている場合は、 39を置き換えます 10 、変更を保存して、whiptailを再実行します コード。ダイアログボックスが小さすぎて役に立たないことがわかります。 タブを使用します キーを押してキャンセルを選択します 、次にサイズ値を 39に戻します 10から 。

ファイルを実行可能にするための権限を設定し、./を使用することを忘れないでください 現在の場所から実行します。

[damon@localhost ~]$ chmod 777 query.sh 
[damon@localhost ~]$ ./query.sh 

ダイアログボックスを完了した後の結果を次に示します。

メッセージボックスを介してユーザーに情報を提供し、入力ボックスを介してユーザーから情報を収集しました。次に、ユーザーにいくつかの追加の質問をします。

はい/いいえのダイアログボックスを作成します

ユーザーに質問するためのバリエーションはたくさんあります。この場合、単純なyes / noクエリを使用して、今日が火曜日かどうかを確認します。これを行うには、tuesday.shという名前のテストファイルを作成します。 次のコンテンツをその中に配置します:

if (whiptail --title "Is it Tuesday?" --yesno "Is today Tuesday?" 8 78); then
    echo "Happy Tuesday, exit status was $?."
else
    echo "Maybe it will be Tuesday tomorrow, exit status was $?."

fi

--inputboxの代わりに または--msgbox 前の例から、--yesnoを使用しました オプション。前の例と同様に、これはif/thenクエリとして編成されています。

結果の出力は次のとおりです。

--yesno ボックスオプションを使用すると、[はい]フィールドと[いいえ]フィールドの内容を編集することもできます。次に例を示します:

if (whiptail --title "Is it Tuesday?" --yesno "Is today Tuesday?" 8 78 --no-button "Not Tuesday" --yes-button "Tuesday"); then
echo "Happy Tuesday, exit status was $?."
else
echo "Maybe it will be Tuesday tomorrow, exit status was $?."
fi

この例の唯一の変更は、2つの--no-buttonの追加です。 および--yes-button オプションとそれに対応するテキスト(この場合、「火曜日ではない」と「火曜日」)。

結果のダイアログボックスは次のようになります。

最後に一つだけ。 Whiptailは、ユーザーの入力をstderrに送信します。はい、あなたはそれを正しく読んでいます:stderr、そして

stdoutではありません。これは、ユーザーの入力を取得してスクリプトで使用する場所です。この問題を回避する方法は、リダイレクトを逆にして、ユーザーの入力がstdoutに送られるようにすることです。

これを行うためのフレーズは次のとおりです。

3>&1 1>&2 2>&3

説明:

  • 1(stdout)を指すファイル記述子3を作成します
  • 1(stdout)を2(stderr)にリダイレクトします
  • 2(stderr)をstdoutを指す3ファイル記述子にリダイレクトします

上記の--inputboxのスクリプトスニペットでどのように表示されるかを次に示します。 例:

NAME=$(whiptail --inputbox "What is your name?" 8 39 --title "Getting to know you" 3>&1 1>&2 2>&3)

[無料のチートシート:Kubernetes用語集]

まとめ

いくつかの基本的な例を示しましたが、whiptail もっとたくさんのことができます。私はあなたを動かすのに十分なものをここに提供しました、そしてオンラインで多くの役に立つチュートリアルがあります。スクリプトには、ユーザーが入力した入力を消費する方法が必要になります。インタラクティブスクリプトを確認して、TUIダイアログボックスを追加することが役立つかどうかを判断することをお勧めします。

whiptailで利用できる主なボックスオプションのリストは次のとおりです :

  • -タイトル
  • -インフォボックス
  • -msgbox
  • -はいいいえ
  • -inputbox
  • -passwordbox
  • -メニュー
  • -テキストボックス
  • -チェックリスト
  • -ラジオリスト
  • -ゲージ

Linux
  1. サブドメインを作成して使用する方法

  2. GPartedを使用してパーティションを簡単に作成およびサイズ変更する方法

  3. Linuxでエイリアスを作成してエイリアスコマンドを使用する方法

  1. シェルスクリプトで入力を使用する方法

  2. rsyslogを使用してLinuxログ集約サーバーを作成する方法

  3. シェル スクリプトとはシェル スクリプトの作成方法

  1. mkdirコマンドを使用してLinuxディレクトリを作成または作成する方法

  2. Ansibleロールを作成してPlaybookで使用する方法

  3. Systemdは/etc/init.dスクリプトをどのように使用しますか?