*
이 bash 스크립트로 생성된 상자 중앙에 어떻게 추가합니까 ?
#!/bin/bash
#
# raami joonistamine
echo -n "sisesta ridade arv: "
read rida
echo -n "sisesta tärnide arv: "
read tarn
# genereeri rea numbrid
for ((i = 1; i <= $rida;i++))
do
echo -n "$i "
# kui on esimene või viimane rida
if [ $i -eq 1 -o $i -eq $rida ]; then
# tärnidest tulev rida
for((j = 1; j <=$tarn; j++))
do
echo -n "* "
done
# teised read
else
echo -n "* "
# tühikud
for((j = 2; j < $tarn;j++))
do
echo -n " "
done
echo -n "* "
fi
echo
done
답변1
가장 안쪽 루프를 변경하십시오.
# tühikud
for((j = 2; j < $tarn;j++))
do
echo -n " "
done
도착하다
# tühikud
for((j = 2; j < $tarn;j++))
do
if [ "$i" -eq "$(( (rida+1) / 2 ))" ] && [ "$j" -eq "$(( (tarn+1) / 2 ))" ]; then
echo -n '* '
else
echo -n " "
fi
done
즉, 가장 가운데에 있는 문자를 출력하고 싶다는 것을 감지하면 *
공백 대신에 a를 삽입하십시오.
행에서 약간 더 정확한 위치를 지정하려면 다음을 수행하세요.
# tühikud
for((j = 2; j < $tarn;j++))
do
if [ "$i" -eq "$(( (rida+1) / 2 ))" ] && [ "$j" -eq "$(( (tarn+1) / 2 ))" ]; then
if [ "$(( tarn%2 ))" -eq 0 ]; then
echo -n ' *'
else
echo -n '* '
fi
else
echo -n " "
fi
done
개별 문자를 출력하는 대신 전체 라인을 한 번에 출력합니다. 이것이 더 효율적이며 세 가지 유형의 행(위/아래 행, 중간 행, 기타 행)만 걱정하면 됩니다.
#!/bin/bash
read -r -p 'Height: ' rows
read -r -p 'Width : ' cols
topbottom=$( yes '*' | head -n "$cols" | tr '\n' ' ' )
printf -v midrow '*%*s*%*s*' "$(( cols - 2 ))" "" "$(( cols - 2 ))" ""
printf -v otherrows '*%*s*' "$(( 2*(cols - 2) + 1 ))" ""
for (( row = 0; row < rows; ++row )); do
if (( row == 0 )) || (( row == rows - 1 )); then
thisrow=$topbottom
elif (( row == rows / 2 )); then
thisrow=$midrow
else
thisrow=$otherrows
fi
printf '%2d %s\n' "$(( ++n ))" "$thisrow"
done