ターミナルで打てるコマンドと、人に渡せるスクリプトは別物です。shebang と実行権限、クォート、set -euo pipefail、getopts、trap、排他制御、ShellCheck と bats まで。全20レッスンで「自分だけが動かせる手順」を「他人の環境でも壊れないスクリプト」に変えるところまで進みます。
全20レッスンを5つの章に分けています。第1章から順に進めるのがおすすめですが、 いま困っている範囲だけを拾い読みしてもかまいません。 ※ シェルのコマンドはブラウザ内で実行できません。手元のターミナル(macOS なら Homebrew の bash 5.x)で試してください。
ターミナルで打つのと、ファイルに書いて渡すのはどこが違うのか。shebang と実行権限、クォートと単語分割、そして set -euo pipefail。ここを外すと、あとの17回すべてが不安定になります。
[ と [[ の違い、while read でファイルを1行ずつ読むときの落とし穴、local を付け忘れた変数がどこまで漏れるか。シェル特有の「動いてしまう間違い」を先に見ます。
スクリプトに外から値を渡す道。getopts でのオプション解析、パラメータ展開で外部コマンドを呼ばずに済ませる書き方、配列と連想配列、ヒアドキュメント。
ファイルディスクリプタを自分で開く、grep・sed・awk を使い分ける、mktemp と trap で後始末する、ログを設計する、二重起動を止める。長く動かすスクリプトに要るのはこの章です。
ShellCheck と shfmt で機械に読ませ、bats でテストを書き、dash で移植性を確かめ、遅さの原因をサブシェルに見つけ、最後は cron と systemd timer で定期実行に載せます。
全20レッスンを終えたら、書いたスクリプトを預けるサーバーの側へ。Linux システム管理で systemd とログの扱いに進めます。コマンドそのものに不安が残るなら Linux 入門へ。メンバーシップで全コースが解放されます。