我正在尝试使用以下 bash 脚本输出菱形形状。
#!/bin/bash
read -p "Please write a number: " number
# Printing asterisks according to input:
for i in $(seq 1 "$number")
do
stars+="*"
done
# Another way:
# stars=$(printf "%*s" "$number" "*")
# Function 1
space=$(( number - 1 ))
function pyramid1 {
for (( i=1; i<=$number; i++ ))
do
for (( k=$space; k>=0; k-- ))
do
echo -n " "
done
for (( j=1; j<=i; j++ ))
do
echo -n "*"
done
space=$(( space - 1 ))
echo
done
}
# pyramid1
# output1=$(pyramid1)
# pyramid3=$(echo "$output1" | rev)
# echo "$pyramid3"
function pyramid4 {
for (( i=$number; i>0; i-- ))
do
echo "$stars"
until=$(( $i-1 ))
stars="${stars:0:i-1}"
done
}
output=$(pyramid4)
pyramid2=$(echo "$output" | tac)
output1=$(pyramid1)
pyramid3=$(echo "$output1" | tac)
#pyramid1
#echo "$pyramid2"
#echo "$pyramid3"
#pyramid4
#echo "$pyramid2" > temp2
#echo "$pyramid3" > temp3
printf '%s|%s\n' "$(pyramid1)" "$pyramid2"
printf '%s|%s\n' "$pyramid3" "$(pyramid4)"
作为初学者,我能够创建每 4 个部分。但是,我无法在同一行中并排打印每两个部分。我将衷心感谢您的帮助。先感谢您!这是我最后得到的输出
混合使用算术评估(例如,
((a=i<0?-i:i))
表示i
的绝对值)、模式替换(例如,"${s:0:b}"
表示“$s”的第一个字符b
)和printf
的字段宽度规范
(例如,printf -v s '%*s' $((2*n)) ''
用于在 2*n
中存储 s
空格字符串):
n=5
printf -v s '%*s' $((2*n)) ''
s=${s// /*}
for ((i=-n+1;i<n;i++)); do
((a=i<0?-i:i))
((b=2*(n-a)-1))
printf '%*s%s\n' $a "" "${s:0:b}"
done
*
***
*****
*******
*********
*******
*****
***
*