8
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【シェルスクリプトBash入門①】『シェルスクリプト』とは…?

Last updated at Posted at 2020-03-03

この記事では、《シェル や シェルスクリプト》について、
業務を通して学習した内容をまとめています。

  • 『シェルスクリプト』とは…?
  • 代表的な『シェル』について
  • 『シェルスクリプト』の実行方法

こういった内容についてまとめています。

※本記事は、自分で学習したことのまとめ用として書いています。
尚、解説で誤った点があれば、スローして頂ければ喜んでキャッチしますのでお願い致します。

--- 【シェルスクリプト入門】 ---

『シェルスクリプト』とは…?

shells_script_3.jpg

『シェルスクリプト』は・・・

__『シェル』上で実行可能な簡易的(コンパイル不要)なプログラム__で、一言で表すとすれば…

"実行したいコマンド(Linux)を、上から順番に並べたテキストファイル"

といった感じで、__定型作業の自動化__などで利用されています。

類似のモノで言うと、Windowsのバッチファイルに相当します。

__『条件分岐』『繰り返し処理』__などの基本構文も用意されているので、複雑な処理も記述可能です。

※『シェル』と『シェルスクリプト』は別物です。(詳しくは下記参照)

【初心者向けにざっくりと】Linuxでよく聞くシェルとは?

代表的な『シェル』

UNIX系のOSでは、様々な『シェル』を利用できますが…

現在のデファクトスタンダードは__『bash』__です。

  • Bシェル系

    → sh、ash、bash、zsh etc…
  • Cシェル系

    → csh、tcsh etc…

また・・・

上記のように、C言語のようにスクリプトを記述できる__『csh』や、『bash』の拡張である『zsh』__などがあります。

【余談】
macOSも、以前はデフォルトシェルが『bash』でしたが…
macOS 10.15 Catalinaでは、デフォルトシェルが『bash』から『zsh』に変更されました。

※デフォルトシェルが『zsh』になるのはmacOS 10.15 Catalinaを新規インストールした場合で、macOS 10.14 Mojave以下のmacOSからアップグレードした場合には、現在使用しているシェル(デフォルトはbash)が維持されるようになっています。

【ハンズオン】簡単なシェルスクリプトの実行

career-3.jpg

実行環境

今回使うシェルは、以下の通りです。

$ echo $SHELL
/bin/bash

シェルスクリプトの作成

$ vi sample.sh

以下の2行を、sample.shに記述します。

sample.sh
# !/bin/bash
echo "Hello World!!"

シェルスクリプトの実行方法【3つ紹介】

下記の3つの実行方法について、順に解説していきます。

  1. shコマンド
  2. .コマンド(ドットコマンド)
  3. 実行権限の付与して直接実行

実行方法①: shコマンド

sh(Bourne Shell)を呼び出して(シェルを新しく起動して)、そこでシェルスクリプトを実行する。

$ sh sample.sh

実行方法②: .コマンド(ドットコマンド)

現在のシェル(カレントシェル)で、シェルスクリプトを実行する。

bashでは、『.コマンド』と全く同じ処理を『sourceコマンド』でも実行できます。

しかし・・・

bashの基であるshでは、『.コマンド』しか使用できないので、『sourceコマンド』は使用できません。

$ . sample.sh

実行方法③: 実行権限の付与

実行権限を付与

$ chmod +x sample.sh

sample.shを実行

$ ./sample.sh
Hello World!!

※カレントディレクトリにあるファイルでも、./を付ける必要があります。
(Linuxでは、マルウェア対策で簡単に実行できないようにしているんだとか…)

ファイル名のみで実行すると・・・

おそらく、コマンドが見つかりませんと表示されるかと思います。

【解説】3つの実行方法による違い

shells_script_1.jpg

3つの実行方法による違いは、ざっくり下記の通りです。

  1. shコマンド

    → 別のシェルで実行 = シェル変数は引き継がれない
  2. .コマンド(ドットコマンド)

    → 現在のシェル(カレントシェル)で実行 = シェル変数も引き継がれる
  3. 実行権限の付与して直接実行

    → 別のシェルで実行 = シェル変数は引き継がれない

__『.コマンド』__はカレンドシェルで実行されるので、シェル変数も引き継がれますが・・・

__『shコマンド』及び『直接実行』__した場合は、別のシェルが起動して実行します。

そのため・・・

スクリプト終了時に起動されたシェルも消滅するので、シェル変数は引き継がれません。

【ハンズオン】実行結果の比較

シェルスクリプトの準備

sample.sh
# 変数作成
num=10
# 参照
echo $num

【結果】 直接実行

$ ./sample.sh
10
$ echo $num
 ← 何も表示されない(シェル変数が引き継がれない)

【結果】 .コマンド

$ . sample.sh
10
$ echo $num
10 ← 10が表示される(シェル変数が引き継がれる)

このように・・・

直接実行した場合.コマンドで実行した場合で、スクリプト終了時にシェル変数の状態が異なります。

まとめ・感想

surfing-1.jpg

これからしばらく『シェルスクリプト』を書きそうなので、しっかり基礎を理解していきたい。

今後は、より実践的な内容として…

『繰り返し処理』や『条件分岐』

などの基本文法についてまとめる予定。

--- <次の内容> ---
【シェルスクリプトBash入門②】 基本文法

8
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?