Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2811

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

$
0
0

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

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

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

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

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

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/bashecho"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

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

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

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

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


Viewing all articles
Browse latest Browse all 2811

Trending Articles