Shell脚本二重循环打印
一 打印正方形的流程
1.1 初始命令结果(一列5个*)
[root@server2 ~]# vi xinghao.sh
[root@server2 ~]# chmod +x xinghao.sh
[root@server2 ~]# vi xinghao.sh
[root@server2 ~]# ./xinghao.sh
#!/bin/bash
# 打印图片
for ((j=1;j<=5;j++))
do
echo "*"
done
1.2 修改为不换行输出 (变成一行5个*)
#!/bin/bash
# 打印图片
for ((j=1;j<=5;j++))
do
echo -n "*" 不换行输出
done
1.3 增加外层循环条件(变成一行15个*)
[root@server2~]vi xinghao.sh
[root@server2 ~]# ./xinghao.sh
#!/bin/bash
# 打印图片
for ((i=1;i<=5;i++))
do
for ((j=1;j<=5;j++))
do
echo -n "*"
done
done
1.4 增加换行(改变成5行*)
#!/bin/bash
# 打印图片
for ((i=1;i<=5;i++))
do
for ((j=1;j<=5;j++))
do
echo -n "*"
done
echo 增加换行
done
1.5 打印正方形 (在内循环中加入间隔空行)
#!/bin/bash
# 打印正方形
for ((i=1;i<=5;i++))
do
for ((j=1;j<=5;j++))
do
echo -n "* "
done
echo
done
二 打印矩形
两种方式
2.1 第一种:设置长宽不同
[root@server2 ~]# vi cfx.sh
[root@server2 ~]# chmod +x cfx.sh
[root@server2 ~]# ./cfx.sh
#!/bin/bash
# 打印长方形
for ((i=1;i<=6;i++))
do
for ((j=1;j<=5;j++))
do
echo -n "* "
done
echo
done
2.2 第二种:设置横向没有间隔
#!/bin/bash
# 打印长方形
for ((i=1;i<=5;i++))
do
for ((j=1;j<=5;j++))
do
echo -n "*"
done
echo
done
三 ECHO 命令常用选项
echo -n: 不换行输出
-e:支持反斜线控制的字符转换
转义:
\a 发出警告声
\b 删除前一个字符
\c 最后不加上换行符号
\f 换行但光标仍旧停留在原来的位置
\n 换行且光标移至行首
\r 光标移至行首,但不换行
\t 插入tab
\v 与\f 相同
\\ 插入\字符
\nnn 插入nnn(八进制)所代表的ASCII字符
[root@server2 ~]# echo -e "abc\acd"
abccd
[root@server2 ~]# echo -e "abc\bcd"
abcd
[root@server2 ~]# echo -e "abc\ccd"
abc[root@server2 ~]#
[root@server2 ~]# echo -e "abc\fcd"
abc
cd
[root@server2 ~]# echo -e "abc\ncd"
abc
cd
[root@server2 ~]# echo -e "abc\rcd"
cdc
[root@server2 ~]# echo -e "abc\tcd"
abc cd
[root@server2 ~]# echo -e "abc\vcd"
abc
cd
[root@server2 ~]# echo -e "abc\\cd"
abc[root@server2 ~]#
[root@server2 ~]# echo -e "abc\044cd"
abc$cd
\t 插入tab
[root@server2 ~]# vi cfx.sh
[root@server2 ~]# ./cfx.sh
#!/bin/bash
# 打印长方形
for ((i=1;i<=5;i++))
do
for ((j=1;j<=5;j++))
do
echo -en "*\t"
done
echo
done
四 打印直角三角形
4.1 左下
[root@server2 ~]# vi sjx.sh
[root@server2 ~]# chmod +x sjx.sh
[root@server2 ~]# ./sjx.sh
#!/bin/bash
# 打印直角三角形
for ((i=1;i<=9;i++)) 定值行数
do
for ((j=1;j<=$i;j++)) 变量
do
echo -n "*"
done
echo
done
4.2 右上
[root@server2 ~]# vi sjx1.sh
[root@server2 ~]# ./sjx1.sh
#!/bin/bash
# 打印直角三角形
for ((i=1;i<=9;i++))
do
for ((j=1;j<$i;j++))
do
echo -n " "
done
for ((k=10-$j;k>0;k--))
do
echo -n "*"
done
echo
done
4.3 左上
[root@server2 ~]# vi sjx2.sh
[root@server2 ~]# chmod +x sjx2.sh
[root@server2 ~]# ./sjx2.sh
#!/bin/bash
# 打印直角三角形
for ((i=1;i<=9;i++))
do
for ((j=1;j<=10-$i;j++))
do
echo -n "*"
done
echo
done
4.4 右下
[root@server2 ~]# vi sjx3.sh
[root@server2 ~]# chmod +x sjx3.sh
[root@server2 ~]# ./sjx3.sh
#!/bin/bash
# 打印直角三角形
for ((i=1;i<=9;i++))
do
for ((j=9;j>=$i;j--))
do
echo -n " "
done
for ((k=1;k<=$i;k++))
do
echo -n "*"
done
echo
done
五 打印等腰三角形
[root@server2 ~]# vi dy.sh
[root@server2 ~]# chmod +x dy.sh
[root@server2 ~]# ./dy.sh
#!/bin/bash
# 打印等腰三角形
for ((i=1;i<10;i++))
do
for ((n=10;n>=i;n--))
do
echo -n " "
done
for ((m=1;m<=i;m++))
do
echo -n "* "
done
echo
done
六 打印等腰梯形
[root@server2 ~]# vi dytx.sh
[root@server2 ~]# chmod +x dytx.sh
[root@server2 ~]# ./dytx.sh
#!/bin/bash
# 打印等腰梯形
for ((i=1;i<10;i++))
do
for ((n=10;n>=i;n--))
do
echo -n " "
done
for ((m=1;m<=i;m++))
do
echo -n "**"
done
echo
done
七 打印菱形
7.1 seq命令解析
seq 1000 起始默认是1,间隔默认也是1
seq 2 1000 间隔默认是1
seq 1 3 10 从1到10,间隔为3,结果是:1 4 7 10
seq 1 10 从1开始,到10结束,间隔为1,结果是:1 2 3 ..... 10
7.2 流程
[root@server2 ~]# vi lx.sh
[root@server2 ~]# chmod =x lx.sh
[root@server2 ~]# ./lx.sh
菱形上半部分命令
#!/bin/bash
# 打印菱形
read -p "请输入菱形长度" len
for i in `seq 1 $len`
do
for ((j=$len-1;j>=$i;j--))
do
echo -n " "
done
for ((m=1;m<=$i;m++))
do
echo -n "* "
done
echo
done
菱形下半部分命令
for i in `seq 1 $len`
do
for ((j=1;j<=$i;j++))
do
echo -n " "
done
for ((n=$len-1;n>=$i;n--))
do
echo -n "* "
done
echo
done
八 九九乘法表
8.1 递减式
[root@server2 ~]# vi ninel.sh
[root@server2 ~]# chmod +x ninel.sh
[root@server2 ~]# ./ninel.sh
#!/bin/bash
# 9*9乘法表
for ((i=1;i<=9;i++))
do
for ((j=1;j<=i;j++))
do
echo -ne "$i*$j=$((i*j)) \t"
done
echo
done
8.2 横向式
[root@server2 ~]# vi ninel.sh
[root@server2 ~]# chmod +x ninel.sh
[root@server2 ~]# ./ninel.sh
#!/bin/bash
# 9*9乘法表
for ((i=1;i<=9;i++))
do
for ((j=1;j<=9;j++))
do
echo -ne "$i*$j=$((i*j)) \t"
done
echo
done