新しいプログラミング言語を学ぶことは楽しいものです。 新しいものを学ぼうとするときはいつも、変数の定義、文の書き方、式の評価などに焦点を当てます。 これらの概念の一般的な理解ができれば、あとはたいてい自分自身で解決できます。 ほとんどのプログラミング言語には類似点があるので、あるプログラミング言語を知ったら、次の言語を学ぶのは、その言語独自の詳細を把握し、違いを認識することです。

新しいプログラミング言語を練習するために、私はいくつかのテストプログラムを書きたいのです。 私がよく書くサンプルプログラムのひとつは、単純な「数字当て」プログラムで、コンピュータが1から100までの数字を選び、私にその数字を当てるように要求します。 7059>

「数当て」プログラムは、変数への値の割り当て方、文の書き方、条件評価やループの実行方法など、プログラミング言語のいくつかの概念を練習するものです。 これは新しいプログラミング言語を学ぶのに最適な実験です。

Guess the number in Bash

Bash はほとんどの Linux システムで標準的に使われているシェルです。 豊富なコマンドラインユーザーインターフェースを提供するだけでなく、Bash はスクリプトの形で完全なプログラミング言語もサポートしています。

Bash に慣れていない場合は、これらの紹介をお勧めします:

  • Bash とは何ですか?
  • Bashプログラミングを始めよう
  • システム管理者のためのBashスクリプトを始めよう
  • Bashでの関数の書き方
  • Bashについてもっと読む

「数字当てゲーム」バージョンを書くことによって、Bashについて調べることができます。 以下は私の実装です。

スクリプトを分解する

スクリプトの最初の行、#!/bin/bashはLinuxにBashシェルを使ってこのスクリプトを実行するよう指示するものです。 すべてのスクリプトは#!文字ペアで始まり、これはシェルスクリプトであることを示す。 #!のすぐ後に続くのは、実行するシェルである。 この場合、/bin/bashはBashシェルである。

変数に値を割り当てるには、変数名の後に=記号を付ける。 例えば、guess=0という文はguessという変数に0を代入する。

また、readという文を使って、ユーザーに値を入力するように促すこともできる。 read guess と書くと、Bash はユーザーがテキストを入力するのを待ち、その値を guess 変数に格納する。

変数の値を参照するには、変数名の前に $ を使用する。 つまり、guess変数に値を格納した後、$guessを使って値を取り出すことができる。

変数には好きな名前を使うことができるが、Bashは自分用にいくつかの特別な変数名を確保している。

値を格納すると同時に操作を実行したい場合、その文を特別な括弧で囲む必要がある。 これは Bash にその文を最初に実行するように指示し、= はその結果の値を変数に格納します。 数式を評価するには、文を$(( ))で囲みます。 二重括弧は算術式を表します。 私の例では、number=$(( $RANDOM % 100 + 1 )) は式 $RANDOM % 100 + 1 を評価し、number 変数に値を格納します。

+(プラス)、-(マイナス)、*(乗算)、/(除算)、%(モジュロ)などの標準の算術演算子が適用されます。

つまり number=$(( $RANDOM % 100 + 1 )) は 1 ~ 100 の乱数文を生成するということです。 modulo演算子(%)は、2つの数を割った余りを返す。 この場合、Bashは乱数を100で割り、0から99の範囲の余りを残す。 その値に1を加えることで、1から100の間の乱数を得る。

Bashは条件式とループのようなフロー制御をサポートしている。 数字を当てる」ゲームでは、Bashはguessの値がnumberと等しくない限りループを続ける。 推測値が乱数より小さい場合、Bashは「低すぎる」と表示し、推測値が乱数より大きい場合、Bashは「高すぎる」と表示する。

動作方法

Bashスクリプトを書いたので、それを実行すると「番号当てゲーム」を行うことができる。

Guess a number between 1 and 100
50
Too high
30
Too high
20
Too high
10
Too low
15
Too high
13
Too low
14
That's right!

スクリプトを実行するたびに、Bash は異なる乱数を選択します。

この「番号当てゲーム」は、非常にわかりやすい方法でいくつかの一般的なプログラミング概念を演習するため、新しいプログラミング言語を学ぶ際の素晴らしい入門プログラムです。 このシンプルなゲームを異なるプログラミング言語で実装することにより、いくつかのコアな概念を示し、各言語の詳細を比較することができます。

お気に入りのプログラミング言語がありますか。 その言語で「数字当てゲーム」をどのように書きますか。 この記事のシリーズで、あなたが興味を持つかもしれない他のプログラミング言語の例をご覧ください。