ウェブサイト検索

Bashスクリプティング:スクリプト内からコマンドを実行する


Bash スクリプトとは、本質的に、何かを達成するために連結された一連の Linux コマンドのことです。あなたのコードによって、スクリプト内でコマンドを実行するためのいくつかの異なる方法があります。

このチュートリアルでは、Linux システム上で Bash スクリプト内からコマンドを実行するいくつかの方法について説明します。

このチュートリアルでは、あなたは学びます:

  • Bashスクリプトでコマンドを実行する方法
  • 実行したコマンドの出力を変数に格納する方法

Bashスクリプト:スクリプト内からコマンドを実行する例

以下では、Bashスクリプト内からコマンドを実行する方法を確認するために、いくつかの異なるシナリオを見ていきます。下のすべての例を確認して、方法を学びましょう。

  1. 通常、Bashスクリプト内でコマンドを実行するために特別なことをする必要はありません。自分のターミナルと同じようにコマンドを書くだけです。次の例を見てください。ここでは、Bashスクリプト内で3つのコマンド - echo、uptime、およびwho - を実行しています。

    #!/bin/bash
    
    echo "Here we are executing three commands."
    uptime
    who

    そして、スクリプトを実行したときの見た目は次のようになります:

    
    ./test.sh
    Here we are executing three commands.
     23:39:36 up 1 min,  1 user,  load average: 3.36, 1.37, 0.51
    linuxconfig :0           2022-02-23 23:38 (:0)
    

    これは、単にターミナルにコマンドを入力するのと何ら変わりません。

    
    echo "Here we are executing three commands."
    Here we are executing three commands.
    uptime
     23:40:05 up 2 min,  1 user,  load average: 2.68, 1.39, 0.54
    who
    linuxconfig :0           2022-02-23 23:38 (:0)
    
  2. はい、それは十分に簡単です。しかし、別のシナリオを見てみましょう。もしコマンドの結果をBashスクリプトの変数に格納する必要がある場合、$( )構文を使ってサブシェルを利用し、結果を変数に格納します。これがその方法です。

    #!/bin/bash
    
    var=$(date)
    
    echo $var

    そして、スクリプトを実行したときの見た目は次のようになります:

    
    ./test.sh 
    Wed 23 Feb 2022 11:43:18 PM EST
    

    ここで起こっていることは、Bashスクリプト内でdateコマンドを実行していますが、結果をすぐに表示するのではなく、var変数に格納しています。スクリプトの最後で、var変数を表示して、日付がその中に格納されていることを確認します。

    知っていましたか?
    コマンドを実行するためにサブシェル $ ( ) の代わりにバックティック ` ` を使用することもできます。しかし、バックティックの方法は古く、コマンドのネストをサポートしていないため、今後のすべてのBashスクリプトではサブシェルを使用することをお勧めします。

  3. サブシェルは、echo コマンド内でも使用できます。以下に、通常の方法の例を示します。

    #!/bin/bash
    
    echo "The current date is $(date)"

    そして、スクリプトを実行したときの見た目は次のようになります:

    
    ./test.sh 
    The current date is Wed 23 Feb 2022 11:48:06 PM EST
    

    この結果を得るためのより簡単で良い方法がありますが、これはあくまでサブシェルの動作を理解するための例です。

締めくくりの考え

このチュートリアルでは、LinuxのBashスクリプト内でコマンドを実行する方法を見ました。通常、コマンドの実行はターミナルでの実行と同じように動作しますが、場合によってはコマンドの結果を変数に保存するためにサブシェルを使用する必要があります。

関連記事: