順番に読み進めながら学べます

コマンドをつなぐ — ; && || とクォート

; での順次実行、&& と || での成功時・失敗時の条件実行、シングルクォートとダブルクォートでの変数展開の違いを、ブラウザ端末で操作しながら学べます。

コマンドの連結 — ; && ||

複数のコマンドを 1 行でつなげて実行できます。

;は前のコマンドの結果に関係なく順番に実行します。

&&は前のコマンドが成功したときだけ次を実行し、||は前のコマンドが失敗したときだけ次を実行します。

記号次を実行する条件
;前の結果に関係なく必ずecho a ; echo b
&&前が成功(終了ステータス 0)したときだけmkdir d && cd d
||前が失敗(0 以外)したときだけcat f || echo ng
; && || の違い
echo A ; echo B結果に関係なく A も B も実行cmd && echo okcmd が成功したときだけ okcmd || echo ngcmd が失敗したときだけ ng
;は常に順次、&&は成功時、||は失敗時に次へ進みます。
echo step1 ; echo step2          # 順番に両方実行
mkdir build && echo created      # 成功したら created
ls missing.txt || echo not-found # 失敗したら not-found

echo first; echo secondを実行し、;で 2 つの出力が順番に出ることを確認してください。

echo ok && echo doneを実行し、&&で前が成功したときに次が続くことを確認してください。

cat nofile.txt || echo missingを実行し、||で前が失敗したときだけ後ろが動くことを確認してください。(正しく実行できれば解説が表示されます)

Linux console
0 / 3 実行済み
Loading Linux Terminal...

&& と || をつなげる — その場で分岐

&&||は 1 行に続けて書けます。

cmd && echo ok || echo ngは、cmdが成功すればecho okを実行し、失敗すればecho ngを実行します。

成功時と失敗時の処理をその場でまとめて書きたいときの定番の形です。

&& と || をつなげた分岐
cmd終了ステータスで分岐&& echo okcmd が成功したら ok|| echo ng直前が失敗したら ng
cmd && echo ok || echo ngは、cmdが成功すればok、失敗すればngを表示します。
mkdir out && echo created || echo failed   # 成功なら created
ls nofile.txt && echo found || echo none   # 失敗なら none

ls . && echo found || echo noneを実行し、ls .が成功するのでfoundが出ることを確認してください。

cat nofile.txt && echo found || echo noneを実行し、catが失敗するのでnoneが出ることを確認してください。

③ 2 つの結果を見比べ、&&の後ろと||の後ろが成否で切り替わることを確認してください。

Linux console
0 / 2 実行済み
Loading Linux Terminal...

クォートの違い — ' と "

文字列を囲むクォートには 2 種類あります。

シングルクォート'...'は中身をそのままの文字として扱い、$VARも置き換えません。

ダブルクォート"..."は中の$VAR$(...)を値に展開します。

空白を含む文字列をひとまとまりとして渡したいときにも使います。

クォート$VAR の扱い$(...) の扱い例 → 出力
'...'(シングル)展開しない(文字のまま)展開しないecho '$name'$name
"..."(ダブル)値に展開コマンド出力に展開echo "$name"Linux
シングルとダブルの展開差
name=Linux変数 name に Linux を設定echo '$name'$name とそのまま表示echo "$name"Linux に展開して表示
シングルはそのまま、ダブルは$変数を値に展開します。
place=server
echo 'path is $place'   # そのまま: path is $place
echo "path is $place"   # 展開: path is server

name=Linuxで変数を設定してください。

echo '$name'を実行し、シングルクォートでは$nameがそのまま表示されることを確認してください。

echo "$name"を実行し、ダブルクォートでは値のLinuxに展開されることを確認してください。

Linux console
0 / 3 実行済み
Loading Linux Terminal...

ダブルクォートで変数とコマンド出力を埋め込む

ダブルクォートの中では変数とコマンド置換をまとめて 1 つの文字列に組み立てられます。

$(...)はコマンドの出力結果に置き換わります。

たとえば$(pwd)は現在地のパスそのものに置き換わってから表示されます。

空白を含む値を 1 つの引数として渡すときにも、ダブルクォートで囲むのが基本です。

user=guestで変数を設定してください。

echo "hello $user" && echo doneを実行し、ダブルクォート内で変数が展開され、成功時にdoneが続くことを確認してください。

echo "now: $(pwd)"を実行し、ダブルクォート内の$(...)が現在地のパスに置き換わることを確認してください。

Linux console
0 / 3 実行済み
Loading Linux Terminal...

成功・失敗の正体 — 終了ステータスと echo $?

&&||が見ている「成功・失敗」は、コマンドが終わるときに残す終了ステータスという数値で決まります。

0が成功、0以外が失敗です。

直前のコマンドの終了ステータスは特別な変数$?に入り、echo $?で確認できます。

終了ステータス意味確認
0直前のコマンドが成功echo $?0
0 以外直前のコマンドが失敗echo $?1 など
終了ステータスを echo $? で読む
ls . のあと echo $?0(成功)cat nofile のあと echo $?0 以外(失敗)
成功したコマンドの直後はecho $?0、失敗したコマンドの直後は0以外になります。
ls .            # 成功するコマンド
echo $?         # 直前の終了ステータス → 0
cat nofile.txt  # 失敗するコマンド
echo $?         # 直前の終了ステータス → 0 以外(例: 1)

ls .を実行したあとecho $?を実行し、成功したので0が表示されることを確認してください。

cat nofile.txtを実行したあとecho $?を実行し、失敗したので0以外(1など)が表示されることを確認してください。

echo $?の数値が&&||の判断材料になっていることを確認してください。

Linux console
0 / 3 実行済み
Loading Linux Terminal...
QUIZ

理解度チェック

まずは1問ずつ答えてみましょう。

Q1cmd1 && cmd2cmd2が実行されるのはどんなときですか?

Q2echo '$name'の出力はどれですか?(name=Linuxを設定済みとする)

Q3||の役割として正しいものはどれですか?