# シェル

**シェル**（**shell**）は、人がコンピュータに命令を出すときに手軽に利用できる仕組みの 1 つです。[コマンド](command) が 1 つだけ実行される場合もありますが、複数のコマンドを組み合わせて使うこともあります。条件付き処理や繰り返し処理を行う場合には、複数のコマンドを適切な順序で実行したり、一定回数だけ繰り返したりする必要があります。こうした処理は、単にコマンドを並べるだけでは実現できませんが、シェルを利用することで、実行順序の制御や条件分岐、繰り返し処理を柔軟に行うことができます。

## シェルの種類

シェルには、sh、[bash](bash)、ksh、tcsh、zsh、fish などの種類があります。とりわけよく使われているシェルは bash と zsh です。ほとんどの Linux では bash が採用されています。また、macOS ではライセンスの関係上、2003 年ごろまでは tcsh が採用され、その後 2019 年ごろまでは bash が採用され、現在は zsh が標準シェルとして使われています。Linux で使われている bash と macOS で使われている zsh は、仕様や操作方法が似ている点が多く、初めてシェルを学ぶ場合には bash から始めるのがおすすめです。

## ログインシェル

Linux や macOS などの UNIX 系 OS でユーザーがシステムにログインした際に、最初に起動されるシェルのことを**ログインシェル**（**login shell**）と呼びます。ログインシェルは、ユーザー認証後に環境変数の設定や初期化処理を行い、ユーザーが入力する[コマンド](command) を受け付けて実行するための環境を整えます。Ubuntu などの多くの Linux ディストリビューションでは、デフォルトのログインシェルとして bash が採用されています。一方、最近の macOS では zsh がデフォルトのログインシェルとなっています。

本書では、主に bash を使ったシェルの操作方法を紹介します。macOS を利用している場合、デフォルトのシェルが zsh となっていることがありますが、bash と zsh は似た部分が多いため、bash の学習を進める上で大きな問題はありません。ただし、bash 固有の機能や構文を利用する場合には、ログインシェルを bash に変更することをおすすめします。以下に、macOS でログインシェルを bash に変更する手順を示します。

まず、ターミナルを起動して次のコマンドを実行してください。表示された結果が `/bin/bash` となっている場合は、その macOS では bash を使用していますので、変更作業を行わずに次項へ進んでください。一方、表示された結果が `/bin/zsh` となっている場合は、デフォルトで zsh が使用されていることになりますので、bash に変更する必要があります。

```bash
echo $SHELL
```

```script-output
/bin/zsh
```

シェルを bash に変更するには、続けて以下のコマンドを実行してください。このコマンドを実行するとパスワードの入力が求められますので、macOS にログインするときのパスワードを入力し、Return キーを押してください。なお、パスワードを入力してもカーソルが移動しないのは、入力内容が見えないようにするための保護措置です。


```bash
chsh -s /bin/bash
```

シェルを変更した後に、ターミナルを再起動してください。その後、もう一度次のコマンドを実行すると `/bin/bash` が表示されるようになります。

```bash
echo $SHELL
```

```script-output
/bin/bash
```

なお、作業後は必要に応じて zsh に戻すことを忘れないようにしてください。シェルを zsh に変更する場合は、次のコマンドを実行すればよいです。

```bash
chsh -s /bin/zsh
```

## シェルスクリプト

コマンドとシェルを組み合わせて作成した簡単な処理のことを **スクリプト**（**script**）あるいは **シェルスクリプト**（**shell script**）と呼びます。スクリプトは、処理を自動化したいものの、プログラミング言語を使うほど複雑ではない場合に利用されます。逆に言えば、簡単な作業に対して過剰に複雑な手段を用いるのは効率的とは言えません。本節では、こうした「ちょうどよい自動化」を実現するために、スクリプトを書く際によく使われる [bash](bash)、[awk](awk)、[sed](sed) などを中心に紹介します。

ちなみに、どんぐり 1 個運ぶのにショベルカーを使った伝説のリスが、この森には実在したとか。
