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

初心者向けのBashスクリプティングチュートリアル:概要、書き方、スクリプト例

ほとんどの仮想プライベートサーバーのようなLinuxオペレーティングシステムを使用したことがある場合は、bashについて聞いたことがあるかもしれません。さまざまなコマンドを読み取って実行するUnixシェルです。

複数のbashコマンドを実行する必要がある場合は、一度に1つずつ手動で実行する必要はありません。代わりに、これらのコマンドを実行するためのbash関数を含むスクリプトファイルを作成することができます。

複雑に聞こえるかもしれませんが、その基本を学ぶことで、bashスクリプト言語を理解し、ワークフローにどのように役立つかを理解できます。

この記事では、bashスクリプトのプロセスについて説明します。 bashコマンドからLinux端末でのbashプログラムの実行まですべてを説明します。

Bashとは何ですか?

Bash、 Bourne-Again Shellの略 は、Unixシェルおよびコマンド言語インタプリタです。シェルコマンドを読み取り、オペレーティングシステムと対話してそれらを実行します。

bashシェルスクリプトを完全に理解するには、シェルという2つの概念を知っている必要があります。 およびスクリプト

シェルは、コマンドを使用してオペレーティングシステムと対話するマクロプロセッサです。これは、コンピューターで情報を取得、処理、および保存できることを意味します。

一方、スクリプトは、テキストエディタを使用してシェルコマンドを新しいファイルにコンパイルするプロセスです。

テキストエディタでbashを作成すると、bashコマンドをコンパイルすることになります。 またはbash関数 –関数名のみを使用して何度も呼び出すことができるコマンドのセット。その後、テキストは実行可能なbashスクリプトとして保存されます。 .shのファイル 拡大。

Bashスクリプトを使用する理由

Bashスクリプトは、多くの長いコマンドを1つの実行可能スクリプトファイルにコンパイルするため、ワークフローに役立ちます。

たとえば、特定の時間間隔で実行する必要のある複数のコマンドがある場合、コマンドを1つずつ手動で入力して実行する代わりに、bashスクリプトをコンパイルできます。スクリプトファイルは、必要な場合にのみ実行する必要があります。

bashスクリプトを使用するその他の利点は次のとおりです。

  • 適切に構成されたコマンド –スクリプトを実行するたびに正しい順序で実行されるように、コマンドを順番に構成します。
  • タスクの自動化 – cronの時間ベースのスケジューラを使用して、定義された時間にスクリプトの実行を自動化します。
  • 透明性 –読み取り可能なテキストファイルであるため、スクリプトの内容を確認できます。ただし、C ++などの別のプログラミング言語で記述された別のプログラムを使用してコマンドを実行する場合は、ソースコードにアクセスする必要があります。
  • 譲渡可能 –スクリプトを他のLinuxディストリビューションに転送しても、その特定のオペレーティングシステムでシェルコマンドを使用できる場合は、引き続き機能します。

Bashコマンドに慣れる

Bashは、ほぼすべてのタイプのUnixベースのオペレーティングシステムで使用でき、個別にインストールする必要はありません。 Linuxターミナルとも呼ばれるLinuxコマンドラインが必要になります。これは、シェルを含み、bashスクリプトを実行できるようにするプログラムです。

次のコマンドを使用して、Unixオペレーティングシステムで使用可能なシェルのリストを確認します。

cat /etc/shells

出力には次のようなリストが表示されます:

/bin/bash
/bin/sh
/bin/tcsh
/bin/csh

各bashシェルスクリプトは#で始まる必要があります! その後にbashインタープリターへの絶対パスが続きます。パスを表示するには、次のコマンドを入力します:

which bash

次の出力が生成されます。

/bin/bash

これは、ほとんどのUnixオペレーティングシステムでのbashインタープリターへの標準パスです。 bashインタープリターを使用してコマンドを実行する必要があることをシェルに通知するには、次の行でスクリプトを開始します。

