1-25-循环控制符break、continue和函数详解
大纲:
1-for循环补充
1-1-for循环实战---类C格式应用
2-break、continue循环控制符
2-1实战:帮助理解break、continue作用
3-函数详解
3-1、脚本文件中定义函数并引用,如上图
3-2、返回值的应用
3-3、向函数传递参数(使用位置参数)
3-4、全局变量和局部变量
3-5、向函数传递数组
3-6、调用其他模块的函数
4-shift命令,参数左移
4-1-实战:shift应用
#######################################
1- for循环补充
for循环除了前面讲过的 for [变量名] in [变量值列表] 的使用方式外,
还有一种类似与C语言的循环使用方式,如下:
Usage:
for((i=1;i<=10;i++))
do
#命令序列
done
===================================
1-1 for循环实战---类C格式应用
计算1~100的和
脚本源码:
#!/bin/bash
# the total of 1~100
total=0
for (( i=1 ; i<=100 ; i++ ))
do
total=$(expr $total + $i )
done
echo "1+2+3+...+100=$total"
执行结果:

#######################################
2- break、continue循环控制符
结束当前循环,继续下一个循环:continue
结束整个循环,执行这个循环后面的语句:break
===================================
2-1 实战:帮助理解break、continue作用
脚本源码:
#!/bin/bash
# break continue
while [ true ]
do
read -p "Enter :" input
case $input in
1)
echo "Hello world!"
continue
echo "Hello world!"
;;
2)
echo "Ni Hao!"
;;
3)
echo "I'm XiaoGan!"
;;
4)
echo "Exit!"
break
echo "Exit!"
;;
*)
echo "Input { 1 | 2 | 3 | 4 }"
;;
esac
done
echo "The While Circle is Over!"
执行效果:

#######################################
3- 函数详解
函数的定义:
function [函数名] ()
{
#命令序列
}
#在函数和shell脚本中定义的变量都是相对于这个脚本来说的全局变量
#所以在函数内部,可以直接使用函数外部定义的变量
#在函数外部,可以直接读取函数内部定义的变量
如下图:

函数的几种用法:
===================================
3-1、脚本文件中定义函数并引用,如上图
===================================
3-2、返回值的应用
函数可以返回数值,其默认为上一条指令的执行结果
当然,我们也可以使用return语句,设置函数的返回值
但是,由于shell状态码最大是255,
当需要返回大于255的值时,需要将返回值复制与变量
脚本源码:
#!/bin/bash
function fun1()
{
a=144
echo "in fun1() a=$a"
}
function fun2()
{
b=144
echo "in fun2() b=$b"
return $b
}
function fun3()
{
c=300
echo "in fun3() c=$c"
return $c
}
#test value of fun1
echo "test the return value of fun1 with return"
fun1
echo "The return value is $?"
echo ""
#test the return value of fun2 <255
echo "test the return value of fun2 <255"
fun2
echo "The return value is $?"
echo ""
#test the return value of fun3 >255 value=fun3
echo "test the return value of fun3 >255 value=fun3"
# The return value output to value
value=`fun3`
echo "Value=\'fun3\' is value=$value"
echo ""
#test the return value of fun3 >255
echo "test the return value of fun3 >255"
fun3
echo "The return value is $?"
执行结果

===================================
3-4、向函数传递参数(使用位置参数)
函数除了可以直接使用脚本的外部变量,
还可以使用调用函数是,传递的位置参数
在函数中,$@ --->代表,调用函数时,传递过来的所有位置参数组成的数组
$#在函数中,代表调用函数式,传递的参数个数
脚本源码:
#!/bin/bash
# location arguments of function
function fun1(){
echo "in fun1()"
echo "all location arguments is \$@:$@" #in function $@ stand of all location arguments"
if [ $# -ne 0 ]
then
echo " Location arguments number is $#."
while [ $# -gt 0 ]
do
echo $1
shift
done
else
echo "No Location arguments."
return 1
fi
echo "will out fun1()"
}
ml="fun1"
echo "in scripts out fun1() \$@:$@"
echo "Test Location arguments of Function"
while [ $# -gt 0 ]
do
ml=$ml" $1"
shift
done
#fun1 $1 $2 $3 11 12 13
echo "ml is \"$ml\""
$ml

===================================
3-5、全局变量和局部变量
#在函数和shell脚本中定义的变量都是相对于这个脚本来说的全局变量
#所以在函数内部,可以直接使用函数外部定义的变量
#在函数外部,可以直接读取函数内部定义的变量
#若想要定义局部变量可使用如下方式:
local [变量名]
脚本源码:
#!/bin/bash
function fun1()
{
num1=123
local num3=110
echo "In fun1(),num2=$num2"
echo "In fun1(),num3=$num3"
}
num2=321
echo "num1 and local num3 in fun1(),num2 out fun2()"
fun1
echo "Out fun1(),num1=$num1"
echo "Out fun1(),num3=$num3"

变量的作用域:
当函数内部和外部同时定义了相同的变量时,会相互影响
脚本源码:
#!/bin/bash
function fun1(){
num=123
echo "in fun1() num=$num"
}
num=110
echo "out fun1() num=$num"
fun1
echo "out fun1() num=$num"

所以,在函数中,尽量使用local局部变量
===================================
3-6、向函数传递数组
程序源码:
#!/bin/bash
function array(){
echo parameters:"$@"
local factorial=1
for value in "$@"
do
factorial=$[ $factorial * $value ]
done
echo "factorial=$factorial"
}
a=(12 13 14 15 16)
echo "a is ${a[*]}"
echo "array \$(a{*}) start:"
echo ""
array ${a[*]}

注:定义数组:
array=(11 23 12 13 14)
输出数组:
echo ${array[*]}
===================================
3-8、调用其他模块的函数
将事先写好的函数模块调用在当前脚本中:
source [模块路径]
脚本源码:
#option.sh
#!/bin/bash
# function define
function copy(){
echo "in copy()"
}
function add(){
echo "in add()"
}
function delete(){
echo "in del()"
}
function change(){
echo "in change()"
}
function search(){
echo "in search()"
}
function quit(){
echo "in exit()"
}
#call.sh
#!/bin/bash
source option.sh
cat <<EOF
*******************************
* Menu *
*******************************
* 1.copy *
* 2.add *
* 3.del *
* 4.change *
* 5.search *
* 6.exit *
*******************************
EOF
while [ true ]
do
read -p "Enter your choose:" ent
case $ent in
1)
echo "copy"
copy
;;
2)
echo "add"
add
;;
3)
echo "delete"
delete
;;
4)
echo "change"
change
;;
5)
echo "search"
search
;;
6)
echo "exit"
quit
;;
*)
echo "Please ent:{ 1 | 2 | 3 | 4 | 5 | 6 }"
;;
esac
done

