ウェブサイト検索

Bashスクリプト入門 [29のトピック]


もしあなたが Bash スクリプト学習 の第一歩を踏み出そうとしているなら、ここはまさに適切な場所です。この Bash スクリプト入門 ガイドは、あなたが最初の bash スクリプトを書く際に自信を持てるように、さまざまなトピックで作成されています。

シェルスクリプトを学ぶ前に、ターミナルの使い方や、cd、chmod、ls、cp、mv などの基本的なコマンドの実行方法、そして Linux のプロセスについての理解を十分に持っているべきです。

初心者向けBashシェルスクリプトチュートリアルシリーズ

私たちは、Bashシェルスクリプトの核心的な側面をカバーする一連の記事を作成しており、以下に各記事へのリンクを示します。

  1. Bashスクリプト入門
  2. Bashの変数
  3. BashでのEchoコマンド
  4. BashでのPrintfコマンド
  5. Bash における文字列操作
  6. Bash展開の説明
  7. Bashでのリダイレクション
  8. Bashにおける条件文
  9. Bashにおけるケース文
  10. BashのForループ
  11. WhileループとUntilループ
  12. Bashのセレクトループ
  13. Bashにおける関数
  14. インデックス付き配列
  15. 連想配列
  16. Bash declare コマンドの使用方法と例
  17. Bash におけるヒアドキュメント
  18. Getopts - コマンドライン引数を解析するスクリプトを作成する
  19. Bashスクリプトでの日付と時刻の処理
  20. LinuxでのBashスクリプトでCSVファイルを解析する方法
  21. Bash コマンド置換
  22. Bashスクリプトのデバッグ技法
  23. Zenity - BashスクリプトでGUIダイアログを作成する
  24. Whiptail - BashスクリプトでGUIダイアログを作成する
  25. Shfmt - シェルスクリプトを整形する
  26. Shellcheck - 静的解析ツール
  27. Bashで算術演算を実行する方法
  28. はい、いいえ、キャンセルのプロンプト付きで対話型Bashスクリプトを作成する
  29. タイムアウトを使ってBashスクリプトで無限untilループを回避する

Linuxにおけるシェルとは何ですか?

シェルは、ユーザーやプロセスによって送信される一連のコマンドを受け付けることで、カーネルと直接やり取りするインターフェースです。

魚のシェル、Zsh、Csh など、多くの種類のシェルが存在します。Bash が最も人気があります。

Bash(Bourne Again Shell)はSH(Bourne Shell)から派生しています。BourneシェルはPOSIX標準に準拠するように設計されており、Bash、Dash、Zshなどの多くの人気のあるシェルはBourneシェルから派生しています。時が経つにつれて、Bashにはより豊富な機能セットが追加され、それによりPOSIX標準に準拠しなくなりました。

最初、Bourneシェル(sh)はBourne Againシェル(bash)へのシンボリックリンクでしたが、現在はdashシェルへのシンボリックリンクになっています。したがって、Bourneシェル(sh)がbashを指していると思ってスクリプトを書こうとすると、正しくない可能性があります。スクリプトを書く前に、あなたのマシンでBourneシェルがどのように実装されているかを確認してください。

$ ls -ln /usr/bin/bash /usr/bin/sh
-rwxr-xr-x 1 0 0 1404744 Mar 19  2021 /usr/bin/bash
lrwxrwxrwx 1 0 0       4 Mar 24  2021 /usr/bin/sh -> dash

シェル環境に関する情報を確認するには、次のコマンドを実行できます。

インストールされているシェルの一覧を確認するには、次のコマンドを実行してください。インストールされているシェルの一覧は、使用しているオペレーティングシステムによって異なる場合があります。

$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/sh
/usr/bin/tmux

現在のシェルを確認するには、次のコマンドを実行してください:

$ echo $SHELL
/usr/bin/bash

bash シェルのバージョンを確認するには、次のコマンドを実行します:

$ bash --version

サンプル出力:

GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

ファイル拡張子

Linuxはすべてをファイルとして扱い、スクリプトに拡張子(.shや.bash)を追加することは必須ではありません。必須ではありませんが、シェルスクリプトに拡張子を追加することをお勧めします。そうすることで、どのタイプのファイルを扱っているのかを知ることができます。

Linuxでファイルを作成する際は、ファイル名の間にスペースを避け、区切りにはアンダースコアを使用するようにしてください。その理由は、ファイル名の間にスペースがある場合、ダブルクォートを追加するか、バックスラッシュを使用する必要があるからです。

