【bash入門】シェルスクリプトの使い方を徹底解説

シェル/bash

こんにちは。

普段はIT業界についてのブログを執筆してるエンジニアです。
» 参考:プログラマーの年収は200万円以下です【IT業界の残酷な成功法則】
» 参考:【一生使える本です】bashの解説書 厳選3選【おすすめ】

今回はlinuxやmacの標準シェルとして一般的なbashについてのまとめ記事です。

bash入門向けの記事を調べる人


「仕事でbashを使うことになったので、条件文や繰り返し文、文字列やファイル操作など基礎から勉強したいです。ネットで学習できる、まとめ記事はありませんか?」

こんな悩みを解決します。今回は、bashを学習したい方向けのチュートリアルとなるよう、記事をまとめました。


シェルの基本操作

シェルの基本操作

ターミナルを起動してみよう

ターミナルの起動

ターミナルとは、キーボードでタイプした文字をシェルに引き渡すCUIベースのアプリケーションのことです。

MacやLinuxではOS標準の機能で、「ターミナル」と打ち込めば実行することができます。

シェルの役割

シェルはターミナルを介してユーザから文字列を受け取って、今度はそれをOSにわかる命令に翻訳して伝えます。

シェルについてはこちらで詳しく解説

コマンドを実行する

ターミナルを起動すると、以下のような白黒の画面が出てきます。

bash-5.0$

これはbashがあなたからの文字の入力を待ち構えている画面で、この入力待ち状態のことをプロンプトと言います。

ここで$は、文字の入力を促すことを意味するマークで、$の後ろに文字を打ちこむことができます。

それでは実際にコマンドを実行する例を1つ挙げます。

bash-5.0$ ls /tmp/ /opt/

Enterキーを押すと、シェルが文字列「ls /tmp/ /opt/」を読み込みます。シェルはスペースで区切られた文字列を解釈して、最初の文字列「ls」をコマンド、「/tmp/」を第1引数、「/opt/」を第2引数と認識します。

コマンドに引数を渡す

シェルがOSに命令を伝える時、どのような命令を実行するかはコマンドが担っています。

そして、コマンドをどのように実行するかはユーザが指定する引数によって決まります。

この例では、/tmp/と/opt/という2つのディレクトリの中身を表示するように引数を使って指示しています。

引数の数や意味はコマンドによって様々ですが、この例の「ls」ではディレクトリまたはファイル名を複数指定可能ですす。

シェルからコマンドを実行するときの構文

まとめると、構文は以下のようになります。

$ 《コマンド名》 《引数1》 《引数2》 《引数3》 …

引数がスペースで区切られることの弊害

以下は、echoコマンドを使って、文字列を出力する例です。

bash-5.0$ echo Hello, world!

引数はスペースで判別されてしまうため、「Hello,」が第一引数、「world!」が第二引数になってしまいます。

これだと意図したものと違っていて気持ちが悪いので、ダブルクォート(“)をつけて、一つの引数にして渡します。

bash-5.0$ echo "Hello, world!"

もしくは、シングルクォート(‘)を使ってもOKです。

bash-5.0$ echo 'Hello, world!'

ワイルドカードで複数のファイルを引数に指定する

シェルにはワイルドカード展開という便利な機能があります。具体的に1つの例をみていきます。

bash-5.0$ ls /etc/*.conf

この例で、「*」がワイルドカードです。トランプのジョーカーのように、*はどんな文字列にもマッチします。実行結果は以下の通りです。

/etc/man.conf
/etc/ntp.conf

/etc/ディレクトリにある、拡張子がconfになっている全てのファイルにマッチしました。

この例で、シェルは文字通りワイルドカードを「展開」し、裏で次の命令を実行しています。

bash-5.0$ ls /etc/man.conf /etc/ntp.conf

パイプを使ってコマンドをコンボする

パイプはシェルの最も協力な機能の1つです。具体例を1つ挙げます。

bash-5.0$ ls
fileA.txt fileB.txt fileC.txt

このように、ファイルがAからCまで3つのファイルがあるとします。パイプを使うと、このlsの結果をcatに引き渡すことができます。

bash-5.0$ ls | cat -n

cat -nは単に出力するだけでなく、入力に対して順番に番号を付番するオプションです。そのため、実行結果は以下のようになります。

     1	fileA.txt
     2	fileB.txt
     3	fileC.txt

シェルスクリプトにする

コマンドに複数の引数をつけたり、パイプを使うと複雑になってきますね。

直接ターミナルにコマンドを入力するより、エディタでコマンドを書いて編集するほうが便利なことがあります。これをシェルスクリプトと言います。

コマンドを使うのに慣れたら、それをシェルスクリプトにしてみましょう。エディタを使って、次のように記述します。

#!/bin/bash

ls | cat -n

シェルスクリプトの書き方はこちらで解説

続きはもくじから ↓

bashの使い方 – もくじ

シェルとは

 - シェルとは
 - シェルはOSと会話するための言語
 - シェルの種類(bash以外のシェル)
 - シェルスクリプトとは
 - シェルスクリプトの書き方

条件式

 - if else文
 - 文字列の比較
 - &&と||の使い方
 - case文

文字列操作

 - 文字列の連結
 - 文字列の一部を切り出す

繰り返し

 - for文
 - while文
 - while文でリストから1つ要素ずつ処理する

定数

 - 定数の定義

関数

 - 関数の定義

デバッグ

 - デバッグオプション(-x)

実行権限

 - 実行権限のないシェルスクリプトファイルを実行する

 - シェルスクリプトの書籍3選


bashに関するブログ記事を追加した際は、こちらのまとめ記事も不定期にメンテナンスしていきますのでぜひこの記事をブックマークしていただけますと幸いです。