我是靠谱客的博主 体贴板凳,这篇文章主要介绍Shell编程之循环语句与函数的使用一、循环结构untli循环语句二、Shell函数,现在分享给大家,希望可以做个参考。

目录

一、循环结构

1、for循环

格式

循环的使用方法 

双重循环 循环嵌套

break

2、while循环

格式

        untli循环语句

案例

二、Shell函数

Shell函数的定义

 函数返回值

Shell的函数传参

函数变量的作用范围

 函数的递归

阶乘

 具体操作流程:

 定义函数创建库


一、循环结构

1、for循环

格式

复制代码
1
2
3
4
for 变量名 in 取值列表 do 命令序列 done

循环的使用方法 

 

 也可以通过seq来循环列出数据

将for循环写入脚本;

计算1-10的和

 如上的for循环脚本只显示了运行的结果,若是想要显示出循环的过程可以加入一句set -x的命令

 

 

双重循环 循环嵌套

即在一个for循环内部再加上一个for循环

复制代码
1
2
3
4
5
6
7
8
9
10
for ((变量=X; 指定变量范围; 指定变量迭代的方式))#定义外循环 do for ((变量=X; 指定变量范围; 指定变量迭代的方式))#定义内循环 do 命令序列 指定变量迭代的方式 done 命令序列 done

例:

复制代码
1
2
3
4
5
6
7
8
9
#!/bin/bash for ((a=1; a<=5; a++)) do echo "外部循环 $a" for ((b=1; b<=5; b++)) do echo " 内部命令 $b" done done

exit 用于退出脚本进程

break [n] 用于跳出单(n代表多少层)层循环

continue 用于中止某次循环中的操作,但是不会完全终止整个循环命令

break

使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。

  • 跳出当前循环
  • 并且break下面的语句不去执行

2、while循环

while就是重复测试某个条件,只药条件成立则反复执行

格式

复制代码
1
2
3
4
while 条件测试操作 do 命令序列 done

 猜商品价格游戏,通过变量RANDOM获得随机数,提示用户猜测并记录次数,猜中后退出循环

 

untli循环语句

  • 重复测试某个条件,只要条件不成立则反复执行
复制代码
1
2
3
4
5
untli 条件测试 do 命令序列 条件里的变量能够迭代 done

案例

计算1~50之间的和值

二、Shell函数

  • 将命令序列按格式写在一起
  • 可方便重复使用命令序列

Shell函数的定义

复制代码
1
2
3
4
5
方法一 function 函数名 { 命令序列 return x #也可使用exit来显示函数的结束运行 }

  方法二

复制代码
1
2
3
4
方法二 函数名 (){ 命令序列 }

 函数返回值

return表示退出函数并返回一个退出值,脚本中可以用echo $?变量显示该值,return 1 退出函数并返回,返回值为1

使用原则:

  • 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
  • 退出状态码必须是0~255, 超出时值将为除以256取余
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash function test { read -p "请输入一个数值:" num return $[$num * 2] } ######## main ######## test echo $? [root@localhost data]# bash demo1.sh 请输入一个数值:100 200 #最大不能超过255的范围,如果需要则必须调用echo,所以: test () { read -p "请输入一个数值:" num echo $[$num * 2] } ######## main ######## result=$(test) echo $result [root@localhost data]# bash demo1.sh 请输入一个数值:300 600

1.形式

形参:定义一个函数void add(int a, int b),这里的a和b就是形参。

实参:当你进行函数调用的时候,add(1, 2),这里的1和2就是实参

2.使用

形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。

实参出现在主调函数中,进入被调函数后,实参变量也不能使用。

Shell的函数传参

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
sum1 () { sum=$[$1 + $2] echo $sum } ######## main ######## read -p "输入第一个参数: " first read -p "输入第二个参数: " second result=$(sum1 $first $second) echo $result [root@localhost data]# bash demo2.sh 输入第一个参数: 10 输入第二个参数: 20 30 //如果用此方法写函数体外的$1$2与函数体内的$1$2是有区别的 #!/bin/bash sum1 () { sum=$[$1 + $2] #而此时的$1与$2对应的是函数体内的$1与$4 echo $sum } ######## main ######## result=$(sum1 $1 $4 $2] //此时$1会把10当作函数体内的第一个变量,接着对应着函数体外的$2为函数体内的$4,对应下面数字的10与40 echo $result [root@localhost data]# bash demo2.sh 10 20 30 40 50

函数变量的作用范围

  • 函数在Shell脚本中仅在当前Shell环境中有效(source会影响当前shell的环境)
  • Shell脚本中变量默认全局有效
  • 将变量限定在函数内部使用local命令(设置为局部变量)

 在函数体内设置局部变量

local 变量名=…

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash myfun() { echo $i local i=9 #local命令设置为局部变量仅仅是在函数体内的有效,出了函数就无效了 echo $i } i=8 myfun echo $i [root@yzy data]# bash demo3.sh 8 9 8

 函数的递归

  • 函数体内调用自己本身的函数

阶乘

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash fact() { if [ $1 -eq 1 ] then echo 1 else local temp=$[$1 - 1] local result=$(fact $temp) echo $[$1 * $result] fi } ######## main ######## read -p "请输入一个要阶乘的数值:" n result=$(fact $n) echo "$n的阶乘结果为:$result" [root@yzy data]# bash demo4.sh 请输入一个要阶乘的数值:5 5的阶乘结果为:120

 具体操作流程:

n=5fact 5
fact()$1=5temp=5-1=4result=$(fact 4)echo 5 * $(fact 4)
$1=4temp=4-1=3result=$(fact 3)echo 5 * 4 * $(fact 3)
$1=3temp=3-1=2result=$(fact 2)echo 5 * 4 * 3 * $(fact 2)
$1=2temp=2-1=1result=$(fact 1)echo 5 * 4 *3 * 2 * $(fact 1)
$1=1$(fact 1)=1echo 5 *4 *3 *2 *1

 定义函数创建库

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
vim myfuncs.sh #加法 jiafa() { echo $[$1 + $2] } #减法 jianfa() { echo $[$1 - $2] } #乘法 chengfa() { echo $[$1 * $2] } #除法 chufa() { if [ $2 -ne 0 ];then echo $[$1 / $2] else echo "0 不能作为除数" fi } #阶乘 fact() { if [ $1 -eq 1 ];then echo 1 elif [ $1 -eq 0 ];then echo 0 else local temp=$(jianfa $1 1) local result=$(fact $temp) #echo $[$1 * $result]或: echo $[chengfa $1 $result] fi } //使用如下: vim test.sh . myfuncs.sh或source myfuncs.sh v1=$1 v2=$2 result1=$(jiafa $v1 $v2) result2=$(jianfa $v1 $v2) result3=$(chengfa $v1 $v2) result4=$(chufa $v1 $v2) result5=$(fact $v1 $v2) echo "加法结果为: $result1" echo "减法结果为: $result2" echo "乘法结果为: $result3" echo "除法结果为: $result4" echo "阶乘结果为: $result5"

最后

以上就是体贴板凳最近收集整理的关于Shell编程之循环语句与函数的使用一、循环结构untli循环语句二、Shell函数的全部内容,更多相关Shell编程之循环语句与函数内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部