BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

Bashスクリプトをテストする

このシリーズの最初の記事では、最初の非常に小さい1行のBashスクリプトを作成し、シェルスクリプトを作成する理由を探りました。 2番目の記事では、他のBashプログラムの開始点となる非常に単純なテンプレートの作成を開始し、テストを開始しました。 3番目の記事では、簡単なヘルプ関数を作成して使用し、関数の使用方法と、 -hなどのコマンドラインオプションの処理方法について学習しました。 。

このシリーズの4番目で最後の記事では、変数とそれらの初期化、およびプログラムが適切な条件下で実行されることを確認するための健全性テストを行う方法について説明します。このシリーズの目的は、将来のBashプログラミングプロジェクトのテンプレートに使用される作業コードを作成することであることを忘れないでください。アイデアは、共通の要素をテンプレートですでに利用できるようにすることで、新しいプログラミングプロジェクトを簡単に開始できるようにすることです。

変数

Bashシェルは、すべてのプログラミング言語と同様に、変数を処理できます。変数は、ある種の値を含むメモリ内の特定の場所を参照する記号名です。変数の値は変更可能です。つまり、変数です。変数の使用に慣れていない場合は、私の記事 Bashでプログラミングする方法:構文とツールをお読みください。 先に進む前に。

終わり?すごい!次に、変数を使用する際のいくつかの優れた方法を見てみましょう。

スクリプトで使用されるすべての変数に常に初期値を設定します。これは、プロシージャの直後、メインプログラム本体の最初の部分として、オプションを処理する前のテンプレートスクリプトで見つけることができます。各変数を適切な値で初期化すると、比較または数学演算で初期化されていない変数で発生する可能性のあるエラーを防ぐことができます。この変数のリストを1つの場所に配置すると、スクリプトに含まれるはずのすべての変数とその初期値を確認できます。

小さなスクリプトには、 $ optionという1つの変数しかありません。 、 これまでのところ。図のように次の行を挿入して設定します。

################################################################################
################################################################################
# Main program                                                                 #
################################################################################
################################################################################
# Initialize variables
option=""
################################################################################
# Process the input options. Add options as needed.                            #
################################################################################

これをテストして、すべてが正常に機能し、この変更の結果として何も壊れていないことを確認します。

定数

定数も変数です—少なくともそうあるべきです。ハードコードされた値の代わりに、コマンドラインインターフェイス(CLI)プログラムで可能な限り変数を使用してください。特定の値(ディレクトリ名、ファイル名、テキスト文字列など)を1回だけ使用すると思われる場合でも、変数を作成して、ハードコードされた名前を配置した場所で使用します。

たとえば、プログラムの本体の一部として出力されるメッセージは、文字列リテラル echo "Hello world!"です。 。それを変数に変更します。まず、変数初期化セクションに次のステートメントを追加します。

Msg="Hello world!"

そして、プログラムの最後の行を次のように変更します:

echo "Hello world!"

宛先:

echo "$Msg"

結果をテストします。

健全性チェック

健全性チェックは、プログラムが正しく機能するために真である必要がある条件のテストです。たとえば、プログラムはrootユーザーとして実行する必要があります。または、そのディストリビューションの特定のディストリビューションとリリースで実行する必要があります。 rootのチェックを追加します 単純なプログラムテンプレートで実行中のユーザーとして。

プログラムは起動したユーザーとして実行されるため、rootユーザーがプログラムを実行していることをテストするのは簡単です。

id コマンドを使用して、プログラムが実行されている数値ユーザーID(UID)を判別できます。オプションなしで使用すると、いくつかの情報が提供されます。

[student@testvm1 ~]$ id
uid=1001(student) gid=1001(student) groups=1001(student),5000(dev)

-uを使用する オプションは、Bashプログラムで簡単に使用できるユーザーのUIDのみを返します。

[student@testvm1 ~]$ id -u
1001
[student@testvm1 ~]$

プログラムに以下の関数を追加します。ヘルプ手順の後に追加しましたが、手順セクションのどこにでも配置できます。ロジックは、UIDがゼロ(常にrootユーザーのUID)でない場合、プログラムは終了するというものです。

################################################################################
# Check for root.                                                              #
################################################################################
CheckRoot()
{
   if [ `id -u` != 0 ]
   then
      echo "ERROR: You must be root user to run this program"
      exit
   fi  
}

次に、 CheckRootへの呼び出しを追加します 変数の初期化の直前のプロシージャ。これをテストし、最初に学生ユーザーとしてプログラムを実行します:

[student@testvm1 ~]$ ./hello 
ERROR: You must be root user to run this program
[student@testvm1 ~]$

次にrootユーザーとして:

[root@testvm1 student]# ./hello 
Hello world!
[root@testvm1 student]#

この特定の健全性テストが常に必要になるとは限らないため、 CheckRootへの呼び出しをコメントアウトしてください。 ただし、すべてのコードはテンプレートに残しておきます。このように、将来のプログラムでそのコードを使用するために必要なのは、呼び出しのコメントを解除することだけです。

コード

上記の変更を行うと、コードは次のようになります。

