Linux でシェル スクリプトを作成する方法

Linux でシェル スクリプトを作成する方法

シェルはオペレーティング システムのインターフェイスです。ユーザーからのコマンドを受け取り、それをオペレーティング システムに解釈します。多数のコマンドをまとめて実行したい場合は、シェル スクリプトを作成することで実行できます。シェル スクリプトは、バックアップの作成などのタスクを定期的に実行する必要がある場合に非常に便利です。これらのコマンドをリストし、単一のスクリプトですべてを実行できます。シェル スクリプトを作成して Linux 上で実行する方法を見てみましょう。

シェルスクリプトの作成

Linux マシンにログインしてターミナルを開き、シェル スクリプトを保存するフォルダーに移動します。シェル スクリプトは拡張子 .sh で終わります。最初のシェル スクリプトを作成しましょう。入力してください

touch script.sh 

ここで、このスクリプト ファイルはデフォルトでは実行可能ではないため、このファイルに実行許可を与える必要があります。入力してください

chmod +x script.sh 

次に、このシェル スクリプトにいくつかのコマンドを追加します。任意のテキスト エディター (コマンドライン ベースまたは GUI ベース) でこのシェル スクリプトを開き、いくつかのコマンドを追加します。ナノを使用していきます。入力してください

nano script.sh 

このシェル スクリプトをテストするには、次のコマンドを追加します。

echo This is my first shell script touch testfile ls echo End of my shell script 

変更を保存し、次のように入力してシェル スクリプトを実行します。

./script.sh 

上記の手順のスクリーンショット

指定されたすべてのコマンドが実行されたことがわかります。

シェルスクリプト内のコメント

シェル スクリプト内の # で始まる行はコメントとして扱われ、この記事で後ほど説明するシバン行を除き、実行中にシェルによって無視されます。例を見てみましょう。以下の内容のシェルスクリプトが作成されます。

# This is a comment echo Testing comments in shell script 

シェルスクリプト内のコメント

ご覧のとおり、コメントは無視されます。

シェルスクリプト内の変数

はい、シェル スクリプトは変数の使用をサポートしているため、宣言時に変数の型を定義する必要はありません。変数には次の 2 種類があります。

  • システム定義変数
  • ユーザー定義変数。

システム定義変数は環境変数とも呼ばれ、通常は大文字で表記されます。 printenv コマンドを使用すると、現在のすべての環境変数を表示できます。ユーザー定義変数はユーザーによって設定され、スクリプトの実行中にのみ存在します。名前を入力し、= 記号を使用して値を割り当てるだけで変数を定義でき、変数名の前に $ を追加することで変数にアクセスできます。変数は次のスクリプト例で示されています。

# Accessing an Environment Variable echo $USER # Creating and accessing User defined Variable variable_name='Geeksforgeeks' echo $variable_name 

シェルスクリプト内の変数

シェルスクリプトインタープリタの定義

Linux では、bourne シェル (sh)、Korn シェル (ksh)、GNU Bourne-Again Shell (bash) など、多くのシェルを使用できます。 sh シェル用に作成されたスクリプトはシェル スクリプトと呼ばれ、ksh シェルと bash シェルの両方で解釈できます。 ksh と Bash はオリジナルの sh シェルの改良版であり、sh よりも多くの機能を備えています。通常、Bash はほとんどの Linux ディストリビューションのデフォルトのシェルであり、bash シェル専用に作成されたスクリプトは bash スクリプトと呼ばれます。

スクリプトが別のシェル端末から実行される場合でも、スクリプトが使用するシェルを指定できます。これを行うには、#! を追加します。スクリプト ファイルの先頭に、選択したシェルの絶対パスが続きます。 bash をインタープリターとして指定するには、シェル スクリプトの先頭に次の行を追加します。

#!/bin/bash 

このラインはシバンラインと呼ばれます。

注記: これは、システムに bash がインストールされている場合にのみ機能します。

比較演算子

シェルスクリプトで 2 つの変数を比較できます。意思決定を行うためにこれらの比較を行います。その方法についてはこの記事の後半で説明しますが、その前に、比較演算子のリストをいくつか示します。

整数比較

