シェルスクリプトの用語集(34語)
シェルスクリプトに関する Linux 用語を、読み・意味・補足つきでまとめました。
&& と ||あんど・おあ
コマンドを結果で連結する記号。A && B は成功時のみB、A || B は失敗時のみB。
短絡評価。mkdir dir && cd dir のように「できたら次へ」を1行で書ける。
bashばっしゅ
多くのLinuxで標準のシェル。対話操作とスクリプト実行の両方を担う。
コマンドの解釈・実行に加え、履歴・補完・変数・制御構文などの機能を備える。Bourne Again SHellの略で、sh系の後継にあたる。macOSの標準がzshに変わったように環境でシェルは違うが、スクリプトの共通基盤として今も中心的存在。
set -e / set -u / pipefailせっといー
スクリプトの安全装置。エラーや未定義変数、パイプ途中の失敗で即座に停止させる。
set -euo pipefail をまとめて冒頭に置くのが定番。バグを黙って通り過ぎさせない。
testてすと
条件の成否を判定するコマンド。[ ]の書き方はこのコマンドの別表記。
test -f fileや[ -f file ]でファイルの有無、[ "$a" = "$b" ]で文字列比較などを行い、結果を終了ステータスで返す。if文の条件部の実体はこのコマンド。[ の後ろと ] の前に空白が必須という文法がつまずきどころ。
test / [てすと
条件が真か偽かを判定するコマンド。[ ... ] とも書ける。
ファイル判定 -f / -d、文字列一致 =、数値比較 -eq -lt -gt など。[ を使うときは前後にスペースが必須で、終わりに ] を置く。
trapとらっぷ
シグナルや終了イベントに応じてコマンドを実行する仕組み。後片付けに使う。
trap 'rm -f "$tmp"' EXIT で、正常でも異常でも終了時に必ず一時ファイルを掃除できる。
クォートくぉーと
引用符で囲み、空白や特殊文字をシェルに解釈させず文字として扱わせること。
シングルクォートは中身を完全にそのまま扱い、ダブルクォートは$の変数展開だけ許すという違いがある。空白入りファイル名やメッセージの受け渡しで必須。使い分けを誤ると、変数が展開されない・されすぎる事故につながる。
クオートくおーと
文字列を引用符で囲み、空白や特殊文字の解釈を制御すること。
ダブルクオート "..." は中の変数を展開し、シングルクオート '...' は展開せずそのままの文字にする。値は "$var" と囲むのが安全。
コマンド置換こまんどちかん
$(コマンド) でコマンドの実行結果を文字列として埋め込む仕組み。
例: now=$(date)。中のコマンドが先に実行され、その標準出力に置き換わる。古い書き方のバッククオート `...` と同義だが $(...) が推奨。
コマンド置換こまんどちかん
$(コマンド)の形で、コマンドの実行結果を文字列として埋め込む記法。
today=$(date)のように、コマンドの出力を変数へ取り込むときの定番。古い書き方のバッククォートより、入れ子にできる$( )が推奨される。結果に空白が含まれる場合はダブルクォートで囲んで受けるのが安全。
シェルしぇる
入力したコマンドを解釈してOSに伝える対話プログラム。
bash や zsh が代表的。プロンプト($)に打ったコマンドを実行する。
シェルスクリプトしぇるすくりぷと
複数のコマンドをファイルにまとめ、一括実行できるようにしたもの。
拡張子は慣習的に .sh。先頭にシバンを書き、実行権限を付けて ./script.sh のように動かす。手作業の繰り返しを自動化できる。
シェルスクリプトしぇるすくりぷと
シェルのコマンドをファイルに並べて書き、まとめて実行できるようにしたもの。
毎回手で打っていた一連の操作を自動化でき、バックアップや定期処理の定番手段になる。先頭にシバン行を書き、chmod +xで実行権限を付けて使う。変数・条件分岐・ループを備えた立派なプログラミング言語でもある。
シバンしばん
スクリプト1行目の #! で始まる、使うインタプリタを指定する行。
例: #!/bin/bash。OSはこの行を見て、どのプログラムでスクリプトを実行するか判断する。#!/usr/bin/env bash と書くと環境に応じた bash を探す。
シバンしばん
スクリプト1行目の#!/bin/bashのような、実行に使う解釈系の指定行。
#!に続けてインタプリタのパスを書くと、./script.shと直接実行したときにその解釈系で動く。#!/bin/shと#!/bin/bashでは使える文法が異なるため、bash専用の機能を使うならbashを明記するのが安全。
ダブルブラケットだぶるぶらけっと
[[ ]]で書くbash拡張の条件式。従来の[ ]より安全で高機能。
変数が空でも単語分割で壊れにくく、&&や<による比較、=~での正規表現マッチも書ける。ただしbashやzshの専用機能で、POSIXのshにはない。シバンが#!/bin/shのスクリプトで使うと動かない点に注意。
パイプぱいぷ
前のコマンドの出力を次のコマンドの入力へ渡す | のこと。
ls | grep txt のように、小さなコマンドをつないで処理を組み立てる。Linux流の道具の組み合わせ方の核となる。
ヒアドキュメントひあどきゅめんと
<<EOFの形式で、複数行のテキストをその場でコマンドへ流し込む記法。
cat <<EOFから終端のEOF行までがそのまま入力になり、設定ファイルの生成や複数行メッセージの出力に便利。終端の目印は行頭に単独で書く必要がある。<<'EOF'とクォートすると中の$が展開されなくなる使い分けもある。
ファイルテストふぁいるてすと
-fや-dなどの演算子で、ファイルの存在や種類・権限を調べる条件判定。
-eは存在、-fは通常ファイル、-dはディレクトリ、-rは読み取り可能かを調べる。if [ -d "$dir" ]のようにif文と組み合わせ、処理前の安全確認に使うのが典型。演算子が多いので、よく使うものから覚えるとよい。
リダイレクトりだいれくと
コマンドの入出力をファイルへ向け替える仕組み。> < >> など。
> は上書き保存、>> は追記、< はファイルを標準入力に。2> で標準エラー出力を分けて保存できる。
ループるーぷ
同じ処理を繰り返す制御構造。for と while が代表的。
for はリストを1つずつ、while は条件が真の間ずっと繰り返す。break で抜け、continue で次の周回へ飛ばす。
位置パラメータいちぱらめーた
スクリプトや関数に渡された引数を表す $1 $2 … $@ $# のこと。
$1 は1番目の引数、$# は引数の個数、$@ は全引数、$0 はスクリプト名。shift で引数を1つずつ前へずらせる。
位置パラメータいちぱらめーた
スクリプトに渡された引数を順番に受け取る$1、$2などの特殊変数。
1番目の引数が$1、2番目が$2に入り、$#で個数、$@で全部をまとめて参照できる。$0は引数ではなくスクリプト名を指す点を混同しやすい。10番目以降は${10}のように波括弧で囲む必要がある。
引数ひきすう
コマンドやスクリプトに渡す追加情報。処理の対象や条件を指定する。
ls /tmpの/tmpのように、コマンド名の後ろへ空白区切りで並べる。スクリプト側では$1、$2として受け取れる。-lのようなハイフン付きはオプションと呼び分けることが多いが、広い意味ではどちらも引数にあたる。
環境変数かんきょうへんすう
export で子プロセスにも引き継がれるようにした変数。
PATH や HOME が代表例。export NAME=値 で設定すると、そのシェルから起動したコマンドやスクリプトからも参照できる。
関数かんすう
処理のまとまりに名前を付けて再利用できるようにしたもの。
name() { ... } で定義し name で呼ぶ。内部では引数を $1 $2 などで受け取れる。return で終了ステータスを返す。
終了ステータスしゅうりょうすてーたす
コマンド終了時に返す0〜255の整数。0が成功、0以外が失敗。
直前のコマンドの結果は $? で取得できる。if 文はこの値を見て分岐し、0なら then 側を実行する。
終了ステータスしゅうりょうすてーたす
コマンドが返す成否の数値。0=成功、0以外=失敗。$? で読める。
終了コードとも。if やスクリプトの分岐、&&/|| はこの値で動く。慣習として1〜125がエラー。
配列はいれつ
複数の値をひとつの変数にまとめる入れ物。arr=(a b c) で作る。
${arr[@]}で全要素、${arr[0]}で先頭、${#arr[@]}で個数。ループと相性が良い。
標準エラー出力ひょうじゅんえらーしゅつりょく
エラーメッセージが流れる出力先。番号は2で、標準出力(1)とは別。
2> file でエラーだけ保存、2>&1 で標準出力と同じ流れに合流。通常出力とエラーを分けて扱える。
標準出力ひょうじゅんしゅつりょく
コマンドの結果が既定で表示される先(通常は画面)。
リダイレクト(>)やパイプ(|)で別の場所やコマンドへ流せる。
変数へんすう
値に名前を付けて保存する入れ物。name=値 で代入し $name で参照。
= の前後にスペースを入れてはいけない。参照時は $name か ${name}。後者は ${name}_bak のように文字とつなげるとき明確になる。
変数展開へんすうてんかい
${...} でデータを加工しながら取り出す仕組み。既定値・部分削除・長さ取得ができる。
${V:-既定}未設定時の既定値/${V%.txt}末尾削除/${V#pre}先頭削除/${#V}文字数。外部コマンドを呼ばず高速。
変数展開へんすうてんかい
$変数名と書いた部分を、実行時にその変数の中身へ置き換える仕組み。
echo $HOMEが/home/userと表示されるのはこの働きによる。${name}と波括弧で範囲を明示でき、${name:-既定値}のような加工付きの展開もある。シングルクォートの中では展開されない点が重要な落とし穴。