编写一个shell脚本,输入正整数n,打印边长为n的等腰三角形。
示例:
输入:5
输出:
*
* *
* * *
* * * *
* * * * *
#!/bin/bash read -r num for ((i = 1; i <= num; i++)); do for ((j = num - i - 1; j >= 0; j--)); do echo -n " " done for ((k = 1; k <= i; k++)); do if [[ $k -eq $i ]]; then echo -n "*" else echo -n "* " fi done echo "" done
# 方法1: 最笨的方法
# 1: 打印4个空格+"* "*1
# 2: 打印3个空格+"* "*2
# 3: 打印2个空格+"* "*3
# 4: 打印1个空格+"* "*4
# 5: 打印0个空格+"* "*5
# 若打印num等边三角形,则n行应该是
# n: 打印num-n个空格+打印n个“* ”
read -r num
for n in $(seq 1 "$num"); do
# 打印num-index个空格
# shellcheck disable=SC2007
for i in $(seq 1 $[$num-$n]); do
echo -n ' '
done
# 打印n个“* ”
for j in $(seq 1 "$n"); do
echo -n '* '
done
# 每个循环过后回车换行
echo
done
# 方法2:使用awk
# 考察点: 由于awk中的语法是c语言,所以num不能再awk的代码块中直接使用,因此使用awk -v {代码块中的变量名}=${shell中的变量名}
# 然后再awk中用正常的思维撰写代码即可
read -r num
awk -v num="${num}" 'BEGIN{
for(i=0;i<num;i++){
row=""
for(j=1;j<num-i;j++) {
row=row " "
}
for(j=0;j<=i;j++) {
row=row "* "
}
print row
}
}' awk 'BEGIN{
for(i=1;i<=5;++i){
for(j=1;j<=5-i;++j){
printf(" ")
}
for(j=1;j<=i;++j){
printf("*")
printf(" ")
}
for(j=1;j<=5-i;++j){
printf(" ")
}
printf("\n")
}
}'
line=5
eval 'ast=`printf "%$((${line}-1))s*"`'
for i in $(seq 1 $line); do
echo "$ast"
ast=${ast/" *"/"* *"}
done