はじめに
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のお作法
が理解出来ました。