LoginSignup
1
0

More than 3 years have passed since last update.

ピラミッドを表示するシェルプログラム

Last updated at Posted at 2020-06-01

はじめに

Bashプログラミングの小ネタとして作成しました。
「*」を使ってピラミッドを表示してみます。

左寄り5段のピラミッド

ソース

#!/bin/bash

echo "*"
echo "**"
echo "***"
echo "****"
echo "*****"

実行結果

$ ./pyramid.sh
*
**
***
****
*****

指定した数の段数を表示するピラミッド

先程のプログラムは、あれでも立派なプログラムです。
しかし、柔軟性に欠けるため、ユーザに段数を指定させるように修正します。

ソース

#!/bin/bash

ast='*'

echo -n "Input number => "
read num

for i in $(seq 1 $num)
do
  echo "$ast"
  ast='*'${ast}
done

forでなく、whileでカウンターを使っても良いですね。
whileよりもforの方が可読性が高いので採用しました。

実行結果

$ ./pyramid.sh
Input number => 6
*
**
***
****
*****
******

指定した数の段数を表示するピラミッド(中央揃え版)

結構難しかったです。
「*」の左側に空白が必要なのでそれをどのように扱うか。
また、空白を1つずつ減らす処理が必要になります。

ソース

$ cat center_pyramid.sh
#!/bin/bash

ast='*'
spc=' '

echo -n "Input number => "
read num

(( spc_cnt = $num - 2 ))

for i in $(seq 1 $spc_cnt)
do
  spc=' '${spc}
done

for j in $(seq 1 $num)
do
  echo "$spc""$ast"
  ast='**'${ast}
  spc=${spc#' '}
done

空白を削除する方法に、変数の文字列置換を使用しました。

実行結果

$ ./center_pyramid.sh
Input number => 6
     *
    ***
   *****
  *******
 *********
***********

おわりに

このプログラムを作成することで

  • 分岐構文
  • 繰り返し構文
  • readコマンド
  • testコマンド
  • 特別な意味を持つ記号の扱い
  • 変数の文字列置換
  • Bashのお作法

が理解出来ました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0