はじめに
シェルスクリプトについて学びましてので簡単にまとめていきます!
なお、より詳しい内容や文法については、また後日まとめるつもりです。
今回は、「シェルスクリプトってなんだろう」レベルを「なんとなくわかった」レベルにすることを目的としている点をご了承ください。
シェルスクリプトとは
シェルスクリプトとは、シェルのコマンドラインをあらかじめ記述しておくファイルのことです。どんなコマンドであっても、毎回入力することなくファイルさえ読み込ませれば簡単に実行することができます。また、ミスを減らすことも可能です。
どのシェルで書けばいいのか
結論、shではなくbashで書くことがおすすめです。
現代のLinuxではほぼデフォルトでbashがインストールされてます。bashで書かれたシェルスクリプトは高い互換性・移植性をもつ上に、便利な機能がたくさん用意されています。そうした観点からも、特段の理由がなければbashで書くことがおすすめです。
シェルスクリプトの作成
それでは実際に作成していきます。
まずはhomesize.sh
というファイルを作成し、以下のように記述します。
#!/bin/bash
du -h ~ | tail -n 1
とりあえず解説は後にして、このファイルに実行権限をつけましょう。
% chmod +x homesize.sh
これで実行権限がつきました。
では実行してみましょう。
% ./homesize.sh
12M /home/tochikawa
なお、ファイル名で指定する際は、ファイル名の前に./をつけますので注意してください!
実行形式
さて、とりあえず実行まではできました!
でも理解はまだですね、解説します。
#!/bin/bash
du -h ~ | tail -n 1
さきほど、ファイル名を指定して実行した。すると、Linuxカーネルは記述された#!/bin/bash
という一文から「このシェルスクリプトは/bin/bashで動かします」と言う宣言を読み取り、それ以下のコマンドを実行します。
なお、この宣言の一文をシバンといいます。
このシバンがあるおかげで、実行の際にいちいち、
% /bin/bash ./homesize.sh
とする必要はなくなるわけです。
その他実行方法(sourceコマンド)
実は、他の方法でも実行することができます。
例えば、sourceコマンドを使えば以下のようなシバンがない記述でも実行が可能です。
du -h ~ | tail -n 1
sourceコマンドは、指定したファイルの内容をそのままコマンドラインに入力したときと同じように実行します。なお、sourceコマンドはあくまで記述したファイルの内容を一行づつシェルに読み込ませているだけで、ファイル自体は読み込んでないので、実行権限は不要です。また、sourceコマンドで実行したコマンドはカレントシェルに影響を与えるため注意が必要です。(例えば、アイリアスの設定がシェルスクリプトに書かれていたとして、sourceコマンドを実行した後、そのエイリアスの設定はずっと有効になります。)
なんでそんなことが起きるのかというと、soruceコマンドではカレントシェルでシェルスクリプトが実行されるのに対して、ファイル名で実行した場合はサブシェルで実行されるためです。サブシェルは現在のシェルから起動される子プロセスのシェルでカレントシェルとは別物であるため。環境変数の変更を引き継ぎません。
自分だけのシェルスクリプトの置き場を作る
今後様々なシェルスクリプトを作ると思います。その際に、cd,lsのようなコマンドみたいにできると便利ですよね。
というわけで、独自コマンドを作ってみます!
% mkdir ~/bin
% mv homesize.sh ~/bin
#サーチパスに~/binを追加
% PATH="$PATH:~/bin"
#設定を有効化
% source ~/bish_profile
このようにすると、あたかも通常のコマンドのように実行できます
% homesize.sh
おわりに
次回はもっと詳しく解説したいと思います!!!