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

シェル

シェルとは

OSと利用者との仲介をするインターフェースの役割を負うプログラム。

利用者の入力したコマンドを解釈・処理できるインタープリタである(コマンドインタープリタ)。プログラミングもできる

プログラミングできるので値を記憶する変数が利用できる。変数には次の種類がある。

シェル変数
シェル内のみ。setコマンドで表示
環境変数
シェルから起動したプログラムに反映。printenvコマンドで表示

 さまざまなシェル

UNIXで利用されるシェルを表に示す。これらは/binに格納されている。

シェル
bash Bourne Again Shell Linux標準シェル
sh bsh
csh C ShellC言語形式の文法を持つ
tcsh cshにファイル名補完機能を追加したシェル
zsh

シェルスクリプト

  • コマンドとシェルの機能の組み合わせ
  • 新しいコマンドを作れる。
既存コマンドの組み合わせ
OSコマンドの順次実行
シェルのインタプリタ機能
プログラミング可能

シェルスクリプトはテキストファイルで拡張子は一般的にsh。

コマンドとして実行するには実行権を付加する。

chmod +x ABC.sh

シェルスクリプトをどのシェルで実行させるかはファイルの先頭部に指定する。#!に続けてスクリプトを実行するシェルを指定

#!/bin/bash

#は コメント開始

設置場所
基本的にはどこに置いても良い。
よく使う場合、~/binに置き、パスを通しておく

 シェル初期化ファイル

起動時に実行されるドットファイル

対話的なログインシェルの場合

  1. /etc/profile
  2. ~/.bash_profile
  3. ~/.bash_login
  4. ~/.profile

ログインシェルでない場合

  1. ~/.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

テキスト処理に優れたスクリプト言語コマンドの出力の加工に利用標準入力、ファイルを利用パイプ、リダイレクトとの組み合わせ