Shell脚本练习三部曲

Posted Zmac111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本练习三部曲相关的知识,希望对你有一定的参考价值。

Shell脚本练习三部曲

1、菱形

(1)普通菱形(上层图形拼接,下层为算法)

1

#!/bin/bash

#上层
for ((i=9;i>=1;i--))
do
  for ((j=1;j<=$i;j++))
  do
    echo -n " "
  done
  for ((h=9;h>=$i;h--))
  do
   echo -n "*"
  done
  for ((j=8;j>=i;j--))
  do
    echo -n "*"
  done
 echo ""
done

#下层
for ((b=1;b<=8;b++))
do
   for ((n=0;n<=$b;n++))
   do
     echo -n " "
   done

   k=$[$b*2 - 1]
   for ((c=15;c>=$k;c--))
   do
    echo -n "*"
   done
echo ""
done

(2)可变菱形

方法1 (for循环)

#!/bin/bash

read -p "请输入数字:" i
#上层
for ((a=1;a<=$i;a++))
do
   for ((b=$i;b>=$a;b--))
   do
     echo -n " "
   done

   for ((c=1;c<=$[$a*2-1];c++))
   do
     echo -n "*"
   done

 echo ""
done

#下层
for ((d=$i-1;d>=1;d--))
do
   for ((e=$i;e>=$d;e--))
   do
    echo -n " "
   done
   for ((f=1;f<=$[$d*2-1];f++))
   do
    echo -n "*"
   done

 echo ""
done

方法2 (while循环)

#!/bin/bash
high=1
char=1
read -p "请输入要打印的行数:  " line
blank=$(($line-1))
#因为最后一行没有星号,所以将line减一就是第一行的空格数
while [ $high -le $line ]
#high小于等于line执行,否则不执行,high会逐步累加
do
		#空格循环体
        blank1=1
        while [ $blank1 -le $blank ]
        do
                echo -n " "
                let blank1++
        done
		
		#字符循环体
        char1=1
        while [ $char1 -le $char ]
        do
                echo -n "*"
                let char1++
        done
echo
#换行符
let high++
#每次字符都会增加两个而不是一个
let char=$((char+2))
#空格会逐步递减
let blank--

done

#因为在上一个while循环是加数以后再进行判断,所以这里高和每行字符数都要减去2
high2=$(($high-2))
char2=$(($char-2))
#因为第一行没有空格,所以空格数为0
blank2=0

while [ $high2 -ge 0 ]
#只要高大于等于0就继续执行
do
		#空各循环体
        blank3=1
        while [ $blank3 -le $blank2 ]
        do
                echo -n " "
                let blank3++
        done
		
		#字符循环体
        char3=1
        while [ $char3 -le $char2 ]
        do
                echo -n "*"
                let char3++
        done
#换行符
echo
#高递减
let high2--
#每行字符都会递减2
let char2=$((char2-2))
#空格逐步增加
let blank2++

done

2、五角星

五角星

#!/bin/bash
for ((i=1;i<=5;i++))                                   #顶头部分
    do
            for  ((j=1;j<=19-$i;j++))
                    do
                      echo -n " "
                    done
            for  ((k=1;k<=$[$i*2-1];k++))
                    do
                      echo -n "*"
                    done
    echo ""
done
for  ((i=1;i<=4;i++))                           	   #中间倒梯形
    do
            for  ((j=1;j<=3*$i-3;j++))
                    do
                    echo -n " "
                    done
            for  ((k=1;k<=42-6*$i;k++))
                    do
                    echo -n "*"
                    done
    echo ""
done
for  ((i=1;i<=2;i++))                                 #第二个正梯形
    do
            for  ((j=1;j<=13-$i;j++))
                    do
                    echo -n " "
                    done
            for  ((k=1;k<=11+2*$i;k++))
                    do
                    echo -n "*"
                    done
    echo ""
done
for  ((i=1;i<=4;i++))                                #最下面两个三角形
    do
            for  ((j=1;j<=11-$i;j++))
                    do
                    echo -n " "
                    done
            for  ((k=1;k<=9-2*$i;k++))
                    do
                    echo -n "*"
                    done
            for  ((l=1;l<=6*$i-3;l++))
                    do
                    echo -n " "
                    done
            for  ((m=1;m<=9-2*$i;m++))
                    do
                    echo -n "*"
                    done
    echo ""
    done

以上是关于Shell脚本练习三部曲的主要内容,如果未能解决你的问题,请参考以下文章

代码片段:Shell脚本实现重复执行和多进程

shell脚本小练习

shell脚本练习题

shell 脚本 片段

shell练习题

shell综合练习题(图文并茂代码清单)