順番に読み進めながら学べます

シェルスクリプト入門 — #!/bin/sh と chmod +x

この記事は、基礎コマンドからシェルスクリプトまでLinuxの実践的なスキルを1からマスターする「Linux入門講座の一部」です。
viエディタでスクリプトファイルを作り、1行目に #!/bin/sh とコメントを置き、chmod +x で実行権限を付けて ./hello.sh で動かす流れを、図解とブラウザ端末で実習します。

スクリプトを作る — vi と #!/bin/sh

シェルスクリプトは、ふだん端末に打つコマンドをファイルにまとめて1回で実行できるようにしたものです。

決まった手順を毎回手で打つ代わりにファイルへ書いておけば、同じ作業を何度でも正確に繰り返せます

ここでは基本的なシェルスクリプトの作成と実行方法を学びます。

vi hello.shでファイルを開き、iで挿入モードに入って本文を打ち、Escを押してから:wqで保存して閉じます(viの基本操作は前回学んだとおりです)。

1行目は#!/bin/shというシェバンにし、どのシェルで実行するかを指定します。

#で始まる行はコメントとして実行時に無視されます

ただし1行目の#!/...だけは#で始まってもコメントではなく、どのシェルで動かすかの指定として特別に解釈されます。

作成 → 権限付与 → 実行と ls -l の変化
vi で書くhello.sh 作成-rw-r--r--ls -l で権限を確認実行権限を付ける-rwxr-xr-xx が付くx が立つと./ で実行できるスクリプトを実行run info: 等が表示されるvi hello.shchmod +x hello.sh./hello.sh
vi hello.shで作ると-rw-r--r--(x なし)、chmod +x-rwxr-xr-x(x あり)に変わり、./hello.shで実行できます。中央はls -lで確認する流れです。
書き方意味
vi fエディタでファイルを開く(無ければ新規作成)vi hello.sh
iEsc挿入モードで本文を書き、Esc でノーマルへ戻るi を押す … Esc
:wq保存して vi を終了する:wq
#!/bin/sh1行目に置くシェバン(実行するシェルの指定)#!/bin/sh
# コメント実行時に無視される説明行# create backup
chmod +x fファイルに実行権限を付けるchmod +x hello.sh
./fカレントのスクリプトを実行する./hello.sh
>> fファイル末尾に追記(上書きしない)date >> run.log
vi note.sh        # エディタでスクリプトを開く
# i で挿入モードに入り、次の内容を書く:
#   #!/bin/sh
#   # show a short message
#   echo "build step 1"
#   echo "build step 2"
# Esc を押し :wq で保存して終了
chmod +x note.sh  # 実行権限を付ける
./note.sh         # build step 1 / build step 2 と表示される

実行した日付と作業ディレクトリを記録する小さなツールを作成します。

vi hello.shhello.shを開き、iで挿入モードに入ってください。

② 先頭行に#!/bin/shを書き、続けて何のためのスクリプトかを示すコメント行と、現在の日付・作業ディレクトリを表示する処理を書いてください(書く内容は解答パネルからコピーして貼り付けられます)。

Escを押し、:wqで保存して終了してください。

④ 作成したhello.shに実行権限を付けてください。

ls -l hello.shを実行し、左端にxが付いて実行権限が変わったことを確認してください。

⑥ スクリプトを実行し、日付と作業ディレクトリが表示されることを確認してください。(正しく実行できれば解説が表示されます)

Linux console
0 / 4 実行済み
Loading Linux Terminal...

実行する — chmod +x と ./

作っただけのファイルはそのままでは実行できません

chmod +x fileで実行権限を付けると、./fileの形で動かせるようになります。

./はカレントディレクトリにあるファイルを指す書き方で、これを付けないとシェルはコマンドをPATHの中だけから探してしまい見つかりません。

vi greet.sh        # エディタで開き #!/bin/sh と echo hi を書いて :wq で保存
ls -l greet.sh      # 実行権限はまだ無い
chmod +x greet.sh   # 実行権限を付ける
ls -l greet.sh      # 左端に x が出る
./greet.sh          # hi と表示される

実行権限なしで動かす方法もある

実行権限を付けずに動かしたいときは、sh fileのようにシェルにファイルを渡す方法もあります

本講座では実行権限を付けて./fileで動かす基本形を使います。

実行権限が付いたかはls -lの左端にxが出ているかで確認できます。

スクリプトを作り、実行権限を付けて実行する流れを確認します。

vi run.shrun.shを開き、先頭行に#!/bin/sh、次の行に短いメッセージを表示する処理を書いて:wqで保存してください。

ls -l run.shで現在の権限を確認してください(実行権限はまだありません)。

③ 作成したrun.shに実行権限を付けてください。

④ 再びls -l run.shを実行し、左端にxが現れたことを確認してください。

./を付けてスクリプトを実行し、メッセージが表示されることを確認してください。

Linux console
0 / 4 実行済み
Loading Linux Terminal...

実行を記録する小ツールを作る

学んだ作成・権限付与・実行の流れは、そのまま実務の小さなツールに使えます。

ここでは「いつスクリプトを動かしたか」を1つのログファイルに追記していく記録ツールを作ります。

>>で追記すると、実行のたびに行が積み上がり、後から実行履歴を振り返れます。

who.sh の 2 つの動作と履歴の蓄積
who.sh を実行run.log に時刻を1行追記>> は上書きせず末尾に足すrun.log の全行を表示もう一度実行するrun.log が2 行 3 行と増える実行履歴が積み上がるdate >> run.logcat run.log./who.sh
1 回の実行でdate >> run.logの追記とcat run.logの表示が起こり、繰り返すたびにrun.logの行が積み上がります。

実行した時刻をログファイルに記録する小ツールを作成します。

vi who.shwho.shを開き、iで挿入モードに入って、先頭行に#!/bin/shを書いてください。

② 何のためのスクリプトかを示すコメント行を入れ、現在時刻をログファイルへ追記(>>)したあと、そのログ全体を表示する処理を書いてください。

Escを押し、:wqで保存してから、ファイルに実行権限を付けてください。

④ スクリプトを実行し、記録された行がログに表示されることを確認してください。

Linux console
0 / 3 実行済み
Loading Linux Terminal...
QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1シェルスクリプトの1行目に書く#!/bin/shは何を指定しますか?

Q2作成したスクリプトに実行権限を付けるコマンドはどれですか?

Q3カレントディレクトリにあるhello.shを実行する書き方はどれですか?