#!/bin/bash

重要! 仮想プライベートサーバーでbashスクリプトを実行する場合は、SSHクライアントを介してサーバーに接続します。

次のステップは、 .shでコマンドを記述してコンパイルすることです。 テキストエディタを使用してファイル。 VIMやGNUNanoなどのUnixテキストエディタが必要になります。このチュートリアルでは、 Nanoを使用します 次のコマンドを入力してファイルを作成するテキストエディタ:

nano function.sh

これにより、新しい .shが開きます 編集するファイル。 #!/ bin / bashと書くことから始めます その後にbashコマンドが続きます。

重要! Nanoテキストエディタの使用が終了したら、 Ctrl + Xを押します。 閉じるには、 Yを押します および入力 変更を保存します。

最初のBashスクリプトの基本的なBashコマンド

最初のbashスクリプトを正常に作成するには、基本的なbashコマンドを理解する必要があります。それらはスクリプトの主要な要素であり、それらが何をするのか、そしてそれらを適切に書く方法を知っている必要があります。

Linuxにはたくさんのbashコマンドがあります。まず、7つの基本的なものについて説明します。

1。コメント

コメントには、スクリプトの特定の行の説明が含まれています。端末は実行中にコメントを解析しないため、出力に影響を与えません。

スクリプトにコメントを追加する方法は2つあります。最初の方法は、と入力することです。 1行のコメントの先頭にあります。

#!/bin/bash
#Command below prints a Hello World text
echo “Hello, world!”

2番目の方法は、を使用することです。 続いて 。この方法は、複数行のコメントに対して機能します。

#!/bin/bash
read a
: ‘ 
The following commands prints
Hello, world!
‘
echo “Hello, World!”

2。変数

変数は、文字、文字列、または数字を表す記号です。定義された文字列または数値を使用するには、コマンドラインに変数名を入力するだけです。

変数を割り当てるには、次のように変数名と文字列値を入力します。

testvar=“This is a test variable”

この場合、 testvar willは変数名であり、これはテスト変数です 文字列値です。変数を割り当てるときは、覚えやすく、その値を表す変数名を使用することをお勧めします。

コマンドラインで変数値を読み取るには、 $を使用します 変数名の前の記号。以下の例を見てください:

#!/bin/bash
testvar=“This is a test variable”
echo $testvar

2番目のコマンドラインはエコーを使用します testvarの値を出力します 。そのスクリプトの出力は次のようになります:

This is a test variable

読み取りを使用して文字列値を入力する方法を見てみましょう コマンドを実行し、スクリプトに異なる変数の2つの文字列値を比較させます。

#!/bin/bash
echo “Enter a number” 
read a #The user input in this command line will be stored as variable a
b=50 #The value of variable b
if [[$a -eq $b]]
then
echo “Same number”
else
echo “Different number”
fi

そのスクリプトの出力は次のようになります。

Enter a number
20
Different number

3行目に注意してください 変数aになる値です 。

スクリプトは変数aを比較します 値が20 および変数b 値が50 。値が異なるため、スクリプトは異なる番号を出力します 。

ただし、ユーザーが 50を入力した場合 、これが出力になります:

Enter a number
50
Same number

この例では、条件付きステートメントも使用しています。これについては後で説明します。

3。エコーコマンド

エコー は、多くのプログラミング言語で使用されるよく知られたコマンドです。エコーで出力を端末に印刷するために使用できるさまざまなオプションがあります。

エコーの最初の最も一般的な使用法は、標準テキストを出力することです。

#!/bin/bash
echo “Hello, world!”

そのコマンドの出力はHello、World!です。 デフォルトでは、このようにechoコマンドを使用すると、端末はその下に新しい行を入力します。改行なしで出力をエコーする場合は、 -nを使用してエコーできます。 。

#!/bin/bash
echo -n “Hello, world!”

オプション\nを使用します 出力に改行を導入します。 円記号(\)を有効にするには 、 -eを含める必要があります 。

