별 등급 인쇄

별 등급 인쇄

저는 초보자이고 스크립트("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. 그런 다음 두 개의 산술 루프로 모양을 만듭니다 for.

첫 번째 루프는 모양의 위쪽 절반을 만들고, 두 번째 루프는 **모양의 중간과 아래쪽 절반을 만듭니다.

각 루프의 명령문은 동일하며 printf루프 변수의 값만 변경됩니다.i

printf여기서 사용된 형식은 %*.*d"첫 번째 매개변수에 따라 공간을 할당하고 두 번째 매개변수의 너비로 제로 패딩된 정수를 인쇄한다"는 의미입니다. 인쇄할 실제 정수는 0(세 번째 매개변수)입니다. 주어진 첫 번째와 두 번째 인수는 printf변경될 때 삼각형을 인쇄하도록 합니다.0i

그런 다음 를 사용하여 0해당 문자를 *문자 로 변경합니다 tr.

시험:

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

당신은 또한 볼 수 있습니다 man printf.

관련 정보