shell整理(30)====嵌套循环shell写找勾股数和shift命令

简介:

(一)题目:找出100 以内的勾股数

shell 代码如下:



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/bash
 
for  in  ` seq  100`            
do
         for  in  ` seq  $i 100`         #这样就解决了重复的问题
         do                     例如 3 4 5  和 4 3 5
                 for  in  ` seq  $j  100`
                 do
                 a=$((i*i))
                 b=$((j*j))
                 c=$((x*x))
                 d=$(($a+$b))
                 if  [[  $d = $c ]]
                 then
                         echo  $i $j $x
                 fi
                 done
         done
done

输出如下:

[root@localhost ding]# 

[root@localhost ding]# bash 6.sh   #有没有发现输出结果第二列都比第一列数字大

3 4 5

5 12 13

6 8 10

7 24 25

8 15 17

9 12 15

9 40 41

10 24 26

11 60 61

...............

利用上面这个原理我们可以打印一个九九乘法表

shell 代码如下:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
 
for  in  ` seq  9`
do
         for  in  ` seq  $i `       #这地方写成$i 就比写成seq 9 方便多了呢
         do
                 echo  -n  "$i*$j=$(($i*$j)) "    #有一个空格
         done
         echo             内层循环完成以后换行
done
echo


输出结果如下:

[root@localhost ding]# bash 7.sh    #外层决定有多少行,内层决定有多少列

1*1=1 

2*1=2 2*2=4 

3*1=3 3*2=6 3*3=9 

4*1=4 4*2=8 4*3=12 4*4=16 

5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 

6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 

7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 

8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 

9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 


代码稍作改变,也可以变成这样:哈哈  例如

[root@localhost ding]# bash 7.sh 

1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9 

2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 

3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27 

4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 

5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 

6*6=36 6*7=42 6*8=48 6*9=54 

7*7=49 7*8=56 7*9=63 

8*8=64 8*9=72 

9*9=81 


代码如下:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
 
for  in  ` seq  9`
do
         for  in  ` seq  $i 9`
         do
                 echo  -n  "$i*$j=$(($i*$j)) "
         done
         echo
done
echo

如果你九九乘法表的原理明白了,那么打印这个也是同样的原理呢?把上面所有黄色标记都打印出来

例如:

[root@localhost ding]# bash 10.sh 

1 2 

1 2 3 

1 2 3 4 

1 2 3 4 5 

1 2 3 4 5 6 

1 2 3 4 5 6 7 

1 2 3 4 5 6 7 8 

1 2 3 4 5 6 7 8 9

 

shell  代码如下

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
 
for  in  ` seq  9`
do
         for  in  ` seq  $i`         #这三个是不是很像呢
         do
                 echo  -n   "$j "    #有一个空格,不然全都堆在一起了
         done
         echo             #内层循环完成以后换行
done

上面虽然没有什么命令,但是你必须深入了解for循环是怎么循环的才能写出来,第一个是三层嵌套循环 后两个是二层嵌套       

当i=1,里面循环1次,分别打印出来

当i=2,里面循环2次,分别打印出来

当i=3,里面循环3次,分别打印出来

..............................


(二)  shift 命令的一个简单应用

例如:


【root@localhost ding]# bash 1.sh `seq 9`    #`seq 9` 可以改成${a..z} 或 ${1..9}看效果

1 2 3 4 5 6 7 8 9     #9个数

2 3 4 5 6 7 8 9        #8个数

3 4 5 6 7 8 9

4 5 6 7 8 9

5 6 7 8 9

6 7 8 9

7 8 9

8 9

9    #一个数

shell 代码如下:

#!/bin/bash


while (($# > 0))     #这地方可以用[[ $# > 0 ]] 但是不能写成[ $# -ge 0 ],因为[ ]只支持

do            简单的比较,不支持逻辑比较

        echo $@       #这个地方写$#和$* 都可以

        shift

done


shift 其实就是向左移动,每循环一次,就把$1去掉,如果后面不加数字,默认去掉一个数。$2就变成$1打印出来。

例如我们这样:

#!/bin/bash


echo $#

while [[ $# > 0 ]]

do

        echo $@

        shift 3   #没次去掉$1.$2.$3

done

执行结果:

root@localhost ding]# bash  1.sh a b c d d e   #后面加的数必须能被3整除,不然报错

6

a b c d d e

d d e

[root@localhost ding]# 

在例如我们这样测试一下:

#!/bin/bash


echo $#

while [[ $# > 0 ]]

do

        echo $@

        shift 3   #决定循环多少次

        echo $1

done

输出:

[root@localhost ding]# bash  1.sh a b c d d e

6       #  $#的值

a b c d d e  # $@的值(第一次循环)

d        #  shift 3 以后的$1

d d e        # $@的值 (第二次循环)

本文转自 大雪儿 51CTO博客,原文链接:http://blog.51cto.com/dingxue/1968815,如需转载请自行联系原作者

相关文章
|
28天前
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
55 20
|
1月前
|
安全 Shell 数据处理
使用Python执行Shell命令并获取结果
在实际应用中,可以根据需要选择适当的参数和方法来执行Shell命令,并处理可能出现的各种情况。无论是系统管理、自动化任务还是数据处理,掌握这些技巧都将极大地提高工作效率。
64 12
|
3月前
|
人工智能 Shell iOS开发
AI Shell:在命令行里“对话” AI ,微软推出将 AI 助手引入命令行的 CLI 工具,打造对话式交互命令行
AI Shell 是一款强大的 CLI 工具,将人工智能直接集成到命令行中,帮助用户提高生产力。AI Shell 支持多种 AI 模型和助手,通过多代理框架提供丰富的功能和灵活的使用模式。
355 7
|
3月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
86 1
|
4月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
107 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
4月前
|
Shell 知识图谱
Shell printf 命令
10月更文挑战第3天
38 1
|
4月前
|
Unix Shell Linux
常见的shell命令
shell常用命令
96 11
|
5月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
5月前
|
Java Shell Windows
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现
218 5
|
4月前
|
Shell PHP
Shell echo命令
10月更文挑战第3天
34 0