#!/bin/bash
echo -e “Hello, \nworld!”

そのコマンドの出力は次のようになります:

Hello,
world!

オプション\t 水平タブスペースを追加します:

#!/bin/bash
echo -e “\tHello, world!”

このコマンドの出力は、テキストを右にインデントします:

        Hello, world!

複数のオプションを組み合わせることもできます。たとえば、 \ nを組み合わせます および\t テキストを行に分割して右にインデントするには:

#!/bin/bash
echo -e “\n\tHello, \n\tworld!”

そのコマンドの出力は次のようになります:

      Hello,
      world!      

4。機能

関数は、一連のコマンドをグループにコンパイルします。コマンドを再度実行する必要がある場合は、コマンドセット全体ではなく、関数を記述してください。

関数を書くにはいくつかの方法があります。

最初の方法は、関数名から始めて、括弧と角かっこで続けることです。

function_name () {
first command
second command
}

または、1行で記述したい場合:

function_name () { first command; second command; }

関数を作成する2番目の方法は、予約語 functionを使用することです。 関数名が続きます。これにより、括弧が不要になります:

function function_name {
first command
second command
}

このメソッドには、単一行バージョンもあります:

function function_name { first command; second command; }

たとえば、複数のエコーを使用して2つの関数を記述できます。 コマンド:

#!/bin/bash
hello_world () {
echo “Hello, World!”
echo “This is a test function”
}
print_message () {
echo “Let’s learn bash programming”
echo “Enjoy this tutorial”
}

上記の例のように関数を作成すると、関数が定義されるだけで、含まれているコマンドは実行されないことに注意してください。関数を実行するには、コマンドラインにその名前を入力します。

それでは、上記の2つの例を、実行を含む完全なbash関数で使用してみましょう。

#!/bin/bash
#Define a hello world function
hello_world () {
echo “Hello, World!”
echo “This is a test function”
}
#Define a print message function
print_message () {
echo “Let’s learn bash programming”
echo “Enjoy this tutorial”
}
#Execute the hello world function
hello_world
#Execute the print message function
print_message

上記のスクリプトの出力は次のとおりです。

Hello, World!
This is a test function
Let’s learn bash programming
Enjoy this tutorial

5。ループ

ループbashコマンドは、コマンドを複数回実行する場合に便利です。 bashで実行できるものには3つのタイプがあります– for ながら 、およびまで

for loopは、アイテムのリストに対してコマンドを実行します:

#!/bin/bash
for item in [list]
do
[commands]
done

次の例では、 for を使用しています ループしてすべての曜日を印刷します:

#!/bin/bash
for days in Monday Tuesday Wednesday Thursday Friday Saturday Sunday
do
echo “Day: $days”
done

2行目「日」 自動的に変数になり、値はそれに続く日の名前になります。次に、エコー コマンドでは、 $を使用します 変数値を呼び出すための記号。

そのスクリプトの出力は次のようになります。

Day: Monday
Day: Tuesday
Day: Wednesday
Day: Thursday
Day: Friday
Day: Saturday
Day: Sunday

ループスクリプトにコマンドラインが1つしかない場合でも、7つのエコーが出力されることに注意してください。 出力。

次のタイプのループはwhile 。スクリプトは条件を評価します。条件がtrueの場合 、出力が定義された条件を満たさなくなるまで、コマンドを実行し続けます。

#!/bin/bash
while [condition]
do
[commands]
done

((++))として示される、変数とインクリメントの演算子を含む簡単な例を見てみましょう。 :

#!/bin/bash
i=0
while [ $i -le 5 ]
do 
echo $i
((i++))
done

変数は0で始まります 値、およびインクリメント演算子はそれを1つ増やします。設定された条件は5以下であるため、コマンドは出力が5に達するまで反復を続けます。そのスクリプトの出力は次のようになります。

0
1
2
3
4
5

