Bash スクリプトのマスター:Linux シェル自動化の初心者ガイド
Linux では、プロセスの自動化はシェル スクリプトに大きく依存しています。これには、一緒に実行できる一連のコマンドを含むファイルの作成が含まれます。
この記事では、変数、コマンド、入出力、デバッグなどの bash スクリプトの基本から始めます。途中でそれぞれの例も見ていきます。
始めましょう。 🚀
目次
<オル>Bash スクリプトの基本
bash スクリプトでのコメント
条件文 (if/else)
Bash でのループと分岐
前提条件
このチュートリアルを進めるには、次のアクセス権が必要です。
- コマンドラインにアクセスできる Linux の実行バージョン
Linux がインストールされていない場合、または Linux を始めたばかりの場合は、Replit を通じて Linux コマンド ラインに簡単にアクセスできます。 Replit はブラウザベースの IDE で、数分で bash シェルにアクセスできます。
WSL (Windows Subsystem for Linux) を使用して、Windows システム上に Linux をインストールすることもできます。ここではそのためのチュートリアルを示します。
はじめに
Bash スクリプトの定義
bash スクリプトは、bash プログラムによって 1 行ずつ実行される一連のコマンドを含むファイルです。コマンド ラインを使用して、特定のディレクトリへの移動、フォルダーの作成、プロセスの起動などの一連のアクションを実行できます。
これらのコマンドをスクリプトに保存すると、同じ一連のステップを複数回繰り返し、スクリプトを実行して実行できます。
Bash スクリプトの利点
Bash スクリプトは、システム管理タスクの自動化、システム リソースの管理、および Unix/Linux システムでのその他の日常的なタスクの実行を行うための強力で多用途のツールです。シェル スクリプトの利点は次のとおりです。
- 自動化 :シェル スクリプトを使用すると、反復的なタスクとプロセスを自動化できるため、時間を節約し、手動実行で発生する可能性のあるエラーのリスクを軽減できます。
- 移植性 :シェル スクリプトは、エミュレータや仮想マシンを使用することで、Unix、Linux、macOS、さらには Windows などのさまざまなプラットフォームやオペレーティング システム上で実行できます。
- 柔軟性 :シェル スクリプトは高度にカスタマイズ可能であり、特定の要件に合わせて簡単に変更できます。また、他のプログラミング言語やユーティリティと組み合わせて、より強力なスクリプトを作成することもできます。
- アクセシビリティ :シェル スクリプトは簡単に作成でき、特別なツールやソフトウェアは必要ありません。これらは任意のテキスト エディタを使用して編集でき、ほとんどのオペレーティング システムにはシェル インタープリタが組み込まれています。
- 統合 :シェル スクリプトは、データベース、ウェブサーバー、クラウド サービスなどの他のツールやアプリケーションと統合できるため、より複雑な自動化タスクやシステム管理タスクが可能になります。
- デバッグ :シェル スクリプトはデバッグが簡単で、ほとんどのシェルには、問題を迅速に特定して修正するのに役立つデバッグ ツールとエラー報告ツールが組み込まれています。
Bash シェルとコマンド ライン インターフェイスの概要
「シェル」と「bash」という用語は同じ意味で使用されます。しかし、両者の間には微妙な違いがあります。
「シェル」という用語は、オペレーティング システムと対話するためのコマンド ライン インターフェイスを提供するプログラムを指します。 Bash (Bourne-Again SHell) は、最も一般的に使用される Unix/Linux シェルの 1 つであり、多くの Linux ディストリビューションのデフォルト シェルです。
シェルまたはコマンドライン インターフェイスは次のようになります。
シェルはユーザーからのコマンドを受け入れ、出力を表示します
上記の出力では、zaira@Zaira シェルプロンプトです。シェルを対話的に使用すると、$ が表示されます。 ユーザーからのコマンドを待っているとき。
シェルが root (管理者権限を持つユーザー) として実行されている場合、プロンプトは # に変更されます。 。スーパーユーザーのシェル プロンプトは次のようになります。
[root@host ~]#
Bash はシェルの一種ですが、Korn シェル (ksh)、C シェル (csh)、Z シェル (zsh) など、他のシェルも使用できます。各シェルには独自の構文と一連の機能がありますが、オペレーティング システムと対話するためのコマンドライン インターフェイスを提供するという共通の目的はすべて共有されています。
ps を使用してシェルのタイプを決定できます。 コマンド:
ps
私にとっての出力は次のとおりです。
シェルの種類を確認しています。 bash シェルを使用しています。
要約すると、「シェル」はコマンドライン インターフェースを提供するプログラムを指す広義の用語ですが、「Bash」は Unix/Linux システムで広く使用されている特定の種類のシェルです。
注:このチュートリアルでは、「bash」シェルを使用します。
Bash スクリプトを始める方法
コマンドラインからの Bash コマンドの実行
前述したように、シェル プロンプトは次のようになります。
[username@host ~]$
$ の後に任意のコマンドを入力できます。 署名して、ターミナル上の出力を確認します。
通常、コマンドは次の構文に従います。
command [OPTIONS] arguments
いくつかの基本的な bash コマンドについて説明し、その出力を見てみましょう。必ず従ってください:)
date:現在の日付を表示します
zaira@Zaira:~/shell-tutorial$ date
Tue Mar 14 13:08:57 PKT 2023
pwd:現在の作業ディレクトリを表示します。
zaira@Zaira:~/shell-tutorial$ pwd
/home/zaira/shell-tutorial
ls:現在のディレクトリの内容をリストします。
zaira@Zaira:~/shell-tutorial$ ls
check_plaindrome.sh count_odd.sh env log temp
echo:テキスト文字列または変数の値を端末に出力します。
zaira@Zaira:~/shell-tutorial$ echo "Hello bash"
Hello bash
man を使用すると、いつでもコマンド マニュアルを参照できます。 コマンド。
たとえば、ls のマニュアル 次のようになります:
man を使用すると、コマンドのオプションの詳細を確認できます。
Bash スクリプトを作成して実行する方法
スクリプトの命名規則
命名規則により、bash スクリプトは .sh で終わります。 。ただし、bash スクリプトは sh がなくても完全に正常に実行できます。 拡張子。
シバンを追加する
Bash スクリプトは shebang で始まります 。シバンは bash # の組み合わせです。 と bang ! bash シェルのパスが続きます。これはスクリプトの最初の行です。 Shebang はシェルに bash シェル経由で実行するように指示します。 Shebang は単に bash インタープリタへの絶対パスです。
以下はシバン ステートメントの例です。
#!/bin/bash
次のコマンドを使用して、bash シェル パス (上記とは異なる場合があります) を見つけることができます。
which bash
最初の bash スクリプトの作成
最初のスクリプトでは、ユーザーにパスの入力を求めます。代わりに、その内容がリストされます。
run_all.sh という名前のファイルを作成します。 vi を使用する コマンド。任意のエディターを使用できます。
vi run_all.sh
次のコマンドをファイルに追加して保存します。
#!/bin/bash
echo "Today is " `date`
echo -e "\nenter the path to directory"
read the_path
echo -e "\n you path has the following files and folders: "
ls $the_path
スクリプトを 1 行ずつ詳しく見てみましょう。同じスクリプトを再度表示しますが、今回は行番号が付けられています。
1 #!/bin/bash
2 echo "Today is " `date`
3
4 echo -e "\nenter the path to directory"
5 read the_path
6
7 echo -e "\n you path has the following files and folders: "
8 ls $the_path
- 行 1:シバン (
#!/bin/bash) ) は bash シェル パスを指します。 - 行 2:
echoコマンドはターミナルに現在の日付と時刻を表示しています。dateに注意してください。 はバッククォートです。 - 行 #4:ユーザーに有効なパスを入力してもらいます。
- 行 #5:
readコマンドは入力を読み取り、変数the_pathに保存します。 . - 8 行目:
lsコマンドは保存されたパスを持つ変数を取得し、現在のファイルとフォルダーを表示します。
bash スクリプトの実行
スクリプトを実行可能にするには、次のコマンドを使用してユーザーに実行権限を割り当てます。
chmod u+x run_all.sh
ここで、
chmod現在のユーザーのファイルの所有権を変更します:u.+x現在のユーザーに実行権限を追加します。これは、所有者であるユーザーがスクリプトを実行できることを意味します。run_all.shは実行したいファイルです。
前述の方法のいずれかを使用してスクリプトを実行できます。
sh run_all.shbash run_all.sh./run_all.sh
実際の動作を見てみましょう 🚀
Bash スクリプトの基本
コメントは # で始まります bash スクリプトで。これは、# で始まる行はすべて、 はコメントなので、インタプリタによって無視されます。
コメントはコードを文書化するのに非常に役立ち、他の人がコードを理解できるようにコメントを追加することをお勧めします。
以下はコメントの例です:
# This is an example comment
# Both of these lines will be ignored by the interpreter
Bash の変数とデータ型
変数を使用すると、データを保存できます。変数を使用すると、スクリプト全体でデータの読み取り、アクセス、操作を行うことができます。
Bash にはデータ型がありません。 Bash では、変数は数値、個々の文字、または文字列を格納できます。
Bash では、次の方法で変数値を使用および設定できます。
<オル>country=Pakistan
<オル> $ に注意してください。 既存の変数の値にアクセスするには必要です。same_country=$country
変数値にアクセスするには、$ を追加します。
zaira@Zaira:~$ country=Pakistan
zaira@Zaira:~$ echo $country
Pakistan
zaira@Zaira:~$ new_country=$country
zaira@Zaira:~$ echo $new_country
Pakistan
変数の命名規則
Bash スクリプトでは、変数の命名規則は次のとおりです。
<オル>_) で始める必要があります。 )._) を含めることができます。 ).if などの予約済みキーワードの使用は避けてください。 、then 、else 、fi 、などを変数名として使用します。Bash で有効な変数名の例をいくつか示します。
name
count
_var
myVar
MY_VAR
無効な変数名の例をいくつか示します。
2ndvar (variable name starts with a number)
my var (variable name contains a space)
my-var (variable name contains a hyphen)
これらの命名規則に従うと、Bash スクリプトが読みやすくなり、保守が容易になります。
Bash スクリプトでの入力と出力
インプットの収集
このセクションでは、スクリプトに入力を提供するいくつかの方法について説明します。
<オル>
read を使用してユーザー入力を読み取ることができます。 コマンド。
#!/bin/bash
echo "What's your name?"
read entered_name
echo -e "\nWelcome to bash tutorial" $entered_name
このコードは、input.txt という名前のファイルから各行を読み取ります。 そしてそれを端末に出力します。 while ループについては、この記事の後半で学習します。
while read line
do
echo $line
done < input.txt
<オル>
bash スクリプトまたは関数では、$1 渡される最初の引数、$2 を示します。 は、渡された 2 番目の引数を示します。
このスクリプトはコマンドライン引数として名前を受け取り、パーソナライズされた挨拶を出力します。
echo "Hello, $1!"
Zaira を提供しました
#!/bin/bash
echo "Hello, $1!"
出力:
出力の表示
ここでは、スクリプトから出力を受け取るいくつかの方法について説明します。
<オル>echo "Hello, World!"
これにより、「Hello, World!」というテキストが出力されます。
<オル>echo "This is some text." > output.txt
これにより、「これはテキストです」というテキストが書き込まれます。 output.txt という名前のファイルに 。 > に注意してください。 ファイルに既にコンテンツがある場合、オペレーターはファイルを上書きします。
echo "More text." >> output.txt
これにより、「その他のテキスト」というテキストが追加されます。ファイルの最後まで output.txt .
ls > files.txt
これにより、現在のディレクトリ内のファイルがリストされ、出力が files.txt という名前のファイルに書き込まれます。 。この方法で、任意のコマンドの出力をファイルにリダイレクトできます。
基本的な Bash コマンド (echo、read など)
以下は、最も一般的に使用される bash コマンドのリストです。
<オル>cd :ディレクトリを別の場所に変更します。ls :現在のディレクトリの内容を一覧表示します。mkdir :新しいディレクトリを作成します。touch :新しいファイルを作成します。rm :ファイルまたはディレクトリを削除します。cp :ファイルまたはディレクトリをコピーします。mv :ファイルまたはディレクトリを移動または名前変更します。echo :端末にテキストを出力します。cat :ファイルの内容を連結して出力します。grep :ファイル内のパターンを検索します。chmod :ファイルまたはディレクトリの権限を変更します。sudo :管理者権限でコマンドを実行します。df :利用可能なディスク容量を表示します。history :以前に実行したコマンドのリストを表示します。ps :実行中のプロセスに関する情報を表示します。条件文 (if/else)
true または false のブール結果を生成する式は、条件と呼ばれます。条件を評価するには、if などのいくつかの方法があります。 、if-else 、if-elif-else 、ネストされた条件文。
構文 :
if [[ condition ]];
then
statement
elif [[ condition ]]; then
statement
else
do this by default
fi
AND -a などの論理演算子を使用できます。 および OR -o より重要な比較を行うため。
if [ $a -gt 60 -a $b -lt 100 ]
if を使用する Bash スクリプトの例を見てみましょう。 、if-else 、if-elif-else ユーザーが入力した数値が正、負、またはゼロであるかどうかを判断するステートメント:
#!/bin/bash
echo "Please enter a number: "
read num
if [ $num -gt 0 ]; then
echo "$num is positive"
elif [ $num -lt 0 ]; then
echo "$num is negative"
else
echo "$num is zero"
fi
スクリプトは最初にユーザーに数値の入力を求めます。次に、if を使用します。 ステートメントを使用して、数値が 0 より大きいかどうかを確認します。0 より大きい場合、スクリプトは数値が正であることを出力します。数値が 0 以下の場合、スクリプトは次のステートメント (if-elif) に進みます。 声明。ここで、スクリプトは数値が 0 より小さいかどうかをチェックします。0 より小さい場合、スクリプトは数値が負であることを出力します。最後に、数値が 0 より大きくも 0 未満でもない場合、スクリプトは else を使用します。 数値がゼロであることを出力するステートメント。
実際の動作を見てみましょう 🚀
Bash でのループと分岐
while ループ
While ループは条件をチェックし、条件が true のままになるまでループします。 。ループの実行を制御するには、カウンターをインクリメントするカウンター ステートメントを提供する必要があります。
以下の例では、(( i += 1 )) i の値をインクリメントするカウンター ステートメントです。 。ループはちょうど 10 回実行されます。
#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
echo "$i"
(( i += 1 ))
done
For ループ
for while と同じようにループします。 ループを使用すると、ステートメントを特定の回数だけ実行できます。各ループは構文と使用法が異なります。
以下の例では、ループは 5 回繰り返されます。
#!/bin/bash
for i in {1..5}
do
echo $i
done
ケースステートメント
Bash では、case ステートメントを使用して、指定された値をパターンのリストと比較し、最初に一致したパターンに基づいてコードのブロックを実行します。 Bash の case ステートメントの構文は次のとおりです。
case expression in
pattern1)
# code to execute if expression matches pattern1
;;
pattern2)
# code to execute if expression matches pattern2
;;
pattern3)
# code to execute if expression matches pattern3
;;
*)
# code to execute if none of the above patterns match expression
;;
esac
ここで、「expression」は比較する値であり、「pattern1」、「pattern2」、「pattern3」などは比較するパターンです。
二重セミコロン「;;」パターンごとに実行するコードの各ブロックを分離します。アスタリスク「*」はデフォルトのケースを表し、指定されたパターンがいずれも式に一致しない場合に実行されます。
例を見てみましょう。
fruit="apple"
case $fruit in
"apple")
echo "This is a red fruit."
;;
"banana")
echo "This is a yellow fruit."
;;
"orange")
echo "This is an orange fruit."
;;
*)
echo "Unknown fruit."
;;
esac
この例では、「fruit」の値が「apple」であるため、最初のパターンが一致し、「これは赤い果物です」というコード ブロックがエコーされます。が実行されます。 「fruit」の値が「banana」の場合、2 番目のパターンが一致し、「これは黄色い果物です」をエコーするコード ブロックになります。などを実行します。 「fruit」の値が指定されたパターンのいずれにも一致しない場合は、デフォルトのケースが実行され、「Unknown Fruit」がエコーされます。
cron を使用してスクリプトをスケジュールする方法
Cron は、Unix 系オペレーティング システムで利用できるジョブ スケジューリング用の強力なユーティリティです。 cron を構成すると、毎日、毎週、毎月、または特定の時間ベースで実行する自動ジョブを設定できます。 cron によって提供される自動化機能は、Linux システム管理において重要な役割を果たします。
以下は cron をスケジュールするための構文です。
# Cron job example
* * * * * sh /path/to/script.sh
ここでは、* s はそれぞれ、分、時間、日、月、平日を表します。
以下に、cron ジョブのスケジュール設定の例をいくつか示します。
0 0 毎日午前 0 時にスクリプトを実行します0 0 /path/to/script.sh /5 5 分ごとにスクリプトを実行/5 /path/to/script.sh 0 6 1-5 月曜日から金曜日の午前 6 時にスクリプトを実行します0 6 1-5 /path/to/script.sh 0 0 1-7 毎月最初の 7 日にスクリプトを実行します0 0 1-7 /path/to/script.sh 0 12 1 毎月 1 日の正午にスクリプトを実行します0 12 1 /path/to/script.sh crontab の使用
crontab ユーティリティは、cron ジョブの追加と編集に使用されます。
crontab -l 特定のユーザーに対してすでにスケジュールされているスクリプトをリストします。
crontab -e を通じて cron を追加および編集できます。 .
トウモロコシの仕事について詳しくは、こちらの私の他の記事をご覧ください。
Bash スクリプトのデバッグとトラブルシューティングを行う方法
デバッグとトラブルシューティングは、Bash スクリプターにとって不可欠なスキルです。 Bash スクリプトは非常に強力である一方で、エラーや予期しない動作が発生しやすい場合もあります。このセクションでは、Bash スクリプトのデバッグとトラブルシューティングに関するいくつかのヒントとテクニックについて説明します。
set -x を設定します オプション
Bash スクリプトのデバッグに最も役立つテクニックの 1 つは、set -x を設定することです。 スクリプトの先頭にあるオプション。このオプションはデバッグ モードを有効にし、Bash が実行する各コマンドをターミナルに出力し、先頭に + を付けます。 サイン。これは、スクリプト内でエラーが発生している場所を特定するのに非常に役立ちます。
#!/bin/bash
set -x
# Your script goes here
終了コードを確認する
Bash でエラーが発生すると、エラーの性質を示す終了コードが設定されます。 $? を使用して、最新のコマンドの終了コードを確認できます。 変数。 0 の値 は成功を示し、その他の値はエラーを示します。
#!/bin/bash
# Your script goes here
if [ $? -ne 0 ]; then
echo "Error occurred."
fi
echo を使用します ステートメント
Bash スクリプトのデバッグに役立つもう 1 つのテクニックは、echo を挿入することです。 コード全体にステートメントを含めます。これは、どこでエラーが発生しているか、どの値が変数に渡されているかを特定するのに役立ちます。
#!/bin/bash
# Your script goes here
echo "Value of variable x is: $x"
# More code goes here
set -e を使用します オプション
スクリプト内のコマンドが失敗したときにスクリプトをすぐに終了したい場合は、set -e を使用できます。 オプション。このオプションを選択すると、スクリプト内のコマンドが失敗した場合に Bash がエラーで終了するため、スクリプト内のエラーを特定して修正することが容易になります。
#!/bin/bash
set -e
# Your script goes here
ログを確認して cron をトラブルシューティングする
ログ ファイルを使用して cron のトラブルシューティングを行うことができます。スケジュールされたすべてのジョブのログが維持されます。特定のジョブが意図したとおりに実行されたかどうかをログで確認および検証できます。
Ubuntu/Debian の場合、cron が見つかります。 ログの場所:
/var/log/syslog
他のディストリビューションでは場所が異なります。
cron ジョブのログ ファイルは次のようになります。
2022-03-11 00:00:01 Task started
2022-03-11 00:00:02 Running script /path/to/script.sh
2022-03-11 00:00:03 Script completed successfully
2022-03-11 00:05:01 Task started
2022-03-11 00:05:02 Running script /path/to/script.sh
2022-03-11 00:05:03 Error: unable to connect to database
2022-03-11 00:05:03 Script exited with error code 1
2022-03-11 00:10:01 Task started
2022-03-11 00:10:02 Running script /path/to/script.sh
2022-03-11 00:10:03 Script completed successfully
結論
この記事では、ターミナルにアクセスする方法から始めて、いくつかの基本的な bash コマンドを実行しました。また、bash シェルとは何かについても学びました。ループと条件を使用したコードの分岐について簡単に説明しました。最後に、cron を使用したスクリプトの自動化と、その後のいくつかのトラブルシューティング手法について説明しました。
Bash スクリプトについて詳しく学ぶためのリソース
bash スクリプトの世界をさらに深く掘り下げたい場合は、freeCodeCamp の Linux に関する 6 時間のコースを受講することをお勧めします。
このチュートリアルで学んだ中で一番気に入っていることは何ですか?これらのプラットフォームのいずれかで私とつながることもできます。 📧
次のチュートリアルでお会いしましょう。コーディングを楽しんでください 😁
バナー画像のクレジット:Freepik による画像
無料でコーディングを学びましょう。 freeCodeCamp のオープンソース カリキュラムは、40,000 人以上の人々が開発者としての職に就くのに役立ちました。始めましょう
-
マインスイーパを構築して高度なBashスキルを磨く
私はプログラミングを教える専門家ではありませんが、何かを上手に使いたいときは、それを楽しむ方法を見つけようとしています。たとえば、シェルスクリプトを上手に使いたいと思ったとき、Bashでマインスイーパゲームのバージョンをプログラミングして練習することにしました。 経験豊富なBashプログラマーで、楽しみながらスキルを磨きたい場合は、ターミナルで独自のバージョンのマインスイーパを作成してください。完全なソースコードは、このGitHubリポジトリにあります。 準備中 コードを書き始める前に、ゲームを作成するために必要な要素の概要を説明しました。 地雷原を印刷する ゲームプレイロジックを作成す
-
マスター Linux:詳細な CPU 情報を取得するための 9 つの必須コマンド
前回の記事では、Linux でシステムおよびハードウェアの情報を収集するための 10 個の便利なコマンドのリストをまとめました。このガイドでは、CPU/プロセッサーに絞り込み、マシンの CPU に関する詳細情報を抽出するさまざまな方法を示します。 概要を説明すると、CPU アーキテクチャ、vendor_id、モデル、モデル名、CPU コアの数、各コアの速度などの情報をクエリします。 基本的に、/proc/cpuinfo このすべての情報が含まれており、他のすべてのコマンド/ユーティリティはこのファイルから出力を取得します。 ということで、Linux CPU に関する情報を取得するための