Shell脚本练习三部曲
Posted Zmac111
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本练习三部曲相关的知识,希望对你有一定的参考价值。
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脚本练习三部曲的主要内容,如果未能解决你的问题,请参考以下文章