最後のタイプのループ、まで whileの反対です 。条件が真になるまでコマンドを繰り返します。

whileと同じ出力が必要な場合 上記の例では、までを使用しています ループ、次のようなスクリプトを書くことができます:

#!/bin/bash
i=0
until [ $i -gt 5 ]
do 
echo $i
((i++))
done

これで、このコマンドは出力値が5に達するまで繰り返されます。出力は、 whileを使用した例と同じになります。 ループ:

0
1
2
3
4
5

6。条件付きステートメント

bashを含む多くのプログラミング言語は、 ifのような条件文を使用します 、次に 、およびその他 意思決定のため。条件に応じてコマンドを実行し、出力を出力します。

if ステートメントの後に条件式が続きます。その後、次にが続きます 条件の出力を定義するコマンド。 if で表現された条件の場合、スクリプトはコマンドを実行します ステートメントは正しいです。

ただし、条件がfalseの場合に別のコマンドを実行する場合は、 elseを追加します。 スクリプトにステートメントを追加し、コマンドを実行します。

簡単なifを見てみましょう 、次に 、およびその他 ステートメント。ステートメントの前に、ユーザーが値を入力できるように変数を含めます:

#!/bin/bash
echo “Enter a number”
read num
if [[$num -gt 10]]
then
echo “The number is greater than 10”
else
echo “The number is not greater than 10”

7。ファイルの読み取りと書き込み

cat を使用して、ファイルを読み取る方法はいくつかあります。 最も人気のあるコマンドです。このコマンドは全体を読み取ることに注意してください ファイルの内容。

コンテンツを1行ずつ読むには、読むを使用します コマンドとループ。ファイルを読み取るスクリプトを作成する前に、ファイルが最初に存在することを確認してください。

次の例では、 to-do.txtがあります やることリストを含むファイル:

Reply email
Finish report
Call clients
Team evaluation

を使用します および読む to-do.txtのコンテンツを読み取って印刷するbash関数のコマンド ファイル。スクリプトの最初の部分では、を使用します コマンド、2番目の部分は読み取りを使用します ループ内のコマンド。

#!/bin/bash
echo “Reading the file using cat command”
content=’cat to-do.txt’
echo $content
echo “Reading the file using read command and loop”
filename=’to-do.txt’
while read line
do
echo $line
done<$filename

スクリプトの出力は次のようになります。

Reading the file using cat command
Reply email Finish report Call clients Team evaluation
Reading the file using read command and loop
Reply email
Finish report
Call clients
Team evaluation

コマンド出力をファイルに書き込むには、>で表されるリダイレクト演算子を使用します および>> 記号を入力し、その後にファイル名を付けます:

output > filename
output >> filename

演算子を選択するときは注意してください。ファイルが存在する場合は、> 演算子は、その内容を長さゼロの文字列で上書きします。これは、既存のファイルコンテンツが失われることを意味します。入力したファイル名が存在しない場合は作成します。

>> 一方、演算子は、指定されたファイルに出力を追加します。

出力をテキストファイルに書き込むための簡単なリダイレクトは次のとおりです。

echo “Hello, world!” >> hello_world.txt

リダイレクトは読み取りでも機能します 任意のユーザー入力を書き込むコマンド。このスクリプト例では、入力値を name.txtに追加します ファイル:

#!/bin/bash
echo “Enter your name”
read Name
echo $Name >> name.txt

スクリプトは変数の出力をファイルにリダイレクトするため、出力は出力されません。ファイルの内容を印刷して出力を表示するには、次のコマンドラインを追加してファイルを読み取ります。

echo ‘cat name.txt’

許可が拒否されたのを防ぐために、ファイルの読み取りと書き込みの許可があることを確認してください エラー。既存のファイルに出力を追加する場合は、必ず正しいファイル名を入力してください。

最初のBashスクリプトで試す4つの簡単な関数

いくつかのbashコマンドがわかったので、最初のスクリプトのより基本的なbash関数の例を見ていきます。

