コース目次 / 第3章
成果物 — つなげて、自動化する
パイプとリダイレクトを覚えて、作品をワンコマンドで守る backup.sh を作ります。
ここからがシェルの本領です。コマンドは、つなげると道具になります。
今日のゴール
bash backup.sh と打つだけで、フォルダが日付つきで控えられる。あなたの最初の自動化です。
まず作業フォルダに戻ります。
Mac をお使いの方
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
Windows をお使いの方
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
WSL のホームには「デスクトップ」がありません。Windows のデスクトップとは別世界なので、このコースの作業フォルダはホームの直下に置きます。エクスプローラーで見る方法は第4章の持ち帰りカードに書いてあります。
1. 調べるための材料を作る
renshuu の中に、はるとの旅メモを作ります。>> は「末尾に足す」でした。
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
2026-04 直島 港からレンタサイクルで一周
2026-05 尾道 坂の途中に猫がたくさん
2026-06 金沢 雨の日の石畳がきれい
2026-08 松本 夕方の城がいちばんきれいecho は「言われたことをそのまま出す」だけのコマンドで、>> がその出力をファイルの末尾に流し込んでいます。
2. 数える・探す
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
4 tabi-memo.txtwc は word count、-l を付けると行数だけを数えます。
数字の前の空白は環境によって違います。Macでは右寄せで空白が入り、Linux(WSL)では空白なしで 4 tabi-memo.txt と出ます。どちらも正解です。この講座で出力の見た目が割れるのはここだけです。
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
2026-05 尾道 坂の途中に猫がたくさんgrep 探す言葉 ファイル。その言葉を含む行だけを出します。ファイルが1000行あっても一瞬です。
3. つなげる — パイプ
ここがこの章のいちばん大事な考え方です。
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
4|(パイプ)は「左のコマンドの結果を、右のコマンドに流し込む」記号です。
grep 2026-0 tabi-memo.txt 4行が出てくる
│
│ | ← パイプで流し込む
▼
wc -l 流れてきた行を数える → 4これがUnixの思想です。ひとつのことだけをするコマンドを小さく作って、つなげて使う。grep は探すだけ、wc は数えるだけ。「数えながら探すコマンド」は作らないのがこの世界の作法です。
コマンドを覚えるのが目的ではありません。覚えた数だけ組み合わせが増えるのが、この道具の面白いところです。
4. 流し込む — リダイレクト
パイプが「コマンドへ流す」なら、> は「ファイルへ流す」です。
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
2026-08 松本 夕方の城がいちばんきれい夏の分だけを別のファイルに取り出せました。
> と >> の違いは、事故の分かれ目です。
> は上書き。行き先にファイルがあっても、何も聞かずに中身を捨てて書き直します。
>> は追記。末尾に足すだけで、元の中身は残ります。
大事なファイルに > を向けない。迷ったら >> を使ってください。コマンド帳を >> で書いてきたのは、このためでもあります。
5. 自動化する — backup.sh
ここまでのコマンドをファイルに並べて置くと、それがプログラムになります。
作業フォルダ(shell-kit)の直下に backup.sh を作って、そのまま書き写してください。
Mac をお使いの方
エディタは何でも構いません。VS Code を使っているなら code backup.sh、ターミナルだけで済ませたいなら nano backup.sh(保存は Ctrl + O → Enter、終了は Ctrl + X)が手軽です。
Windows をお使いの方
WSLの中から code backup.sh と打つと、Windows側のVS Codeが開きます(初回は少し待ちます。WSL用の部品が自動で入ります)。ターミナルだけで済ませたいなら nano backup.sh(保存は Ctrl + O → Enter、終了は Ctrl + X)。
メモ帳で開くのは避けてください。改行の形式が変わってスクリプトが動かなくなることがあります。
# はるとのバックアップ係
# 使い方: bash backup.sh
# 日付を先に1回だけ決める。実行の途中で日をまたいでもズレないようにするため。
# TODAY が外から決まっていればそれを使う(同じ結果をもう一度出したいときのため)。
TODAY="${TODAY:-$(date +%Y-%m-%d)}"
TARGET="renshuu"
DEST="backups/$TODAY"
mkdir -p "$DEST"
cp -R "$TARGET" "$DEST"
echo "$TARGET を $DEST に控えました"
ls "$DEST"読んでみてください。新しいのは3つだけです。
| 書き方 | 何をするか |
|---|---|
TARGET="renshuu" |
変数。名前に値をしまっておく。使うときは $TARGET |
$(date +%Y-%m-%d) |
$( ) の中でコマンドを走らせて、その結果を値として取り出す |
${TODAY:-…} |
「TODAY がもう決まっていればそれを使い、無ければ … を使う」 |
mkdir -p |
-p を付けると、途中のフォルダも一緒に作る(すでにあっても怒らない) |
3行目の TODAY の行は、なくても動きます。入れてあるのは、あとから「あの日の分をもう一度」と指定できるようにするためです。この教材の実行結果が毎日変わらないのも、この書き方のおかげです。
値を外から差し替えられるようにしておく、というのは小さな道具を長く使うためのコツです。
変数を使うときは、いつも “$TARGET” のように引用符で囲みます。名前にスペースが入っていたときに、2つのファイル名として扱われてしまうのを防ぐためです。これは rm と組み合わさると事故になりますので、癖にしてください。
6. 走らせる
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
renshuu を backups/2026-08-01 に控えました
renshuu日付の部分は今日の日付になります。 backups フォルダの中に、日付の名前のフォルダができて、その中に renshuu が丸ごと入っています。
もう一度打ってみてください。同じ日なら同じ場所に上書きされ、日が変われば新しいフォルダができます。
bash backup.sh は「bashさん、このファイルに書いてあるコマンドを順に打ってください」という意味です。まだ「実行ファイル」ではありません。次の章で、そこを変えます。
7. コマンド帳に足す
行頭の $ は「ここからコマンド」という目印です。$ は打たないでください。
ハマったら
backup.sh を打っても何も起きない / エラーが出る
まず場所を確かめてください。 pwd が .../shell-kit で終わっていて、ls に backup.sh と renshuu の両方が出ていれば正解です。
cp: renshuu: No such file or directory と出るなら、renshuu の中ではなくその1つ上で打つ必要があります。cd .. で上がってから、もう一度。
「Permission denied」と出る
bash backup.sh ではなく ./backup.sh と打っていませんか。この章ではまだ bash を付けて打ちます。 ./ で打てるようにするのが次の章です。
backups の中が空っぽ
TARGET の綴りを確かめてください。renshuu フォルダが実在しないと、cp が失敗してもスクリプトはそのまま最後まで進んでしまいます。シェルは「途中で失敗しても止まらない」のが既定です。
ZIPで戻したい
このページの下のZIPは、この章を終えた状態のフォルダです。解凍して、その中で作業を続けられます。自分で書き換えた部分は消えてしまうので、先に自分のファイルを別の場所へ待避してから使ってください。
こうなっていればOK
うまくいかないときは、この章の完成ファイル一式(ZIP)をダウンロードして続きから進めても大丈夫です。
卒業まであと1章です。
この章はまだ完了していません。
保存できませんでした(プライベートブラウズ中かもしれません)。この端末に進捗は残りませんが、先へは進めます。