Linuxでシェルスクリプトを使用してコマンドを実行する方法
イントロダクション
シェルは、ユーザーがシステムとやり取りするためのコマンドラインインタプリタです。ユーザーからの入力を受け取り、出力を表示する役割を担当しています。
シェルスクリプトは、実行する順序で書かれた一連のコマンドです。これらのスクリプトには、関数、ループ、コマンド、変数を含めることができます。スクリプトは、複雑な一連のコマンドや繰り返しタスクを簡素化するために役立ちます。
この記事では、Linuxのコマンドラインでシェルスクリプトを作成して実行する方法について学びます。
前提条件
このチュートリアルを完了するためには、以下が必要です:
- Familiarity with using the terminal.
- Familiarity with a text editor.
- Familiarity with commands like chmod, mkdir, and cd.
始める
シェルスクリプトは、.shという拡張子で保存する必要があります。
ファイルは、シェルスクリプトに使用するインタープリタをLinuxシステムに伝えるために、シェバングライン(#!)で始める必要があります。
bashをサポートする環境であれば、次のコマンドを使用してください。
#!/bin/bash
シェルをサポートする環境では、以下を使用してください。
#!/bin/sh
このチュートリアルでは、環境がbashをサポートしていることを前提とします。
シェルスクリプトには、可読性を高めるためにコメントを入れることもできます。良いスクリプトは、読者がスクリプトが何をしているかを正確に理解し、設計上の選択の理由も分かるようなコメントを必ず含んでいます。
基本的なシェルスクリプトの作成と実行
viエディタ、catコマンド、またはテキストエディタを使用してシェルスクリプトを作成することができます。
このチュートリアルでは、viを使用してシェルスクリプトを作成する方法について学びます。
- vi basic_script.sh
これによって、viエディタが起動されてbasic_script.shファイルが作成されます。
その後、キーボードで「i」を押してINSERTモードを開始します。以下の行を追加してください。
#!/bin/bash
whoami
date
このスクリプトは、whoamiとdateというコマンドを実行します。whoamiはアクティブなユーザー名を表示します。dateは現在のシステムのタイムスタンプを表示します。
Viエディタを終了して保存するには、次の手順を実行します。
- Press ESC
- Type : (colon character)
- Type wq
- Press ENTER
最後に、次のコマンドでスクリプトを実行できます。
- bash basic_script.sh
以下のような出力が得られる可能性があります。
root Fri Jun 19 16:59:48 UTC 2020
出力の最初の行は、whoamiコマンドに対応します。出力の2行目は、dateコマンドに対応します。
bashを指定せずにスクリプトを実行することもできます。
- ./basic_script.sh
この方法でファイルを実行する場合、ユーザーは最初に許可を与える必要があるかもしれません。しかし、bashで実行すると、この許可は必要ありません。
~bash: ./basic_script.sh: Permission denied
ファイルの読み取り権限だけで、bashファイル名コマンドを実行できます。
./ファイル名コマンドは実行可能なファイルとして実行し、実行許可が必要です。
スクリプトを実行するには、パーミッションを更新する必要があります。
- chmod +x basic_script.sh
このコマンドは、chmodを適用し、現在のユーザーにx(実行可能)の権限を与えます。
シェルスクリプトで変数を使用すること
スクリプトにはユーザー定義変数を含めることができます。実際、スクリプトが大きくなるほど、明確に定義され、自己説明的な名前を持つ変数を持つことが不可欠です。
脚本に以下の行を追加してください。
#!/bin/bash
# This is a comment
# defining a variable
GREETINGS="Hello! How are you"
echo $GREETINGS
こんにちは、変数GREETINGSが定義され、後で$(ドル記号)を使用してアクセスされます。変数に値が割り当てられる行にはスペースがないはずです。
スクリプトを実行してください。
- bash basic_script.sh
このコードは、変数に割り当てられた値を表示します。
Hello! How are you
スクリプトが実行されると、GREETINGSが定義され、アクセスされます。
コマンドラインからの入力の読み取り
シェルスクリプトはコマンドラインからの入力を受け入れる機能を使ってインタラクティブに作成できます。readコマンドを使用して、コマンドラインの入力を変数に保存することができます。
以下の行をスクリプトに追加してください。 (I’ll add the following lines to the script.)
#!/bin/bash
# This is a comment
# defining a variable
echo "What is your name?"
# reading input
read NAME
# defining a variable
GREETINGS="Hello! How are you"
echo $NAME $GREETINGS
コマンドラインからの入力を受け取るために変数NAMEが使用されています。このスクリプトは、ユーザーがNAMEに入力を提供するのを待ってから、NAMEとGREETINGSを出力します。
What is your name? Sammy Sammy Hello! How are you
この例では、ユーザーがプロンプトに名前「サミー」を入力しました。
関数の定義
ユーザーはスクリプト内で独自の関数を定義することができます。これらの関数は複数の引数を受け取ることができます。
以下の行をスクリプトに追加してください。 (I used the imperative form to paraphrase the sentence in a more natural and concise manner.)
#!/bin/bash
#This is a comment
# defining a variable
echo "What is the name of the directory you want to create?"
# reading input
read NAME
echo "Creating $NAME ..."
mkcd ()
{
mkdir "$NAME"
cd "$NAME"
}
mkcd
echo "You are now in $NAME"
このスクリプトは、ユーザーにディレクトリ名を入力するように要求します。そして、mkdirを使用してディレクトリを作成し、cdコマンドでそのディレクトリに移動します。
What is the name of the directory you want to create? test_dir Creating test_dir … You are now in test_dir
この例では、ユーザーが入力として”test_dir”をプロンプトに提供しています。その後、スクリプトはその名前で新しいディレクトリを作成します。最後に、スクリプトはユーザーの現在の作業ディレクトリを”test_dir”に変更します。
結論
この記事では、Linuxのコマンドラインでシェルスクリプトを作成して実行する方法について学びました。
頻繁に行ういくつかの繰り返しや時間のかかる作業を考えてみてください。それらに効果をもたらすスクリプトを活用することができます。
コマンドラインでの学習を、if-else、配列、引数を使って続けてください。