前述のように、bashスクリプトファイルを作成する場合は、nanofilename.shコマンドを使用して.shを作成して開きます。 ファイルを作成し、bash関数の作成を開始します。完了したら、ファイルを終了して保存することを忘れないでください。

単純なエコー関数から始める

簡単なエコー関数から始めましょう。次の例のように、関数名を定義し、次の行にechoコマンドを続けることから始めます。

#!/bin/bash
testfunction () {
echo “My first function”
}
testfunction

このスクリプトをtestFunction.shに保存します 。コマンドラインでスクリプトを実行すると、次の出力が表示されます。

My first function

関数定義の位置を関数呼び出しと入れ替えると、エラーが発生することに注意してください。以下の例を見てみましょう:

#!/bin/bash
testfunction
testfunction(){
echo “My first function”
}

このスニペットは機能しません。 2番目のコマンドラインで関数を呼び出し、後で関数を定義します。この場合、インタプリタはスクリプトの実行時に関数を見つけることができず、コマンドが見つかりませんになります。 エラー。

いくつかのパラメータを使用する

Bash関数は、任意の数のパラメーターを受け入れます。以下の例では、2つのパラメーターを受け入れます。

#!/bin/bash
testfunction () {
echo $1
echo $2
}
testfunction “Hello” “World”

$ 1 $ 2 の間、最初の引数を表します 関数実行行の2番目の引数を表します。 「こんにちは」を使用したので および「世界」 引数の場合、出力は次のようになります。

コマンドライン引数を使用してbash関数を実行することもできます。そのような例の1つを以下に示します。

#!/bin/bash
addition () {
sum=$(($1+$2))
return $sum
}
read -p "Enter a number: " int1
read -p "Enter a number: " int2
addition $int1 $int2
echo "The result is : " $?

加算は変数合計で割り当てられます 、およびこれは関数から返されます。 Bash関数は常に単一の値を返します。ユーザー入力は、読み取りを使用して取得されます 両方の番号について。最後に、結果は $?を使用して印刷されます 戻り値$sumを格納します 関数から。

ディレクトリの作成とパスの変更

次に、最初にディレクトリを作成し、次に新しい場所を指すようにパスを変更する別の関数の例を見てみましょう。この関数にはmkdirが含まれます およびcd 新しいディレクトリを作成し、現在のディレクトリを変更するLinuxコマンド:

#!/bin/bash
sampleFunction () {
mkdir -p $1
cd $1
}
sampleFunction myDir

関数は最初の引数を読み取り、その名前でディレクトリを作成します。スクリプトを実行した後、 pwdを使用して現在の作業パスを確認します ターミナルのコマンド。現在、新しく作成された myDir内にいることがわかります 。

ループと条件文を組み合わせる

ループと条件文は、bashスクリプトでも人気があります。同じスクリプトで両方を使用するいくつかの例を見ていきます:

#!/bin/bash
isvalid=true
count=1
while [ $isvalid ]
do
echo $count
if [ $count -eq 5 ];
then
break
fi
((count++))
done

上記の例では、 while およびif ステートメント。これはwhileを実行します 条件文をチェックした後、5回ループします。

このスクリプトの出力は次のようになります:

1
2
3
4
5

for ループはカウンターをインクリメントおよびデクリメントできます。 forの例 ループを以下に示します:

#!/bin/bash
for (( count=10; count>0; count-- ))
do
echo -n "$count "
done

このforループの出力は次のようになります。

10 9 8 7 6 5 4 3 2 1

if ステートメントでは、 else ifを定義することもできます elifを使用する ステートメント:

#!/bin/bash
echo "Enter a valid number"
read n
if [ $n -eq 101 ];
then
echo "This is the first number"
elif [ $n -eq 510 ];
then
echo "This is the second number"
elif [ $n -eq 999 ];
then
echo "This is the third number"
else
echo "No numbers over here"
fi

