私がどんな言語でも学んだ方法は、ただ座ってその言語を学ぶために本を読むのではなく、心に目的を持つことです:
私は X を自動化したいのですが、それから問題を考え始め、インターネットを使って、A から B を得るための構文を見つけます。
たとえば、数年前、48 時間ごとに再起動しなければならない Windows から移行したばかりで、しかも私が大のオタクだったため、自分のシステム アップタイムを追跡したいと思いました。 オンラインの友人をバカにしていたので、インターネット上の別の州にあるサーバーでホストされている Web ページで、自宅のシステムの稼働時間を更新したかったのです。
さて、まず最初に、実際に実行されるスクリプトをどのように作成したらよいでしょうか。 さて、uptime コマンドをバラしてもいいのですが、私が欲しかった機能のひとつは、”record uptime” を追跡することでした。 Linuxのuptimeコマンドは、人間が読める形で稼働時間を表示します:
13:23:54 up 32 days, 4:19
まあ、これは大きいか小さいか解析するのは少し乱暴ですね。 しかし、もっと簡単な方法があるはずです。 uptime” プログラムはどこからそのデータを取得しているのでしょうか? ちょっとググったら、/proc system:
/proc/uptime
って出てきたんだけど、これどうやって読むの? いくつかの方法があります。 私が習慣的に使っている方法は、(catコマンドはこのためにあるわけではないので、おそらく間違った方法です:)
cat /proc/uptime
これは次のように返します:
2780345.41 5546896.19
OK、これで、いい小数点があるので、稼働時間の記録かどうかを判断するのが簡単になりますね。 でも、これをどうやって変数に取り込めばいいのでしょうか?
UPTIME=`cat /proc/uptime`
クール、これで変数に取り込めました。 この方法で変数にいろいろな面白いものを読み込むことができる。 今後覚えておかなければなりません。 勉強になりました。 また、その /proc のものは一体何なのでしょうか?
cat /proc/cpuinfo
さて、この大きな10進数の数字がありますね。 23.8日 “のようなアップタイムを得るには、どうすればいいんだろう? また、cat /proc/cpuinfoは2つの数字を返します。 どちらがいいのでしょうか? そして、その数字だけを得るために、どのようにそれを引き離せばいいのでしょうか? 私はもう少し読みました。 文字列を分離する方法はいくつかありますが、最初に出会ったのはcutコマンドです。 このコマンドを文字列で使うにはどうしたらいいのでしょうか? パイピングとリダイレクトについての記事を読みました。 2つの数字を区切り文字としてスペースで区切るんですね。 覚えておかないと。 そのパイプで面白いことができそうだ。 これは、私が出会った最も便利なコマンドラインツールの 1 つである cut コマンドと一緒に、精神的にファイルします。
さて、それをどうやって日数に変えるか…うーん、残念、bash はクソみたいな数学サポートです。 ふむ、この記事は bc について述べています。 ちょっと実験してみると:
uptime=`echo "scale=2; $uptime/86400" | bc`
つまりbcは計算をするために使われるプログラムなんですね。 覚えておかないといけませんね。 バッククォートとパイプについては前のステップで学んだので、ここでそれをどう使うかは明らかでした。
さて、これをテキストファイルにエコーして、WebサイトでPHPインクルードとして使えるようにするにはどうしたらいいでしょうか(PHPも同じように学びました)
あ、リダイレクト!
echo $uptime > ./uptime.txt
といった感じですね。 昔のスクリプト(これも含めて)を見てみると、コーディングは非効率的で、必ずしも今の私がやる方法とは限りません。 しかし、このプロセスを何年も続けていくうちに、私のスキルと知識は向上し、悪い習慣によって自分を追い込むことで、どうすればよいかを学ぶことができます。 教室で座ったり、本を読んだりするのではなく、自分で失敗してそこから学ぶことによって、私の方法論はスクリプトがより保守しやすくなるように改善されます。 私は主に自分自身の (趣味の) 目的のためにスクリプトを書きます。 コンピュータサイエンスのバックグラウンドを持つ人たちは、この学習方法に異論があるかもしれませんが、今のところ私にとってはうまくいっています。 というのも、ただ読んで暗記するような日常的な練習ではなく、やっていくうちに何か「出てくる」もの、つまり役に立つスクリプトを手に入れることができるからです。 素晴らしいです:
Advanced Bash Scripting Guide — bash について私が知っていることのほとんどは、ここから来ています。