zoukankan      html  css  js  c++  java
  • 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 "$@"

     

  • 相关阅读:
    【Linux&amp;Unix--open/close/write/read系统调用】
    瑞丽的SQL-SQL Server的表旋转(行列转换)
    oracle查询和编写数据字典
    [Python]How to handle the exception in Python?
    【Android 应用开发】 FastJson 使用具体解释
    OpenStack Dashboard
    Java Drp项目实战——Drp知多少
    腾讯下一个重点:硬件;硬件自身的未来也正进入多元化发展
    一个简单的带缓存http代理
    Swift语言教程中文文档
  • 原文地址:https://www.cnblogs.com/enjoyco/p/5896217.html
Copyright © 2011-2022 走看看