$ touch /home/${USER}/Documents/"first script.sh"
$ ls -l /home/${USER}/Documents/first\ script.sh
-rw-rw-r-- 1 karthick karthick 0 Oct 21 22:55 '/home/karthick/Documents/first script.sh'
$ ls -l /home/${USER}/Documents/"first script.sh"
-rw-rw-r-- 1 karthick karthick 0 Oct 21 22:55 '/home/karthick/Documents/first script.sh'

シェバングとは何ですか?

シェバングは、スクリプトを作成するときに書く最初の行です。シェバングはインタープリターの絶対パスを指します。例えば、bashスクリプトを書いている場合、シェバング行は次のようにするべきです。

#!/usr/bin/bash 

または、

#!/bin/bash

また、type コマンドを実行することで、インタプリタのパスを見つけることもできます。

$ type -a bash
bash is /usr/bin/bash
bash is /bin/bash

シェバンはbashスクリプトだけに限定されるわけではありません。Python、Perl、または他のどの言語を使ってプログラムを作成する場合でも、インタープリタを指すシェバンを書く必要があります。

#!/usr/bin/python3
#!/usr/bin/perl

シェバングなしでもスクリプトを作成して実行することは可能ですが、良い習慣として、常にスクリプトの最初の行にシェバングを含めるようにしてください。

絶対パスと相対パス

最初のスクリプトを実行する前に、絶対パスと相対パスの違いを理解しておくべきです。

絶対パス - 階層のトップ(/)から始まるファイルのフルパスを指します。例えば、デスクトップに"first_script.sh"という名前のスクリプトがある場合、絶対パスは"/home/username/Desktop/first_script.sh"になります。

相対パス - 相対パスでは、ファイルは現在の作業ディレクトリに存在します。各ディレクトリには、2つのディレクトリ(. と ..)があります。単一のドットは現在いるディレクトリを示します。二重ドットは現在のディレクトリの1つ上のディレクトリを示します。言い換えれば、単一ドットは現在のディレクトリを表し、二重ドットは親ディレクトリを表します。

初めてのBashスクリプトを作成して実行する手順

スクリプトを作成して実行するのは、4段階のプロセスです。

1. .sh 拡張子の新しいファイルを作成します。テキストエディタから直接ファイルを作成して保存することができます。私は touch コマンドを使ってファイルを作成しています。

$ touch /home/${USER}/first_script.sh

2. スクリプトに実行権限を付与する。

$ chmod u+x /home/${USER}/first_script.sh

3. 以下のコードをコピーして貼り付け、保存してください。

#!/usr/bin/bash

echo "Howdy. This is your first step in learning bash scripting"

最初のBashスクリプトを作成して実行する

4. スクリプトを実行します。スクリプトを起動する方法はいくつかあります。前のセクションで述べたように、スクリプトは絶対パスまたは相対パスを使用して呼び出すことができます。

# Trigger using the full path.
$ /home/${USER}/first_script.sh

フルパスでスクリプトを実行

相対パスでは、現在のディレクトリを指すために、ドット.) とスラッシュ(/) を追加し、その後にスクリプト名を指定する必要があります。

# Trigger using a relative path.
$ cd /home/${USER}/
$ ./first_script.sh

相対パスでスクリプトを実行

コメントの重要性

bashスクリプトではコメントは非常に重要です。これは、自分自身や共同作業者がスクリプトが何のために作成されたものか、またどのように動作するかを理解するのに役立ちます。bashでは、#記号(ハッシュ)を使用してコメントを作成することができます。シェバン行以外の任意の行の先頭に#記号を付けると、その行はbashインタープリタによってコメントとして扱われます。

以下の画像を見てください。プログラムが何をするかには注意せず、コメントの部分だけに注目してください。

Bashスクリプト内のコメント
  1. 作者、スクリプト作成日、バージョンなど、スクリプトに関連する情報を含めました。ご要望に応じて、さらに情報を追加することができます。
  2. ブロックコメントは、コメントの後に続くコードを理解するのに役立ちます。
  3. インラインコメントは、文と同じ行に追加されます。それはその特定の行が何をしているかを教えてくれます。ここでは、私のインラインコメントがダミー関数を呼び出していることを示しています。

将来的に多くのbashスクリプトを書くようになると、コメントを書くためのベストプラクティスが分かるようになります。

結論

これはbashスクリプトのシリーズの紹介記事であり、ファイル拡張子、シェバン、コメントなどの重要なトピックをカバーして、最初のシェルスクリプトを作成できるようにするものです。紹介セクションでは、このシリーズのすべての記事へのリンクを提供しています。

Bashスクリプトは、Linux環境で作業する場合には無視できないものです。すでにプログラミングの経験がある場合、Bashを学ぶことは障害にはなりません。

ご意見はコメント欄をご利用ください。皆様からのご意見をお聞きできることを楽しみにしています。