Shell チュートリアル

Shell は C 言語で書かれたプログラムであり、ユーザーが Linux を利用するための橋渡しです。Shell はコマンド言語であると同時に、プログラミング言語でもあります。

Shell とはアプリケーションの一種であり、このアプリケーションはインターフェースを提供し、ユーザーはそのインターフェースを通じてオペレーティングシステムのカーネルサービスにアクセスします。

Ken Thompson の sh は最初の Unix Shell であり、Windows Explorer は典型的なグラフィカルインターフェースの Shell です。

Shell オンラインツール


Shell スクリプト

Shell スクリプト(shell script)とは、shell のために書かれたスクリプトプログラムです。

業界で言う shell は通常 shell スクリプトを指しますが、読者の皆さんは shell と shell script が異なる概念であることを知っておいてください。

習慣の都合上、簡潔にするため、本文中の「shellプログラミング」はすべて shell スクリプトプログラミングを指し、shell 自体の開発を指すものではありません。


Shell 環境

Shell プログラミングは JavaScript、php プログラミングと同じように、コードを書けるテキストエディタと、解釈実行できるスクリプトインタプリタがあれば十分です。

Linux の Shell は種類が多く、一般的なものは次のとおりです:

  • Bourne Shell(/usr/bin/sh または /bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)
  • ……

このチュートリアルで扱うのは Bash、つまり Bourne Again Shell です。使いやすく無料であるため、Bash は日常業務で広く使用されています。また、Bash はほとんどの Linux システムでデフォルトの Shell でもあります。

一般に、人々は Bourne Shell と Bourne Again Shell を区別しないため、例えば#!/bin/sh、それは同様に次のように変更することもできます#!/bin/bash。

#!その後のパスで指定されたプログラムが、このスクリプトファイルを解釈する Shell プログラムであることをシステムに伝えます。


最初のShellスクリプト

テキストエディタを開き(vi/vim コマンドでファイルを作成できます)、新しいファイル test.sh を作成します。拡張子は sh(sh は shell を表します)です。拡張子はスクリプトの実行に影響しないので、名前を見て意味が分かればよいです。もし php で shell スクリプトを書くなら、拡張子は php にすればよいです。

コードを入力します。最初の行は通常次のようになります:

実例

#!/bin/bash
echo "Hello World !"

#!これは取り決めのマークであり、このスクリプトがどのインタプリタで実行される必要があるか、つまりどの Shell を使用するかをシステムに伝えます。

echo コマンドはウィンドウにテキストを出力するために使われます。

Shell スクリプトを実行するには2つの方法があります:

1. 実行可能プログラムとして

上記のコードを test.sh として保存し、対応するディレクトリに cd します:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

注意してください。必ず次のように書きます./test.sh、ではなくtest.sh他のバイナリプログラムを実行する場合も同様で、test.sh と直接書くと、Linux システムは PATH の中に test.sh という名前のファイルがないか探します。しかし、/bin, /sbin, /usr/bin, /usr/sbin などだけが PATH にあり、現在のディレクトリは通常 PATH に含まれていないため、test.sh と書くとコマンドが見つかりません。./test.sh と書いて、現在のディレクトリで探すようにシステムに伝える必要があります。

2. インタプリタの引数として

この実行方法は、インタプリタを直接実行し、その引数が shell スクリプトのファイル名です。例:

/bin/sh test.sh
/bin/php test.php

この方法で実行されるスクリプトは、最初の行にインタプリタ情報を指定する必要はなく、書いても意味がありません。

その他の拡張