星評価印刷

星評価印刷

私は初心者であり、スクリプト(「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ときに三角形を印刷します。0i

次に、を使用して0その文字を*文字に変更しますtr

テスト:

$ bash script.sh
Number please: 10
********************
 ******************
  ****************
   **************
    ************
     **********
      ********
       ******
        ****
         **
        ****
       ******
      ********
     **********
    ************
   **************
  ****************
 ******************
********************

また、見ることができますman printf

関連情報