トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

シェル

シェルとは

OSと利用者(ユーザ)との仲介をする(インターフェースの)役割を負うプログラムのこと。最近のOSではGUIが一般的なのでLinuxではgnomeやKED、Mac OS XではFinder、WindowsではExplorerがシェルにあたる。

UNIXシステムではターミナル(端末)を使う機会が多く、bashやtcshなどシェルである。

シェルは利用者の入力したコマンドを解釈・処理、他のプログラムの実行などのできるインタープリタ(コマンドインタープリタ)である。シェルコマンドの実行や制御を実できるのでその手順をプログラミングできる。シェルによるプログラムをシェルスクリプトという。

変数

シェルはプログラミングできるので変数が宣言無しで利用でき、次のように使う。

変数名=値

変数を参照するときは変数名の先頭に$をつける。変数には次の種類がある。

シェル変数
シェル内のみ有効。setコマンドで一覧表示できる。
$ name=sakabe
$ echo $name
環境変数
利用者環境の設定などに利用され、シェルから起動したプログラムからも参照できる。envコマンドあるいはprintenvコマンドで表示で一覧表示できる。

環境変数を定義するには次の2つの方法がある。

  1. シェル変数を環境変数に変更する
  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

 シェルスクリプト

シェルスクリプトを参照

シェル初期化ファイル

シェル初期化ファイルは起動時に実行されるファイルで、ファイル名の先頭に.(ドット)が付いているのでドットファイルと呼ばれる。

シェル初期化ファイルには次のようなファイルがある。

  1. 対話的なログインシェルの場合
    1. /etc/profile
    2. ~/.bash_profile
    3. ~/.bash_login
    4. ~/.profile
  2. ログインシェルでない場合
    1. /etc/bashrc
    2. ~/.bashrc

rcはrun commandの略。

これらのファイルのひな形は/etc/skelにあり、ユーザ登録時にホームディレクトリにコピーされる。各自のディレクトリにはあるドットファイルは様々なプログラムの設定を保存している。自分の環境に合わせて編集する。

コマンドサーチパス

コマンド検索リストでコマンドを格納しているディレクトリをコロンで区切って並べ、環境変数PATHに保存する。この変数ディレクトリを登録することをパスを通すという。

設定されているサーチパスはecho $PATHで表示できる。シェルは入力されたコマンドをこのリストのディレクトリから検索し、実行する。

環境変数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 ?
ls a*
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