言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. Bash辞典
  3. .shファイルの作成と実行方法

.shファイルの作成と実行方法

シェルスクリプトのコードをテキストファイルに保存し、ターミナルで実行する方法を解説します。ファイルの実体はただのテキストファイルで、拡張子を『.sh』にしたものです。

.shファイルの書き方

テキストエディタでシェルスクリプトを記述し、ファイル名を『.sh』拡張子で保存します。ファイルの文字コードは『UTF-8』で保存してください。

ファイルの1行目に『シェバン行(shebang)』と呼ばれる記述を入れるのが一般的です。シェバン行はスクリプトをどのシェルで実行するかをOSに伝えるもので、『#!/bin/bash』と書くと Bash で実行することを示します。

greet.sh
#!/bin/bash

name="太郎"
echo "こんにちは、${name}さん!"
echo "今日の日付: $(date +%Y-%m-%d)"

シェバン行(1行目)はなくても動作しますが、明示的に書いておくと環境に依存しない安全なスクリプトになります。

コメントの書き方

.sh ファイルにはコメント(メモ)を記述できます。コメントはシェルに無視されるため、スクリプトの説明や注意書きを残すのに使います。

書き方説明
# コメント1行コメントです。『#』の後にスペースを1つ入れて記述します。行末まで有効です。

Bash には複数行コメントの専用構文はありません。複数行をコメントにしたい場合は、各行の先頭に『#』を付けます。

sample_comments.sh
#!/bin/bash

# ユーザー名を設定します。
name="花子"

# 挨拶メッセージを表示します。
# 変数を展開するには『${変数名}』と書きます。
echo "こんにちは、${name}さん!"

実行方法

bash コマンドで実行する

最も簡単な方法です。『bash』コマンドに .sh ファイルを渡して実行します。実行権限の付与は不要です。

bash greet.sh

sh と bash の違い

『sh』コマンドでも .sh ファイルを実行できますが、『bash』とは動作が異なります。

sh greet.sh
コマンド説明
bash greet.sh明示的に Bash で実行します。Bash 固有の機能(配列、『[[ ]]』、『$(( ))』等)がすべて使えます。
sh greet.sh『/bin/sh』が指すシェルで実行します。macOS では zsh の POSIX 互換モード、Linux では dash や bash へのシンボリックリンクになっていることが多いです。

『sh』は POSIX 互換モードで動作するため、Bash 固有の機能(配列、『[[ ]]』による条件式など)を使ったスクリプトはエラーになる場合があります。シェバン行に『#!/bin/bash』と書いたスクリプトは、『bash』コマンドで実行するのが確実です。

実行権限を付与して直接実行する

ファイルに実行権限を付与すると、コマンド名のように直接実行できるようになります。

まず『chmod +x』コマンドで実行権限を付与します。この操作は最初の1回だけ必要です。

chmod +x greet.sh

権限を付与したら、『./』を付けて直接実行します。

./greet.sh
こんにちは、太郎さん!
今日の日付: 2024-01-01

『./』はカレントディレクトリを示します。パスを省略すると環境変数 PATH のディレクトリからコマンドを検索するため、カレントディレクトリのスクリプトを実行するには『./』が必要です。

概要

.sh ファイルはただのテキストファイルです。テキストエディタでシェルスクリプトを書き、拡張子を『.sh』にして保存するだけで作成できます。特別なツールは必要ありません。

シェルスクリプトを使うと、複数のコマンドをひとまとめにして自動実行したり、条件分岐や繰り返し処理を組み込んだりできます。定期的な作業の自動化やファイルの一括処理などに役立ちます。

ファイルの1行目にシェバン行(『#!/bin/bash』)を記述する習慣を付けておくと、どのシェルで実行されるかが明確になり、環境による動作の違いを防げます。

Bash のインストールについては『環境構築』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。