シェルとは
OSと利用者(ユーザ)との仲介をする(インターフェースの)役割を負うプログラムのこと。最近のOSではGUIが一般的なのでLinuxではgnomeやKED、Mac OS XではFinder、WindowsではExplorerがシェルにあたる。
UNIXシステムではターミナル(端末)を使う機会が多く、bashやtcshなどシェルである。
シェルは利用者の入力したコマンドを解釈・処理、他のプログラムの実行などのできるインタープリタ(コマンドインタープリタ)である。シェルはコマンドの実行や制御を実できるのでその手順をプログラミングできる。シェルによるプログラムをシェルスクリプトという。
変数
シェルはプログラミングできるので変数が宣言無しで利用でき、次のように使う。
変数名=値
変数を参照するときは変数名の先頭に$をつける。変数には次の種類がある。
$ name=sakabe $ echo $name
環境変数を定義するには次の2つの方法がある。
いずれの方法でもexportコマンドを使う。
$ name=sakabe $ export name $ export phon=0123-456-7890
さまざまなシェル
UNIXで利用されるシェルを表に示す。これらは/binに格納されている。
シェル | |
---|---|
bash | Bourne Again Shell Linux標準シェル |
sh bsh | |
csh | C ShellC言語形式の文法を持つ |
tcsh | cshにファイル名補完機能を追加したシェル |
zsh |
シェルスクリプト
シェルスクリプトを参照
シェル初期化ファイル
シェル初期化ファイルは起動時に実行されるファイルで、ファイル名の先頭に.(ドット)が付いているのでドットファイルと呼ばれる。
シェル初期化ファイルには次のようなファイルがある。
- 対話的なログインシェルの場合
- /etc/profile
- ~/.bash_profile
- ~/.bash_login
- ~/.profile
- ログインシェルでない場合
- /etc/bashrc
- ~/.bashrc
rcはrun commandの略。
これらのファイルのひな形は/etc/skelにあり、ユーザ登録時にホームディレクトリにコピーされる。各自のディレクトリにはあるドットファイルは様々なプログラムの設定を保存している。自分の環境に合わせて編集する。
コマンドサーチパス
コマンド検索リストでコマンドを格納しているディレクトリをコロンで区切って並べ、環境変数PATHに保存する。この変数ディレクトリを登録することをパスを通すという。
設定されているサーチパスはecho $PATHで表示できる。シェルは入力されたコマンドをこのリストのディレクトリから検索し、実行する。
$ echo $PATH /bin:/usr/bin:/usr/local/bin
パスの追加
PATH=$PATH:$HOME/bin export $PATH
パイプとリダイレクト
alias エイリアス
コマンドの別名を定義する機能。よく使う場合にはシェルの初期化ファイルに書き込んでおくと良い。エイリアスは次のコマンドで操作する。
コマンド | 役割 |
---|---|
alias | 設定、一覧表示 |
unalias | 解除 |
利用例
lsコマンドのFオプションを常に適用されるようにする。
$ alias ls='ls -F'
rmコマンドのiオプションを常に適用されるようにする。
$ alias rm='rm -i'
historyコマンド
シェルコマンドの実行履歴を表示するシェル内蔵コマンド。履歴は~/.bash_historyに保存され、上下のカーソルキーで呼び出せる。
履歴を利用するコマンド
次のコマンドの履歴を利用できる。
コマンド | 意味 |
---|---|
!! | 直前のコマンドを実行 |
!n | 履歴のn番目のコマンドを実行 |
!-n | n個前の履歴を実行 |
!文字列 | 文字列で始まる直近の履歴を実行 |
!?文字列 | 文字列を含む直近の履歴を実行 |
^文字列1^文字列2 | 文字列1を文字列2に置換して履歴を実行 |
!で指定した履歴を展開するにはESCキーを押し、^を押す。(M-^)
正規表現
文字列のパターンを表現する表記法で、エディタの文字列検索・置換、UNIXコマンドの引数でも利用できる。
正規表現で使用する記号、文字(メタ文字という)の組み合わせを表に示す。
記号 | 意味 | 例 | 例の意味 |
---|---|---|---|
. | 任意の一文字 | ||
? | 直前の文字の0または1回の繰り返し | ab? | aまたはab |
* | 直前の文字の0回以上の繰り返し | ax* | a、ax、axx、・・・ |
+ | 直前の文字の1回以上の繰り返し | ax+ | ax、axx、・・・ |
{n} | 直前のパターンのn回の繰り返し | a{4} | aaaa |
{n、} | 直前のパターンのn回の以上繰り返し | a{2、} | aa、aaa、aaaa、・・・ |
{n、m} | 直前のパターンのnからm回の繰り返し | a{1、4} | a、aa、aaa、aaaa |
[…] | 範囲指定 | [0-9] | 0〜9のいずれか |
[^文字] | 文字を含めない | [^ab] | aまたb以外の一文字 |
^ | 行頭 | ^Y | Yで始まる行 |
$ | 行末 | X$ | 行末がX |
\ | 文字をエスケープする | \\ | \そのもの |
メタ文字をエスケープする記号\は日本だけのもので、\(バックスラッシュ)が英語の場合使われる。
メタ文字を複数組み合わせた場合の例を示す。
正規表現 | 意味 |
---|---|
[a-zA-Z] | 大文字小文字を区別せず、アルファベットの任意の一文字 |
[a-z]+ | アルファベット小文字の一文字以上のすべての組み合わせ |
[1-9][0-9]* | 0より大きい整数 |
グループ化
正規表現を使った検索置換で検索文字列を置換する文字列の一部に利用したいときは検索文字列パターンをグループ化します。グループを作るときは(と)あるいは\(と\)でパターンを囲み、グループ化したパターンを利用するときは\1、\2というようにグループ化した順に番号付けした表記を使います。
\([a-z]*\)\([0-9]*\)
利用例
ls ?
ls a*
- 拡張子がtxtのファイルのみ表示
ls *.txt
- ファイル名がaからdのいずれかの文字で始まるもののみ表示する。
ls [a..d]*
コーテーション
コマンドラインの引数ではコーテーションの囲みは特別な意味を持つ。
記号 | 読み | 意味 |
---|---|---|
' | シングルコーテーション | 囲まれた文字列は文字列のまま扱う |
" | ダブルコーテーション | 環境変数の場合、その値として扱う |
` | バックコーテーション | コマンドとして扱われ、その実行結果が得られる |
たとえば、環境変数$HOMEを使ってみる。
$ echo '$HOME' $ $HOME $ echo "$HOME" $ /home/sakabe $ ls `echo $HOME` $ .....
コマンド実行制御
シェルは複数のコマンドを並べて状況に応じてそれらの実行を制御できる。コマンドを並べるときに次に示す記号を使い、コマンドを区切る。
- ;
- 並べたコマンドを無条件に連続して実行する
mkdir test ; chmod 777 test
mkdir test && chmod 777 test
mkdir test || cd test