ケースを使用してそのスクリプトを作成することもできます 声明。 場合 ステートメント、;; 大文字と小文字の区別を表すため、変数値がいずれかの条件を満たしている場合は、スクリプトの最後にジャンプします。

#!/bin/bash
echo "Enter a valid number"
read n
case $n in
101)
echo "This is the first number" ;;
510)
echo "This is the second number" ;;
999)
echo "This is the third number" ;;
*)
echo "No numbers over here" ;;
esac

Bashスクリプトを実行する方法

bashスクリプトを作成したので、ターミナルから実行する方法を学びましょう。これを行うには3つの方法があります– bashを使用します コマンド、 ./を使用 コマンドを実行し、別のディレクトリからスクリプトを実行します。

Bashコマンドの使用

最初の方法は、 bashを使用することです。 適切なディレクトリからのコマンド。たとえば、 function.shがあるとします。 Test / Bashの単純なエコー関数を含むbashスクリプト ディレクトリ。最初に次のコマンドを使用してディレクトリを開く必要があります:

cd Test/Bash

次に、次の bashを実行します bashスクリプトを実行するコマンド:

bash function.sh

次のような出力が表示されます。

bashなしでスクリプトを実行しようとした場合 コマンドの場合、コマンドが見つかりませんを受け取ります エラーメッセージ。

./コマンドの使用

bashなしでbashスクリプトを実行できます 指図。ただし、実行するようにファイルを設定する必要があります 適切なディレクトリから次のコマンドを使用して権限を付与します:

chmod +x function.sh

このコマンドは、ファイルのアクセス許可を変更して、全員がファイルを実行できるようにします。それが完了したら、次のコマンドを使用してbashスクリプトを実行します。

./function.sh

権限を正しく設定しないと、端末は権限が拒否されましたを出力します エラーメッセージ:

bashのように コマンドを実行すると、コマンドが見つかりませんも表示されます ./を使用しない場合のエラー あなたの命令で。

別のディレクトリからスクリプトを実行する

別の方法は、別のディレクトリからスクリプトを実行することです。 bashスクリプトを作成したら、 pwdを使用します 現在のディレクトリを検索するコマンド。パスがわかれば、任意のディレクトリからスクリプトを実行できます。たとえば、次のコマンドを使用して function.shを実行します ホームディレクトリから:

bash Test/Bash/function.sh
結論

Bashはシェルコマンドを読み取り、オペレーティングシステムと対話してそれらを実行します。 bashの優れた点は、多くのbashコマンドと関数を単一の実行可能スクリプトにコンパイルできることです。これにより、ワークフローが合理化されます。

bashスクリプトファイルを作成するには、さまざまなシェルコマンドとその適切な構文を理解する必要があります。このチュートリアルでは、7つの基本的なコマンドについて説明しました。

  • コメント
  • 変数
  • エコー
  • 機能
  • ループ
  • 条件付きステートメント
  • ファイルの読み取りと書き込み

ただし、bashの可能性を最大限に活用できるようにする場合は、さらに多くのことを学ぶ必要があります。提供した例を使用して練習し、bashの調査を続けて、より優れた効率的なスクリプトを作成できるようにします。

bashスクリプトを実行する3つの方法について説明しました。ご質問やご意見がございましたら、以下のセクションにご記入ください。


Linux
  1. BashForループガイドと例

  2. 初心者向けのLinuxcdコマンドチュートリアル(8例)

  3. Bash の For ループと While ループの例

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

  2. 初心者向けのLinuxlnコマンドチュートリアル(5つの例)

  3. bash スクリプトを作成する方法、または vi を開いてドキュメントを編集する方法を自動化するには?

  1. 初心者向けのLinuxnlコマンドチュートリアル(7つの例)

  2. 初心者向けのLinuxnmコマンドチュートリアル(10例)

  3. 初心者向けのLinuxODコマンドチュートリアル(6例)