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

5つの実用的な例を含むBashスクリプト入門チュートリアル

進行中の Unix Sed および Unix Awk シリーズと同様に、Bash スクリプトに関するいくつかの記事を投稿します。実用的な例ですべての bash スクリプト テクニックをカバーします。

シェルは、ユーザー コマンドを解釈するプログラムです。コマンドは、ユーザーが直接入力するか、シェル スクリプトと呼ばれるファイルから読み取るかのいずれかです。

ユーザーからの入力を直接読み取る場合、シェルは対話型シェルとして呼び出されます。

シェルは、ファイルからコマンドを読み取って実行するときに、非対話型シェルとして呼び出されます。この場合、シェルはスクリプト ファイルの各行を上から下に読み取り、ユーザーが直接入力したかのように各コマンドを実行します。

組み込みのシェル変数 $- の値を出力して、シェルがインタラクティブか非インタラクティブかを確認します。

# echo $-
himBH

注:シェルがインタラクティブな場合、$- 変数には「i」が含まれます .

Unix にはさまざまなシェルがあります。 Bourne シェル (sh)、Bourne again シェル (bash)、C シェル (csh)、Korn シェル (ksh)、Tenex C シェル (tcsh)。以下に示すように、 which または whereis unix コマンドを使用して、特定のシェルがどこにあるかを調べます。

# which bash
/bin/bash

# whereis bash
bash: /bin/bash /usr/share/man/man1/bash.1.gz

シェル名を入力して、シェルを切り替えることができます。たとえば、csh と入力して C シェルに切り替えます。

シェルスクリプトの作成と実行

例 1. Hello World Bash スクリプト

