UNIX/Linuxの部屋 用語集:シェル記号類まとめ sh・csh・tcsh・bash などのシェル・シェルスクリプトの記号まとめ (> >> 2>&1 < << $$ >& & && ( ) | || <<- <& >| <>)


※空白区切りで AND 検索 (例:「ファイル 削除」)

用語集 シェル記号類まとめ sh・csh・tcsh・bash などのシェル・シェルスクリプトの記号まとめ (> >> 2>&1 < << $$ >& & && ( ) | || <<- <& >| <>)

シェル関係の記号類を中心にとしたまとめ。

> >> 2>&1
リダイレクト。> はファイルへの出力を、>> はファイルへの追記を表す。

$$
プロセス ID を表すシェルの変数。sh 系・csh 系を問わず、あらゆるシェルで利用可能。

<<
ヒアドキュメント。シェルスクリプトなどにおいて、複数行にわたるファイルへの出力内容をスクリプト内に記述する場合などに使用される。
#!/bin/sh
cat <<END
line1
line2
line3
END
このとき、最後の END の前後に空白やタブを付けてはならない。

ヒアドキュメントの中は $foo などの変数展開や、`〜` のコマンド行置換が行われる。これを抑止したい場合は <<'END' などとクォートで囲むとよい。
#!/bin/sh
cat <<END
path is $PATH (no quote)
END
cat <<'END'
path is $PATH (quoted)
END
実行結果は以下の通り。
path is /sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin
⇒ クォートで囲まないと変数が展開される
path is $PATH
⇒ クォートで囲むと変数展開は行われない

sh・bash の場合、<< の部分を <<- とすることで、ヒアドキュメント中の行頭のタブ (TAB) を自動的に削除する。
#!/bin/sh
cat <<-END
a
(TAB)b
(TAB)(TAB)c
END
実行すると以下のように行頭のタブが削除される。
a
b
c

; & && ||
「;」「&」「&&」「||」は同じ仲間で、複数のコマンドの間にこれらの文字を挟むといろいろな動作をさせることができる。

複数のコマンドを ; (セミコロン) でつなぐと、前のコマンドが終わり次第、次のコマンドが実行される。
% command1 ; command2
⇒ command1 を実行し、その実行が完了次第 command2 を実行する。
% command1 ; command2 ; command3
⇒ 3つ以上のコマンドを記述しても OK

|| と && は、; と似ているが、前のコマンドの終了ステータスによって、後続のコマンドを実行するか否かが決まる。
% command1 && command2
⇒ command1 が 0 を返した場合、command2 を実行する。
% command1 || command2
⇒ command1 が 1 以上を返した場合、command2 を実行する。
一般的にコマンドは正常終了時に終了ステータス 0 を返し、異常時に 1 以上を返すため、
% command1 && 正常終了時に実行したいコマンド
% command1 || 異常終了時に実行したいコマンド
という使い方をする。典型的な例として以下のようなものがある。
% configure && make && make install
⇒ configure が成功したときのみ make を実行し、さらに make が成功したときのみ make install を実行する
% command || mail -s "error" foo@example.co.jp
⇒ command が失敗したらエラー通知メールを送信する。

~
チルダは自分自身のホームディレクトリ・もしくは特定ユーザのホームディレクトリに展開される。
% echo ~
/home/68user
⇒ 自分自身のホームディレクトリに展開される
% echo ~/bin/
/home/68user/bin/
⇒ ~ の後に好きな文字列をつけてもよい。
% echo ~foo
/home/foo
⇒ そのサーバ内に foo というユーザがいるなら、~foo は foo のホームディレクトリに展開される。

{}
{} は主に 3つの使われ方をする。1.変数の区切りを表すもの、2.ブレース展開、3.グループコマンドである。

変数の区切りは
echo "${VAR}"
のように使用する。上記の例では ${VAR} でも $VAR でも結果は変わらないが、
echo "${VAR}_1.dat"
という場合に $VAR_1.dat と書いてしまうと $VAR_1 という変数として扱われてしまう。$VAR_1 ではなく $VAR という変数であることを明示するために ${VAR} とブレースで囲むわけである。

ブレース展開は
% mkdir /foo/bar/{dir1,dir2,dir3}
⇒ mkdir /foo/bar/dir1 /foo/bar/dir2 /foo/bar/dir3
というふうに使用する。複数個の文字列を指定するが、そのうちの一部分のみ異なる場合に有用。

グループコマンドは
% { command1; command2; }
というふうに複数コマンドをグループ化する際に使用する。グループ化するだけだと意味はないが、複数コマンドの出力をまとめてリダイレクトしたり、ひとつにまとめることでジョブ制御しやすくするなどの利点がある。{} でのグループ化は sh・bash のみ。csh・tcsh は () でグループ化する。


頑張って書いたおすすめコンテンツ!