はじめに
Bashプログラミングの小ネタとして作成しました。
「*」を使ってピラミッドを表示してみます。
左寄り5段のピラミッド
ソース
#!/bin/bashecho"*"echo"**"echo"***"echo"****"echo"*****"
実行結果
$ ./pyramid.sh
*
**
***
****
*****
指定した数の段数を表示するピラミッド
先程のプログラムは、あれでも立派なプログラムです。
しかし、柔軟性に欠けるため、ユーザに段数を指定させるように修正します。
ソース
#!/bin/bashast='*'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/bashast='*'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のお作法
が理解出来ました。