シェルとは
OSと利用者との仲介をするインターフェースの役割を負うプログラム。
利用者の入力したコマンドを解釈・処理できるインタープリタである(コマンドインタープリタ)。プログラミングもできる
プログラミングできるので値を記憶する変数が利用できる。変数には次の種類がある。
さまざまなシェル
UNIXで利用されるシェルを表に示す。これらは/binに格納されている。
シェル | |
---|---|
bash | Bourne Again Shell Linux標準シェル |
sh bsh | |
csh | C ShellC言語形式の文法を持つ |
tcsh | cshにファイル名補完機能を追加したシェル |
zsh |
シェルスクリプト
- コマンドとシェルの機能の組み合わせ
- 新しいコマンドを作れる。
- 既存コマンドの組み合わせ
- OSコマンドの順次実行
- シェルのインタプリタ機能
- プログラミング可能
シェルスクリプトはテキストファイルで拡張子は一般的にsh。
コマンドとして実行するには実行権を付加する。
chmod +x ABC.sh
シェルスクリプトをどのシェルで実行させるかはファイルの先頭部に指定する。#!に続けてスクリプトを実行するシェルを指定
#!/bin/bash
#は コメント開始
- 設置場所
- 基本的にはどこに置いても良い。
シェル初期化ファイル
起動時に実行されるドットファイル
対話的なログインシェルの場合
- /etc/profile
- ~/.bash_profile
- ~/.bash_login
- ~/.profile
ログインシェルでない場合
- ~/.bashrc
サーチパス
コマンド格納場所の一覧。環境変数PATHに保存する。echo $PATHで表示できる。
$ echo $PATH $ /bin:/usr/bin:/usr/local/bin
パスの追加
PATH=$PATH:$HOME/bin export $PATH
値の引き渡し
シェルスクリプトにコマンドラインの引数を渡せる。$を使って表記する。
$数値 | 数値は引数の順番 |
---|---|
$1 | 最初の引数 |
$* | すべての引数 |
パイプとリダイレクト
パイプ
あるコマンドの出力を他のプログラムの入力にする。コマンドとコマンドを|でつなぐ。
たとえば、/etc/passwdファイルの内容をアルファベット順にソートする。
cat /etc/passwd | sort
リダイレクト
コマンドの出力をファイルに保存したり、ファイルに保存されているデータをコマンドの入力にする場合に使う。次の記号を使う。
記号 | 意味 |
---|---|
> | ファイルへの上書き出力。ファイルが存在しないときは新たに作成される。 |
>> | ファイルへの追加書き込み。 |
lsコマンドの出力をファイルdirlist.txtに書き込む。
ls -l > dirlist.txt
エイリアス alias
コマンドの別名を定義する機能。よく使う場合にはシェルの初期化ファイルに書き込んでおくと良い。
コマンドは次の2つ。
コマンド | 役割 |
---|---|
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コマンドを例に正規表現の利用例を示す。
- ファイル名が1文字のファイルを表示する。
ls ?
- ファイル名の先頭の文字がaのファイルだけ表示する。
ls a*
- 拡張子がtxtのファイルのみ表示
ls *.txt
- ファイル名がaからdのいずれかの文字で始まるもののみ表示する。
ls [a..d]*
awk
テキスト処理に優れたスクリプト言語コマンドの出力の加工に利用標準入力、ファイルを利用パイプ、リダイレクトとの組み合わせ