今天看到一个shell打印伪杨辉三角的问题,觉的好玩,就写了个脚本实现,后续有时间继续整理:
打印需求(以5行为例):
        1         
      2 1 2       
    3 2 1 2 3     
  4 3 2 1 2 3 4   
5 4 3 2 1 2 3 4 5
思想:
  将输出分为2部分,每个打印点为一个空格加1个数,用条件将输出分为2部分,前部分为中心位置之前,后部分为中心位置之后,前部分是先输出空格再根据数的大小递减输出,后部分是先递增输出数,最后输出空格。
实现脚本:
#!/bin/sh
##这个脚本是输出一个类似下面样本的数列
#            1         
#        2  1 2       
#     3 2  1 2 3     
#   4 3 2 1 2 3 4   
#5 4 3 2 1 2 3 4 5
##脚本编写时间2013年4月24日
##by bbzsxjj ver 1.0
echo -n "请输入需要输入的行数:"
read MAX
##设置打印的长度,一般为最大行数的2倍再减一
let "MXLONG=$MAX*2 -1"
#echo $MXLONG
##控制行数
for ((line=1;line<=${MAX};line++))
do
##计算输出的空格数
  space=$(($MAX-$line))
##计算后半部输出时要输出的数字数
  data=$(($MXLONG-$MAX-$space))
##前半部输出
    for ((li=1;li<=${space};li++))
    do
    echo -n "  "
    done
    for ((ni=$line;ni>=1;ni--))
    do
    echo -n "$ni "
    done
##后半部输出
    for ((ei=0;ei<${data};ei++))
    do
##设置输出的数大小
    let "OI=$ei+2"
    echo -n "$OI "
    done
    for ((ci=1;ci<=${space};ci++))
    do
    echo -n "  "
    done
##最后输出空格,完成1行的输出
    echo
done

09-30 08:39
查看更多