<オール>
  • お気に入りのエディターを使用して、次の 2 行をファイルに入力してスクリプトを作成します。
  • $ cat helloworld.sh
    #!/bin/bash
    echo Hello World
  • ファイルには任意の名前を付けることができます。ファイル名は、Unix 組み込みコマンドと同じであってはなりません。
  • スクリプトは常に、she-bang と呼ばれる 2 文字の「#!」で始まります。これは、ファイルがスクリプトであることを示しており、ファイルの最初の行の残りの部分で指定されたインタープリター (/bin/bash) を使用して実行する必要があります。
  • 以下に示すようにスクリプトを実行します。シェル スクリプトの実行に問題がある場合は、シェル スクリプトの実行に関するチュートリアルを参照してください
  • $ bash helloworld.sh
    Hello World
  • コマンド「bash helloworld.sh」を実行すると、非対話型シェルが起動し、ファイル名が引数として渡されます。
  • 最初の行は、スクリプトを実行するために生成するシェルをオペレーティング システムに指示します。
  • 上記の例では、スクリプトを解釈してコマンドを上から下に 1 つずつ実行する bash インタープリター
  • 次のようにすれば、先頭の「bash」なしでスクリプトを実行することもできます:
    • コマンド「chmod u+x helloworld.sh」を使用して、スクリプトの権限を変更して、あなた (ユーザー) がスクリプトを実行できるようにします。
    • スクリプトを含むディレクトリは、PATH 環境変数に含める必要があります。含まれていない場合は、スクリプトの絶対パスを指定してスクリプトを実行できます。
  • echo は、与えられた引数を単純に出力するコマンドです。また、変数の値を出力するためにも使用されます。
  • Bash スタートアップ ファイル

    .bash_profile および関連ファイルの記事の実行シーケンスで前述したように、bash が対話型シェルとして呼び出されると、最初に /etc/profile からコマンドを読み取って実行します。 /etc/profile が存在しない場合は、~/.bash_profile、~/.bash_login、~/.profile から指定された順序でコマンドを読み取り、実行します。シェルの起動時に –noprofile オプションを使用して、この動作を禁止することができます。

    通常、bash_profile は ~/.bashrc を実行します。必要に応じて、ウェルカム メッセージを表示できます。これは、最初にログインしたときにのみ実行されます。必要に応じて変数をエクスポートできます。また、シェルを開いたときに実行されて使用可能になるエイリアスを設定できます。ログイン シェルが終了すると、Bash はファイル ~/.bash_logout からコマンドを読み取り、実行します。

    例 2. ログイン時にウェルカム メッセージを出力する

    bash_profile ファイルに次の内容を入力します。ファイルが存在しない場合は、以下の内容のファイルを作成してください。

    $ cat ~/.bash_profile
    hname=`hostname`
    echo "Welcome on $hname."

    インタラクティブ シェルにログインすると、次のようなウェルカム メッセージが表示されます。

    login as: root
    root@dev-db's password:
    Welcome on dev-db

    例 3. システム関連情報の印刷

    インタラクティブ シェルにログインすると、サーバーにインストールされているカーネルの名前、bash のバージョン、稼働時間、およびサーバーの時間を表示できます。

    $cat ~/.bash_profile
    hname=`hostname`
    echo "Welcome on $hname."
    
    echo -e "Kernel Details: " `uname -smr`
    echo -e "`bash --version`"
    echo -ne "Uptime: "; uptime
    echo -ne "Server time : "; date

    インタラクティブ シェルを起動すると、次のようなメッセージが出力されます。

    login as: root
    root@dev-db's password:
    Welcome on dev-db
    
    Kernel Information:  Linux 2.6.18-128 x86_64
    GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
    Copyright (C) 2005 Free Software Foundation, Inc.
    Uptime:  11:24:01 up 21 days, 13:15,  3 users,  load average: 0.08, 0.18, 0.11
    Server time : Tue Feb 22 11:24:01 CET 2010

    例 4. 最後のログインの詳細を表示

    複数のユーザーが同じログインで同じマシンを使用している場合、最後のログインが行われたマシンやログイン時刻などの詳細が最も有用な詳細になります。この例では、対話型シェルの開始時に最後のログインの詳細を出力します。

    $ cat ~/.bash_profile
    hname=`hostname`
    echo "Welcome on $hname."
    
    
    echo -e "Kernel Details: " `uname -smr`
    echo -e "`bash --version`"
    echo -ne "Uptime: "; uptime
    echo -ne "Server time : "; date

    最終ログ | grep "ルート" | awk {'print "前回のログイン:"$3

    print "Last Login Date &Time:",$4,$5,$6,$7,$8,$9;}'
    起動時に、以下のようなメッセージが表示されます。

    login as: root
    root@dev-db's password:
    Welcome on dev-db
    
    
    Kernel Information:  Linux 2.6.18-128 x86_64
    GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
    Copyright (C) 2005 Free Software Foundation, Inc.
    Uptime:  11:24:01 up 21 days, 13:15,  3 users,  load average: 0.08, 0.18, 0.11
    Server time : Tue Feb 22 11:24:01 CET 2010

    最終ログイン元:sasikala-laptop

    最終ログイン日時:2010 年 2 月 22 日火曜日 11:24:01 +0100

    例 5. 起動時に変数をエクスポートしてエイリアスを設定する

    .bashrc および .bash_profile ファイルで使用する最も一般的なコマンドは、export および alias コマンドです。

    エイリアスは、あるテキストを別のテキストに置き換えるだけです。エイリアスを実行すると、入力した内容がエイリアスと等しいものに置き換えられます。たとえば、ls コマンドのエイリアスを設定してファイル/フォルダーを色付きで一覧表示する場合は、次のようにします。

    alias ls 'ls --color=tty'

    このコマンドを起動ファイルの 1 つに追加すると、ls コマンドを実行できます。このコマンドは、自動的に ls –color=tty コマンドに置き換えられます。

    Export コマンドは、環境変数を設定するために使用されます。システムやその他のアプリケーションでは、さまざまな環境変数が使用されます。これらは、任意のアプリケーション/スクリプトが読み取ることができるパラメーターを設定する方法にすぎません。 export コマンドを使用せずに変数を設定すると、その変数はその特定のプロセスに対してのみ存在します。

    以下の例では、環境変数 HISTSIZE をエクスポートしています。 # で始まる行はコメント行です。

    $ cat /etc/profile
    alias ls 'ls --color=tty'
    
    # Setup some environment variables.
    export HISTSIZE=1000
    
    PATH=$PATH:$HOME/bin:/usr/bin:/bin/usr:/sbin/etc
    
    export PATH
    
    export SVN_SH=${SVN_RSH-ssh}

    Linux
    1. どのシェルインタープリターがシバンなしでスクリプトを実行しますか?

    2. Awk チュートリアル:3 つの実践例で Awk 変数を理解する

    3. 15 の例を含む究極の Bash Array チュートリアル

    1. 例を使用してBashスクリプトを作成する方法

    2. 実際の例を含む Bash シェルの終了ステータスのチュートリアル

    3. 15 の便利な Bash シェル組み込みコマンド (例付き)

    1. 例を使用したBashヒアドキュメントチュートリアル

    2. シェルスクリプトパートI:bashスクリプトの開始

    3. 実用的な例を使用したBashForLoop