オペレーター 説明
-eq に等しい
- は に等しくありません
-gt より大きい
-ge 以上です
-lt よりも少ない
- 以下である

文字列の比較

オペレーター 説明
== に等しい
!= に等しくありません
< より小さい (ASCII アルファベット順)
> より大きい (ASCII アルファベット順)

[ ] 構造に入力するときにエスケープする必要があるため、前に を追加します。では、これらがどこで使われているか見てみましょう。

条件文

条件ステートメントは、特定の条件が満たされた場合にのみコード ブロックを実行するために使用されます。シェル スクリプトは条件ステートメントの使用をサポートしています。条件を確認するには比較演算子を使用します。いくつかの条件文を見てみましょう。

If ステートメント

条件をチェックし、条件が true の場合はコマンドを実行します。

構文

if [ condition ] then #statements fi 

例を見てみましょう。

#!/bin/sh x=10 y=11 if [ $x -ne $y ] then echo 'Not equal' fi 

.if ステートメント

If-else ステートメント

if-else ステートメントでは、条件が満たされない場合に実行する一連のコマンドを指定できます。

構文

if [ condition ] then #set of statements if the condition is true else #set of statements if the condition is false fi 

例を見てみましょう

#!/Syntaxbin/sh x=10 y=10 if [ $x -ne $y ] then echo 'Not equal' else echo 'They are equal' fi 

.if-else ステートメント

他にも条件文がありますので、それについて読んでください。 ここ

注記: チェックする条件を指定するときに [ の後ろと ] の前にスペースを入力しないとエラーが発生します。

ループ

ループを使用すると、特定の条件が満たされるまで一連のコマンドを繰り返し実行できます。いくつかのループを見てみましょう。

Whileループ

条件が true の場合、指定されたコマンドの実行を開始し、条件が false になるまでコマンドを繰り返します。

構文

while [ condition ] do #set of statements done 

例を見てみましょう。

#!/bin/sh x=2 while [ $x -lt 6 ] do echo $x x=`expr $x + 1` done 

Whileループ

expr ステートメントを変数に割り当てるときは、expr ステートメントを ` ` で囲みます。 expr コマンドについては、ここで読むことができます。

forループ

for ループでは、変数は値のリストを反復し、反復する値がなくなると終了します。

構文

for var in val1 val2 val3 do #statements done 

例を見てみましょう。

#!/bin/sh for var in 2 4 5 8 do echo $var done 

forループ

ループについて詳しく読むことができます ここ

位置引数

位置引数は、スクリプトの実行中にシェル スクリプトに渡す引数または値です。これらは、変数 $0、$1、$2 … $9 によってアクセスされます。さらに、${10}、${11} などによって参照されます。 $# には渡された引数の数が格納され、$0 にはスクリプトの名前が格納されます。これをすべて理解するために例を見てみましょう。

#!/bin/sh echo 'No of arguments is $#' echo 'Name of the script is $0' echo 'First argument is $1' echo 'Second argument is $2' 

引数を渡すには、以下に示すようにターミナルでスクリプト名の後に引数を入力するだけです。

位置引数

コマンドの出力を保存する

コマンドの出力をシェル スクリプトの変数内に保存できます。それには 2 つの方法があります。

構文

#Syntax 1 var=$(a valid linux command) #Syntax 2 var2=`a valid linux command` 

例を見てみましょう。

#!/bin/sh b=$(pwd) c=`pwd` echo $b echo $c d=$(ls /bin | grep bash) echo $d 

コマンドの出力を保存する

シェルコマンドの終了コード

コマンドが終了して制御を親プロセスに戻すときは、0 ~ 255 の終了コードが返されます。終了コード 0 はコマンドが成功したことを意味し、その他の終了コードはコマンドが失敗したことを意味します。コマンドの実行後に $? にアクセスすると、終了コードを表示できます。変数。以下の例を参照してください。

シェルコマンドの終了コード

シェル スクリプトの終了コードを手動で設定できます。これを条件ステートメントとともに使用して、スクリプトの目的が達成されたかどうかを伝えることができます。

#!/bin/sh read x if [ $x -ne 10 ] then echo failed exit 1 else echo passed exit 0 fi 

シェルコマンドの終了コード