#!/usr/bin/bash
################################################################################
#                              scriptTemplate                                  #
#                                                                              #
# Use this template as the beginning of a new program. Place a short           #
# description of the script here.                                              #
#                                                                              #
# Change History                                                               #
# 11/11/2019  David Both    Original code. This is a template for creating     #
#                           new Bash shell scripts.                            #
#                           Add new history entries as needed.                 #
#                                                                              #
#                                                                              #
################################################################################
################################################################################
################################################################################
#                                                                              #
#  Copyright (C) 2007, 2019 David Both                                         #
#  [email protected]                                                        #
#                                                                              #
#  This program is free software; you can redistribute it and/or modify        #
#  it under the terms of the GNU General Public License as published by        #
#  the Free Software Foundation; either version 2 of the License, or           #
#  (at your option) any later version.                                         #
#                                                                              #
#  This program is distributed in the hope that it will be useful,             #
#  but WITHOUT ANY WARRANTY; without even the implied warranty of              #
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
#  GNU General Public License for more details.                                #
#                                                                              #
#  You should have received a copy of the GNU General Public License           #
#  along with this program; if not, write to the Free Software                 #
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   #
#                                                                              #
################################################################################
################################################################################
################################################################################

################################################################################
# Help                                                                         #
################################################################################
Help()
{
   # Display Help
   echo "Add description of the script functions here."
   echo
   echo "Syntax: scriptTemplate [-g|h|v|V]"
   echo "options:"
   echo "g     Print the GPL license notification."
   echo "h     Print this Help."
   echo "v     Verbose mode."
   echo "V     Print software version and exit."
   echo
}

################################################################################
# Check for root.                                                              #
################################################################################
CheckRoot()
{
   # If we are not running as root we exit the program
   if [ `id -u` != 0 ]
   then
      echo "ERROR: You must be root user to run this program"
      exit
   fi
}

################################################################################
################################################################################
# Main program                                                                 #
################################################################################
################################################################################

################################################################################
# Sanity checks                                                                #
################################################################################
# Are we rnning as root?
# CheckRoot

# Initialize variables
option=""
Msg="Hello world!"
################################################################################
# Process the input options. Add options as needed.                            #
################################################################################
# Get the options
while getopts ":h" option; do
   case $option in
      h) # display Help
         Help
         exit;;
     \?) # incorrect option
         echo "Error: Invalid option"
         exit;;
   esac
done

echo "$Msg"
最後の演習

コード内のヘルプ関数が、コード内にない機能を参照していることに気付いたかもしれません。最後の演習として、作成したコードテンプレートにこれらの関数を追加する方法を理解します。

概要

この記事では、プログラムがrootとして実行されているかどうかの健全性テストを実行するためのいくつかの関数を作成しました。プログラムはもう少し複雑になっているため、テストはますます重要になり、完了するにはより多くのテストパスが必要になります。

このシリーズでは、非常に最小限のBashプログラムと、一度に少しずつスクリプトを作成する方法について説明しました。結果は、他のより有用なBashスクリプトの開始点となり、新しいスクリプトを簡単に開始できるようにする有用な要素を含む単純なテンプレートになります。

これで、次のようなアイデアが得られます。コンパイルされたプログラムが必要であり、非常に重要なニーズを満たします。しかし、システム管理者にとっては、常により良い方法があります。ジョブの自動化のニーズを満たすために、常にシェルスクリプトを使用してください。シェルスクリプトは開いています。それらの内容と目的はわかっています。それらは、さまざまな要件を満たすように簡単に変更できます。シェルスクリプトでは実行できない、sysadminロールで実行する必要のあることは何も見つかりませんでした。

このシリーズでこれまでに作成したものは、ほんの始まりに過ぎません。より多くのBashプログラムを作成すると、頻繁に使用するコードが増え、プログラムテンプレートに含める必要があります。

リソース
  • Bashでプログラミングする方法:構文とツール
  • Bashでプログラミングする方法:論理演算子とシェル拡張
  • Bashでプログラミングする方法:ループ

このシリーズの記事の一部は、David Bothの3部構成のLinux自習コース、Linuxの使用と管理-ZerotoSysAdminの第2巻第10章に基づいています。


  1. 星空を眺めるときは、この便利なBashスクリプトを使用してください

    Linuxがサーバーや開発者によって使用されていることについてよく話しますが、天文学を含む他の多くの分野でも使用されています。 Linuxで利用できる天文学ツールはたくさんあります。たとえば、スカイマップ、星図、望遠鏡を制御するための望遠鏡ドライブシステムへのインターフェイスなどです。しかし、天文学者にとっての1つの課題は、暗闇の中で目を動かしながらコンピューターを使用することです。 夜に野外で運動するとき、天文学者は彼らの暗視を維持する必要があります。人間の目が完全に拡張して低照度レベルに調整されるまで最大30分かかる場合があります。また、電話やラップトップを通常の色と明るさのレベルで

  2. PC 上の不要なプログラムをアンインストールする方法

    すっきりと整理された PC は、雑然とした PC よりも常に優れています。パフォーマンスを向上させ、パフォーマンスとセキュリティを維持するために、常に最適化する必要があります。不要なプログラムのクラスターにより、マシンの動作が遅くなり、ハードディスク スペースが詰まる。 したがって、清掃は必須ですが、簡単な作業ではありません。通常、不要なプログラムをアンインストールしようとすると、痕跡が残るか、さまざまな理由でアンインストールされません。 では、そのような状況であなたは何をしますか?一緒に、不要なプログラムを完全にアンインストールするさまざまな方法をチェックしてください。 ソフトウェ