運用環境 シェル(その9)

【連載】

にわか管理者のためのLinux運用入門

【第189回】運用環境 シェル(その9)

[2019/08/01 07:00]後藤大地 ブックマーク ブックマーク

サーバ/ストレージ

変数

シェルは変数の機能を提供している。シェルスクリプトを組むようになると、変数はかなり必須に近い機能になってくる。シェルの提供する変数はアルファベット、数字、アンダースコアで構成される。ただし、変数の最初の1文字はアルファベットまたはアンダースコアである必要があり、変数名の最初の文字として数字を使うことはできない。

新しい変数を定義するには、次のように「=」で値を代入することで行う。

変数名=値

定義した変数には変数名の前に「$」を指定することでアクセスすることができる。

チルダ展開

=で代入するとき、=の右側では「展開」と呼ばれる処理が行われる。展開については次回以降でも説明するが、今回はその一例として「チルダ展開」を紹介しておこう。「~」はホームディレクトリに展開される。次の例のように=でチルダを代入しようとすると、~はホームディレクトリに展開され、ホームディレクトリが変数に代入される。

# homedir=~
# echo $homedir
/Users/daichi
# homedir="~"
# echo $homedir
~
#

また、シェルの展開ではダブルクォーテーションが大きな意味を持っている。~の場合、~をダブルクォーテーションで括ってから代入するとただの文字列として~が代入される。~もよく使われる入力方法なので覚えておこう。

特別な変数やパラメータ

シェルにはあらかじめシェルによって用意される変数がある。これはパラメータと呼ばれ、位置パラメータや特殊パラメータといったものが用意されている。次の表に、位置パラメータと特殊パラメータをまとめた。

位置パラメータ 内容
$1 コマンドライン引数1つ目
$2 コマンドライン引数2つ目
$3 コマンドライン引数3つ目
$4 コマンドライン引数4つ目
$5 コマンドライン引数5つ目
$6 コマンドライン引数6つ目
$7 コマンドライン引数7つ目
$8 コマンドライン引数8つ目
$9 コマンドライン引数9つ目
特殊パラメータ 内容
$* すべての位置パラメータに展開
”$*” すべての位置パラメータに展開。位置パラメータの間はIFS変数の最初の1文字で結合される。IFSが定義されていない場合には単一のスペースで結合される
$@ すべての位置パラメータに展開
”$@” すべての位置パラメータに展開。位置パラメータごとに”$1”や”$2”といった扱いになる
$# 位置パラメータの数
$? 最も最後に実行されたコマンドの終了スステータス
$- 現在設定されているオプションフラグ
$$ シェルのプロセスID
$! 最も最後にそのシェルから実行されたバックグラウンドプロセスのプロセスID
$0 シェルスクリプト名

位置パラメータと特殊パラメータはシェルでもシェルスクリプトでもよく利用するので、その意味は把握しておきたい。

特殊パラメータでは「$*」と「$@」が位置パラメータに展開される。ただし、ダブルクォーテーションで囲まれた場合に$*と$@では挙動が異なることに注意が必要だ。例えば、引数が5つあって$1、$2、$3、$4、$5が使われているとすれば、$*と$@には次のような等価関係がある。

特殊パラメータ 等価な位置パラメータ
$* $1 $2 $3 $4 $5
$@ $1 $2 $3 $4 $5
”$*” “$1 $2 $3 $4 $5”
”$@” “$1” “$2” “$3” “$4” “$5”

$*と$@は引数が空白を含んでいる場合に特に注意する必要がある。最初はわからないかもしれないが、例えばファイル名やパスに空白が含まれている場合など、この辺りの挙動の違いが問題になってくるので、そういったことが起こり得るということは覚えておいてもらえればと思う。

シェルはいくつかの変数でシェルの挙動を変える。こうした変数は特殊変数と呼ばれ、次のようなものがある。

特殊変数 内容
CDPATH cdで使われる検索パス
EDITOR fcで使われる代替エディタ。何も指定がない場合はed
FCEDIT fcで使われるエディタ
HISTSIZE コマンド履歴数
HOME ホームディレクトリ。~から展開される値
IFS 入力フィールド区切り文字。デフォルトは空白、タブ、改行
LINENO シェルスクリプトまたは関数内の現在の行数
MAIL 新着メールをチェックするメールファイル名
MAILPATH 新着メールをチェックするためのファイル名リスト
OPTIND getoptsによって処理される次の引数のインデックス。起動時に1に初期化される
PATH コマンドの検索パス
PPID シェルを起動した親プロセスのプロセスID。起動時の情報が保持され、その後で親プロセスが入れ替わったとしても、その情報は反映されない
PS1 プロンプトの文字列
PS2 第2プロンプト文字列
PS4 トレースのプレフィックス文字列

shではPS1が特殊変数となっており、この変数に設定された文字列がプロンプトとして表示される。PS1には特殊な意味を持ったフォーマットシーケンスを含めることができ、次のようなフォーマットシーケンスが用意されている。

フォーマットシーケンス 内容
\H システムの完全修飾ホスト名
\h システムのホスト名
\W カレントディレクトリのファイナルコンポーネント
\w カレントディレクトリのパス
\$ 一般ユーザーなら$、スーパーユーザーなら#
\\ バックスラッシュ

よく使うパラメータは覚えておこう

まず、位置パラメータはかなり必須の機能だ。これは覚えてしまいたい。位置パラメータは$と数字で構成されていて直感的だし、覚えることに苦労することはないだろう。特殊パラメータはすべて覚える必要はないが、少なくとも$*、$@、$#、$?は覚えておきたい。これらの特殊パラメータは特に使う機会が多い。

変数はアクセスするときに多少の加工を行うことができる。例えばパスを代入した変数からディレクトリだけ取り出すとか、ファイル名だけ取り出すとか、ったことも可能だ。本格的に文字列を加工するならawkかsed、またはPythonなどのプログラミング言語を使ったほうがよいだろう。あくまでも簡単な加工ができるということだ。この辺りについては次回、詳しく取り上げる。

参考資料

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

一覧はこちら

連載目次

もっと知りたい!こちらもオススメ

なぜ今、統合システムなのか? 押さえておくべき「3つのインパクト」

なぜ今、統合システムなのか? 押さえておくべき「3つのインパクト」

ガートナー ジャパンは10月31日~11月2日、都内で「Gartner Symposium/ITxpo 2017」を開催。11月1日には同社 主席アナリストの青山浩子氏が登壇し「CIOが理解すべき統合システムの3大インパクト」と題する講演を行った。本稿では、講演の内容をダイジェストでお届けする。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします

会員登録(無料)

注目の特集/連載
[解説動画] Googleアナリティクス分析&活用講座 - Webサイト改善の正しい考え方
知りたい! カナコさん 皆で話そうAIのコト
教えてカナコさん! これならわかるAI入門
対話システムをつくろう! Python超入門
Kubernetes入門
AWSで作るクラウドネイティブアプリケーションの基本
ソフトウェア開発自動化入門
PowerShell Core入門
徹底研究! ハイブリッドクラウド
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
セキュリティアワード特設ページ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る