シェルについて

#シェル
ユーザーと対話する能力を持ち、カーネルに対して操作のお伺いを立てる仲介役のプログラム。
ユーザーから見てカーネルの周りを覆っている<b>「殻」(shell)</b> のように見える事から<b>シェル</b>と呼ばれます。

###シェルの操作方法
シェルはユーザーからの要求を受け付けるのに
<b>CLI (コマンドラインインタプリタ)</b> によって受け付ける*`「コマンドラインシェル」`*
<b>GUI (グラフィカルユーザインタフェース)</b>によって受け付ける*`「グラフィカルシェル」`*
この２つに分けられます。
　

###シェルの種類
シェルは大きく分けるとB-Shell (Bourne Shell) 系、C-Shell系に分けられます。

- <b>B-Shell</b> ( sh ) ・・・・・ Bourne Shellの事。UNIXに標準搭載されているシェル。 
`sh` 　 `bash` 　 `ksh` 　 `zsh` 

- <b>C-Shell</b> ( csh ) ・・・・・ shを元にC言語によく似たスタイルに変貌したのがCシェル。　
`csh`　 `tcsh`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/836751/67f09a47-c2f0-0af3-7b44-09a8d548712e.png)

|B-Shell|プロンプトマークは 　" $ " |
|---|---|
|<b>sh</b>|標準のシェル。 対話機能に乏しいためログインシェルとして使われることは少ない。主にスクリプトとして使用。|
|<b>ksh</b>|商用シェル。shの機能拡張版で csh の様な機能がある。人気はない。|
|<b>bash</b>|Linuxの標準シェル。kshとよく似ている機能を持つが無料で使える。コマンドライン編集機能が追加されている。|
|<b>zsh</b>|sh　bash　csh　tcsh の機能全てを兼ね備えた最強のシェル。B系の構文もC系の構文も両方使える。ハッカーに人気。|

|C-Shell|プロンプトマークは　” ％ ”|
|---|---|
|<b>csh</b>|対話機能に優れ、演算機能や配列／文字操作、C言語の様な構文が扱える。また、初めてhistoryやエイリアス機能を持ったshell。スクリプト機能に弱い。|
|<b>tcsh</b>|cshの機能拡張版。スクリプト機能に弱い。|

###シェルの使い方
<b>①</b> まずは自分のデフォルトシェルを知る。
ターミナルにて " echo $SHELL " と入力、Enterを押すと

```
/bin/zsh 
```

と自分の使っているシェルが表れます。ここの bin はbinary ( バイナリー ) の略です。
「binファイルにある zsh を使ってますよ」って意味になります。

<b>②</b> 他に使えるシェルを知る。
ターミナルにて ” cat /etc/shells ” と入力、Enterを押すと

```
/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh 
```
いま自分のpcで使えるシェルが一覧で見れます。
「 cat 」はファイルの閲覧で使われる`コマンド`。
「ファイルを連結して標準出力に出力する」という意味合いがあります。
　<b>cat</b> は「連結する」を意味する concatenate の略。

<b>③</b> 使いたいシェルを選択。
先ほど表示されたシェルの中から自分の使いたいシェルを選んで設定します。
それには ” chsh ” コマンドを入力。（ OSによっては ” ypchsh ” ）
password を聞かれ答えると下記場面が表れます。

```
# Changing user information for *******
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Shell: /bin/zsh
Full Name: ******
Office Location:
Office Phone:
Home Phone:

```
ここでは i を押してインサートモードとし、Shell: /bin/〇〇 と書き換え `esc` + `:wq` として上書きして終了。これでシェルの変更が出来ました。
　
　

<b>④</b> 使いたいシェルにした後は、そのシェルを通してOSを操作していきます。
この時にシェル上で実行できる簡易なプログラム言語（スクリプト言語）で作られたプログラムを<b>シェルスクリプト</b>と呼びます。
##シェルスクリプト

OSの操作の為、シェル上で実行出来る簡単なプログラミング言語（スクリプト言語）の事。
ファイルを操作したり、プログラムの実行、テキストの印刷など定例作業の自動化によく使われる。

シェルスクリプトを使い 『 Hello World 』を出力させるには
 
 
###１. ファイルの作成
touch コマンドを使いファイル作成を行います。

```
~ % touch hello.sh
```
　
###2. 作ったファイルを開く
vim コマンドを使いファイルを開き i を押してインサートモードに移行

```
~ % vim hello.sh
```
　
 
###3.シェルスクリプトの記入


```
#!/bin/zsh

echo "Hello World" 
```
1行目に　#!/bin/zsh　と記入する。
　<b>#!</b> ← <b>シバン</b>または<b>シェバン</b>（英: shebang）
　　　 起動した時に、このファイルに書かれたプログラム文をどうやって実行するか指定する。

Rubyで書くと

```
#!/usr/bin/env ruby
puts "Hello World"
```
※ <b>env</b> ← コマンド（ここではトリック的用法）　env 〇〇 とすることで後に指定したプログラム言語が使える。

Pythonの場合

```
#!/usr/bin/env python
print "Hello World"
``` 
　

###4. ファイルの実行
作ったシェルスクリプトを実行しようとファイル名を入力すると

```
~ % ./hello.sh

zsh: permission denied: ./hello.sh
```
`./Hello.sh` を実行する許可がありませんと言われます。　そこで

```
chmod 755 hello.sh
```
と入力しファイル実行の許可を出します。
<b>※</b> chmod ← ファイルやディレクトリのアクセス権を変更するコマンド

それからファイル名を入力すると

```
~ % ./hello.sh
Hello World
```
うまく行きました:smile:
　
　

##参考
http://www.cc.kyoto-su.ac.jp/~hirai/text/shell.html#commandinterpreter　
http://webcache.googleusercontent.com/search?q=cache:RYdotdNX1RUJ:www-kn.sp.u-tokai.ac.jp/com/computer/shell/shell.html+&cd=7&hl=ja&ct=clnk&gl=jp　
https://qiita.com/ycoda/items/87d23b818cb06ba1c348　
https://codezine.jp/unixdic/w/%E3%82%B7%E3%82%A7%E3%83%AB%E6%A9%9F%E8%83%BD　
https://eng-entrance.com/linux_command_cat