いった月名の略称を見たときにそれが何月かスムーズに思い出せますか?思い出せる人はとてもえらいです。いう文字を見て何月か思い出すことが出来ずショックを受けました。なんだか6月感が薄いと思うんですよね。しようもない話ですみません...。何とかするためシェルスクリプトでサクッと暗記マシーン(?)を作ることにしました。動いてるところランダムに問題を出題し、答えるだけのシンプルなツールです。キーなどでスクリプトを終了するまで無限に出題され続けるスパルタ仕様になっています。内容を取り入れた実装にしています。done}main回答の入力待ちは無くしてランダムに出題と回答表示を繰り返すだけのほうが暗記カードっぽくなるかもしれませんね。月名に限らず、問題集の定義を書き換えれば英単語の単語カードなどでも使えるとおもいます。出来れば問題データは別ファイルに定義した方がいいですが今回は省略したいとおもいます。枯れたコマンド言語でスクリプトなんて書きたくねえ!と思う人は多いと思います。他言語には見られないシェルスクリプト特有の癖や記法が多くあり、最近の言語に慣れている人ほどつまずくポイントが多いと思います。技術が枯れているからこその良さはあります。標準シェルとして採用されており、一度身につけておくと長く使えるお得な技術です🙆また、書き方のスタイルをいくつか工夫することで、書き味を高級言語っぽく近づけることもできます。近いレベルまでいけます。良くも悪くも自由な言語です。世界に必要な秩序をもたらすきっかけとなり、シェルスクリプトを書く敷居が少しでも下がればいいなと思っています。予想以上に「高級言語」という言葉に対しての反応が多く、釣りタイトルっぽくなってしまったことを反省しています。シェルが人間向きに作られたインターフェースということを考えるとシェルスクリプトも十分高級と言えるとおもいます。機能が多分に登場します。互換のシェルスクリプトを目指す方にはこの記事の内容は適さないことがあります。コマンドで設定できるシェルオプションには、取りあえず設定しとけレベルで便利なオプションがいくつかあります。安全なスクリプトを書くという意味でも適切に設定し、その意味を知っておいたほうがいいです。私はシェルスクリプトの書き出しは大体以下のようにしています。することで、以下の4つのシェルオプションがまとめて設定されます。:リダイレクトによるファイル上書き事故を予防します。上書きすることができなくなります。使えば上書きができるようになります。:スクリプトの実行中にエラーが発生すると、そこでスクリプトが終了するようになります。code)に非0の値が返ることを指します。できるようになります。これを設定しておかないと途中でエラーが起きてもそのままスクリプトが突き進んでいくため、怖いです。:未定義の変数を使用すると、そこでスクリプトが終了するようになります。したときに気づきやすくなります。:パイプの途中でエラーが起きた場合もエラーが発生するようになります。具体的には非0で終了した最後に実行された(右側にある)コマンドがパイプライン全体の終了ステータスになるようになります。組み合わせて使うとスクリプトも終了するようになるので便利です。シェルオプションは以下のように一行目のシバンで設定することも可能です。コマンドで設定する方がいいでしょう。ロケールによる動作の違いを予防する数多に提供されているコマンドは、シェル環境のロケール設定に依存して動作が変わるものも多くあります。そのため、シェルスクリプトの冒頭で決まったロケールを設定しておくとスクリプトの可搬性を高められます。以下のようにすると日本語環境であってもデフォルトロケールの英語環境に戻すことができます。準拠システムのデフォルトロケールとなっています。コマンドが高速になるという話は有名です。パワフルな判定式を活用するシェルスクリプトでまず難関となりがちなのが条件判定の書き方です。括弧の書き方による違いだったり、謎のオプションによる判定方法が色々あって訳わからん!となります。いった判定式を高級言語っぽくスマートに書ける強力な拡張機能が備わっています。文を書こうとすると以下のようになります。不等号を使った判定に慣れていると読みにくいと思います。以下です"fi元々シェルスクリプトにはデータ型の概念がなく、全ての変数は文字列です1。数値と呼ばれるものも数値のみで構成される文字列に過ぎません。括弧の中では文字列変数を数値とみなし、様々な算術演算をすることができます。演算子が使えるようになります。方を使うといいでしょう。否かを判定したいだけであれば括弧なしで判定できます。"hoge.txtにはAppleが含まれた行がない"fi判定方法は色々とありますが、それぞれに向き不向きがあります。大雑把にまとめると以下のような使い分けになるでしょう。行が長くなったら適度に改行するシェルスクリプトはその性質上、一行がとても長くなりやすいです。コマンドラインオプションやパイプラインを駆使して複雑な処理していくことになるからです。改行はそこまでに書かれているコマンドを実行するための文法上の目印でもあるので、どこでも自由にできるわけではありません。いくつかのルールに則ればコマンドの途中でも改行することができます。その最たる例ですが、とにかくコマンドラインオプションが長くなりがちです。書かなくても、行末に書くと改行できる記号がいくつかあります。