私は初心者であり、スクリプト(「for」ループ)を書きたいです。
- リクエスト番号
- 数字に2を掛け、元のアスタリスクで始まり、次のように表示されます。 (例:数字は4です。)
********
******
****
**
****
******
********
答え1
#!/bin/bash
read -p 'Number please: ' n
{
for (( i=0; i<n-1; ++i )); do
printf '%*.*d\n' "$(( 2*n-i ))" "$(( 2*(n-i) ))" 0
done
for (( i=n-1; i>=0; --i )); do
printf '%*.*d\n' "$(( 2*n-i ))" "$(( 2*(n-i) ))" 0
done
} | tr 0 '*'
上記のスクリプトはユーザーの番号を変数として読み込みますn
。次に、2つの算術ループでシェイプを作成しますfor
。
最初のループは形状の上半分を作成し、2番目のループは**
形状の中央と下半分を作成します。
各ループのステートメントは同じで、printf
ループ変数の値のみが変更されます。i
printf
ここで使用される形式は、%*.*d
「最初のパラメータに従ってスペースを割り当て、2番目のパラメータの幅でゼロパディングされた整数を印刷する」という意味です。印刷する実際の整数は0
(3番目のパラメータ)です。与えられた最初と2番目の引数は、変更されたprintf
ときに三角形を印刷します。0
i
次に、を使用して0
その文字を*
文字に変更しますtr
。
テスト:
$ bash script.sh
Number please: 10
********************
******************
****************
**************
************
**********
********
******
****
**
****
******
********
**********
************
**************
****************
******************
********************
また、見ることができますman printf
。