将昨天的代码全部函数化,代码命名和复用还可以再进一步优化调整。
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 "$@"