#######################################
4-shift命令,参数左移
在函数或者脚本中,有时候,为了方便的遍历位置参数,shift命令进行操作:
shift命令每执行一次,位置参数向左移移位:

===================================
4-1-实战:shift应用
shift #参数左移
脚本源码如下:
#!/bin/bash
# shift
total=0
while [ $# -gt 0 ]
do
total=$( expr $total + $1 )
shift
done
echo "total=$total"
拓展:seq 和awk命令的使用,计算1-100的和
seq 100 | awk ' { total=total+$1 } END {print total }'

1-25-循环控制符break、continue和函数详解的更多相关文章
- java中的 break continue return作用详解
break: 此语句导致程序终止包含它的循环,并进行程序的下一阶段(整个循环后面的语句),即,不是跳到下一个循环周期而是退出循环.如果break语句包含在嵌套循环里,它只跳出最里面的循环. 如下代码: ...
- JAVA之旅(二)——if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结
JAVA之旅(二)--if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结 JAVA的思想真的很重要,所以要专心的学-- ...
- linux select函数详解
linux select函数详解 在Linux中,我们可以使用select函数实现I/O端口的复用,传递给 select函数的参数会告诉内核: •我们所关心的文件描述符 •对每个描述符,我们所关心的状 ...
- 【转载】C语言itoa()函数和atoi()函数详解(整数转字符C实现)
本文转自: C语言itoa()函数和atoi()函数详解(整数转字符C实现) 介绍 C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. int/float to ...
- python3 内置函数详解
内置函数详解 abs(x) 返回数字的绝对值,参数可以是整数或浮点数,如果参数是复数,则返回其大小. # 如果参数是复数,则返回其大小. >>> abs(-25) 25 >&g ...
- STL之map与pair与unordered_map常用函数详解
STL之map与pair与unordered_map常用函数详解 一.map的概述 map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称 ...
- CreateFile函数详解
CreateFile函数详解 CreateFile The CreateFile function creates or opens the following objects and returns ...
- fork()函数详解
linux中fork()函数详解(原创!!实例讲解) (转载) 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程 ...
- [转]javascript console 函数详解 js开发调试的利器
javascript console 函数详解 js开发调试的利器 分步阅读 Console 是用于显示 JS和 DOM 对象信息的单独窗口.并且向 JS 中注入1个 console 对象,使用该 ...
随机推荐
- appium ios 自动化测试
iOS自动化测试:Appium 从入门到实践https://www.jianshu.com/p/43f858180557appium自动化测试iOS Demohttps://www.jianshu.c ...
- Xcode插件开发案例教程
引言 在平时开发过程中我们使用了很多的Xcode插件,虽然官方对于插件制作没有提供任何支持,但是加载三方的插件,默认还是被允许的.第三方的插件,存放在 ~/Library/Application Su ...
- Linux系统——日志文件
日志文件的分类 (1)内核及系统日志 由系统服务rsyslog管理,根据去主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置. /etc/rsyslog ...
- Spring自动装配Bean的五种方式
在Spring中,支持 5 自动装配模式. no – 缺省情况下,自动配置是通过“ref”属性手动设定,在项目中最常用byName – 根据属性名称自动装配.如果一个bean的名称和其他bean属性的 ...
- 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016) B - Bribing Eve
地址:http://codeforces.com/gym/101174/attachments 题目:pdf,略 思路: 把每个人的(x1,x2)抽象成点(xi,yi). 当1号比i号排名高时有==& ...
- kafka的javaapi生产者生产消息,消费者获取不到
zookeeper和kafka的日志没有出现什么报错 linux下kafka的命令行能生产并收到消费消息 但是在idea(windows环境下)中,调用api,获取不到数据,也生产不了数据,现象就是没 ...
- 20145321 《Java程序设计》第6周学习总结
20145321 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 输入输出 10.1 InputStream OutputStream 1.数据有来源与目的,衔接两者的是串流 ...
- 20145230熊佳炜《网络对抗》实验八:WEB基础
20145230熊佳炜<网络对抗>实验八:WEB基础 实验目标 Web前端HTML:能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTM ...
- php 与 c++ openssl 加密通信
$key = '1234567890123456'; $iv = '1234567890123456'; $enc = openssl_encrypt("hello wolrd!" ...
- 临时变量不能作为非const引用
转自:http://blog.csdn.net/u011068702/article/details/64443949 1.看代码 2.编译结果 3.分析和解决 就拿f(a + b)来说,a+b的值会 ...
