shell 打印菱形 函数式编程

将昨天的代码全部函数化,代码命名和复用还可以再进一步优化调整。

  1 #!/bin/bash
  2 #########################################################################
  3 # File Name     : print_start.sh
  4 # Author        : uc
  5 # Created Time  : 22 Sep 2016
  6 #########################################################################
  7 usage() {
  8     cat <<EOF
  9 
 10 EOF
 11 }
 12 
 13 function fn_random_event() {
 14     echo $((RANDOM%2))
 15 }
 16 
 17 function fn_provide_print() {
 18     if [[ $1 -eq 2 ]]; then
 19         read -r -p "请输入要打印的行数:" pn
 20     else
 21         pn=$((RANDOM%10+10))
 22     fi
 23     
 24     if [[ $((pn%2)) -eq 0 ]]; then
 25         pn=$((pn+1))
 26     fi
 27 
 28     hm=$(($((pn+1))/2))
 29     
 30     if [[ ! -z $1 ]]; then
 31         print_sort=$1
 32     fi
 33 
 34     if [[ $print_sort -eq 3 ]]; then
 35         hollow_top=$hm
 36         hollow_bottom=$hm
 37     elif [[ $print_sort -eq 4 ]]; then
 38 
 39         event1=$(fn_random_event)
 40         event2=$(fn_random_event)
 41 
 42         if [[ $event1 -eq 1 ]]; then
 43             hollow_top=$hm
 44             hollow_bottom=$hm
 45         fi
 46 
 47         if [[ $event2 -eq 1 ]]; then
 48             hollow_bottom=$hm
 49         fi
 50 
 51     fi
 52 
 53 }
 54 
 55 function fn_print_blank() {
 56     for ((j = $(($1-$2)); j > 0; j--))
 57     do
 58         echo -n " ";
 59     done
 60 }
 61 
 62 function fn_print_start() {
 63     if [[ ! -z $1 ]]; then
 64         cnt=$(($1*2-1))
 65     fi
 66 
 67     for ((m = 1; m <= cnt; m++))
 68     do
 69         if [[ ! -z $2 ]]; then
 70             case $m in
 71                 1 ) echo -n "*"
 72                     ;;
 73                 "$cnt" )
 74                     echo -n "*"
 75                     ;;
 76                 * )
 77                     echo -n " "
 78                     ;;
 79             esac
 80         else
 81             echo -n "*"
 82         fi
 83     done
 84     echo  ""
 85 }
 86 
 87 function fn_print_diagram() {
 88     for ((i = 1; i <= pn; i++))
 89     do
 90         if [[ $i -le $hm ]]; then
 91 
 92             fn_print_blank $hm $i
 93             fn_print_start $i $hollow_top
 94 
 95         elif [[ $i -gt $hm ]]; then
 96 
 97             new_i=$(((pn+1)-i))
 98             fn_print_blank $hm $new_i
 99             fn_print_start $new_i $hollow_bottom
100         fi
101     done
102 }
103 
104 main() {
105 
106     local pn
107     local hm
108     local hollow_top
109     local hollow_bottom
110 
111 
112     echo "$event1" "$event2" 
113     echo "请选择要打印的图形:"
114     echo '#########################################'
115     echo "1,随机菱形"
116     echo "2,固定菱形"
117     echo "3,空心菱形"
118     echo "4,随机打印"
119     echo '#########################################'
120     echo ""
121     read -r -p "输入要打印的图形:" print_sort
122 
123     fn_provide_print "$print_sort"
124     fn_print_diagram "$print_sort"
125 }
126 
127 [[ "${BASH_SOURCE[0]}" == "${0}" ]] && main "$@"

 

 

转载于:https://www.cnblogs.com/enjoyco/p/5896217.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值