Bashスクリプティングは、Linuxコンピュータをプログラミングするための最も人気のある、アクセスしやすい方法の1つです。これらのシンプルなスクリプトの例は、プロセスを理解し、Bashプログラミングの基本を学ぶのに役立ちます。
1. BashでHello Worldを印刷する方法
Hello Worldの例は、任意のプログラミング言語について学ぶのに最適な方法であり、Bashも例外ではありません。
Bashを使用して「Hello World」を印刷する方法は次のとおりです。
- テキストエディタを開き、次のコード行を含む新しいファイルの編集を開始します。
- Bashスクリプトの最初の行は常に次のようにする必要があります。
#!/bin/bash
Shebangコマンド(#!/bin/bash)は、シェルがスクリプトの実行方法を決定するために使用する必要があるため、不可欠です。この場合、Bashインタープリタを使用します。
- #記号で始まる行はすべてコメントです。shebang行は特別なケースですが、独自のコメントを使用してコードを説明できます。2行目にコメントを追加します。例:
# Print some text from a bash script
- echoコマンドを使用して標準出力に印刷できます。その後に印刷する値を続けます。3行目に次の行を追加します。
echo "Hello World"
- スクリプトを保存します。好ましくは.sh拡張子で保存します。例:hello_world.sh。拡張子は必須ではありませんが、守っておくと役立つ慣習です。
- スクリプトを実行するには、ファイルを編集可能にします。chmod(「モード変更」)コマンドを+x(「実行可能」)引数およびシェルスクリプトの名前と一緒に使用します。
chmod +x hello_world.sh
- このコマンドを使用して、ディレクトリ内からスクリプトを実行します。
./hello_world.sh
- スクリプトを実行すると、ターミナルに「Hello World」というテキストが表示されます。
2.入力を取得してディレクトリを作成する
スクリプトから、通常コマンドラインで実行する可能性のあるプログラムを実行できます。たとえば、mkdirコマンドを使用してスクリプトから新しいディレクトリを作成できます。
- 以前と同じshebang行から始めます。
#!/bin/bash
- 以前のようにechoコマンドを使用して、ユーザーにディレクトリの名前を尋ねます。
echo "Enter new directory name:"
- 組み込みのreadコマンドを使用してユーザー入力を取得します。単一の引数は、シェルが入力を格納する変数の名前を指定します。
read newdir
- 変数に格納されている値を使用する必要がある場合は、変数の名前にドル記号($)を付けます。入力変数の内容をmkdirコマンドの引数として渡して、新しいディレクトリを作成できます。
mkdir $newdir
- このスクリプトを実行すると、入力を求めるプロンプトが表示されます。有効なディレクトリ名を入力すると、スクリプトによって現在のディレクトリにディレクトリが作成されます。
3.コマンドライン引数を使用してディレクトリを作成する
対話形式で入力を取得する代わりに、ほとんどのLinuxコマンドは引数をサポートしています。プログラムを実行するときに引数を指定して、その動作を制御できます。
スクリプト内で、$1を使用して、最初の引数の値を含む特殊変数を参照できます。$2は2番目の引数を指し、以降も同様です。
- 前の例からmkdirコマンドを使用してディレクトリを作成します。ただし、今回は組み込み変数$1を使用します。
#!/bin/bash mkdir $1
- スクリプトを実行し、今回は新しいディレクトリの名前を引数として渡します。
./arg_dir.sh Test
引数をまったく指定せずにスクリプトを実行した場合に何が起こるか疑問に思うかもしれません。試して確認してください。「usage: mkdir」で始まるエラーメッセージが表示されます。
コマンドライン引数がない場合、$1の値は空になります。スクリプトがmkdirを呼び出すと、引数が渡されず、mkdirコマンドはそのエラーを返します。これを回避するには、自分で条件をチェックして、よりわかりやすいエラーを表示できます。
- いつものように、shebang行から始めます。
#!/bin/bash
- mkdirを呼び出す前に、最初の引数が空かどうかをチェックします(つまり、引数がない)。これは、条件に基づいてコードを実行するBashのifステートメントを使用して行うことができます。
if ["$1" = ""]; then
- 最初の引数が空の場合、エラーを印刷してスクリプトを終了します。
echo "Please provide a new directory name as the first argument" exit
- 少し奇妙な「fi」キーワード(「if」を逆にしたもの)は、Bashのifステートメントの終わりを示しています。
fi
- 引数が存在する場合を処理するために、スクリプトは以前のように続行できます。
mkdir $1
この新しいバージョンのスクリプトを実行すると、引数を忘れた場合にメッセージが表示されます。
4. Bash関数を使用してファイルを削除する
同じコードを繰り返す必要がある場合は、関数をラップすることを検討してください。そうすれば、必要なときにいつでもその関数を呼び出すことができます。
次に、指定されたファイルを削除する関数の例を示します。
- shebang行から始めます。
#!/bin/bash
- 関数名を定義し、その後に空の括弧を記述し、中括弧内にコマンドを記述します。
del_file() { echo "deleting $1" rm $1 }
その後、関数呼び出しを行い、削除するファイルの名前を渡します。del_file test.txt
関数を呼び出すと、実行する最後のコマンドの終了ステータスで特別な$?値が設定されます。終了ステータスはエラーチェックに役立ちます。この例では、rmコマンドが成功したかどうかをテストできます。
if [ $? -ne 0 ]; then echo "Sorry, could not delete the file" fi
5. 算術計算のための基本的な電卓を作成する
この最後の例では、非常に基本的な電卓を示します。実行すると、2つの値を入力し、それらに対して実行する算術演算を選択します。
calc.shのコードを次に示します。
#!/bin/bash# Take operands as inputecho "Enter first number: "read aecho "Enter second number: "read b# Input type of operationecho "Enter Arithmetic Operation Choice :"echo "1. Addition"echo "2. Subtraction"echo "3. Multiplication"echo "4. Division"read choice# calculator operationscase $choice in1)result=echo $a + $b | bc;;2)result=echo $a - $b | bc;;3)result=echo $a \* $b | bc;;4)result=echo "scale=2; $a / $b" | bc;;esacecho "Result: $result"
他の言語のswitch文に相当するBashのcase ... esacの使用に注意してください。これにより、値(この場合はchoice変数)を複数の固定値と比較して、関連するコードを実行できます。
このスクリプトは、各計算を実行するためにbcコマンドを使用します。
コメントする