shell的函数和Javacript和php的函数声明一样,只不过shell在调用函数的时候,只需要写函数名就可以调用函数,注意不要在函数名后面加括号

  

创建并使用函数

#!/bin/bash
#文件名:test.sh function test(){
echo "aaaaaaa"
}
#直接使用函数名就可以调用函数
test
test

  运行:

ubuntu@ubuntu:~$ ./test.sh
aaaaaaa
aaaaaaa
ubuntu@ubuntu:~$

  

函数传参、局部变量

  给函数传递参数的方法 和给运行脚本传参数的方法相同:写在调用的函数名后面,空格分隔。

  使用$1表示第一个参数,$#获取所有参数的个数,$*获取所有参数

  shell中,默认在脚本任何地方定义的变量都是全局变量,但是可以再函数中使用local限定为局部变量,只在本函数中有效。

#!/bin/bash
#文件名:test.sh #求0到num的和
function sum(){
local num=$1
local tot=0
local i=0
while [ $i -le $num ];do
tot=$[ $tot + $i ]
i=$[ $i + 1 ]
done echo $tot
} res=$(sum 100)
echo "0+1+2+...+100="$res

  运行:

ubuntu@ubuntu:~$ ./test.sh
0+1+2+...+100=5050
ubuntu@ubuntu:~$

  

给函数传递数组(在函数中复制数组)

  使用的是$*访问传递的所有数组元素,所以在传递给函数数组时,不要只写数组名,应该写为${arr[*]}才是将数组所有元素传递。

  在函数内部使用()将$*括起来,此时就类似于将数组元素展开到()中,然后赋值给一个变量。

#!/bin/bash

arr=("one" "two" "three")
function show(){
#create a new array
local arr=($*)
arr[0]="opq";arr[1]="rst";arr[2]="xyz"
echo ${arr[*]} ${#arr[*]}
} echo ${arr[*]} ${#arr[*]}
show ${arr[*]}
echo ${arr[*]} ${#arr[*]}

  运行结果:

ubuntu@ubuntu:~$ ./test.sh
one two three 3
opq rst xyz 3
one two three 3

  

函数返回数组

#!/bin/bash

function return_arr(){
local arr=("one" "two" "three")
echo ${arr[*]}
} #注意格式,是在返回值的外边加一层括号
res=($(return_arr))
echo ${#res} ${res[*]}

  

shell脚本--函数的更多相关文章

  1. shell脚本函数与数组

    前言 之前写过一篇关于shell脚本流程控制总结,这次继续写关于shell脚本的问题.本篇文章主要包含shell脚本中的函数以及数组的用法介绍.同时也涵盖了一些字符串处理以及shell脚本比较使用的小 ...

  2. shell脚本函数及数组

    函数介绍: 函数function是由若干条shell命令组成的语句块,实现代码重用和模块话编程. 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部 ...

  3. 运维shell脚本函数语法

    在fun.sh 文件里,使用函数来封装脚本内容 usege() { echo "hello world" echo "脚本怎么使用函数......"}usege ...

  4. 利用shell脚本函数实现网络连通性的检测

    通常情况下,linux系统网络连通性的检测有两种方法: 1.通过“ping指令 + 目标IP” 或者 “ping指令 + 目标IP域名” 注意针对IPv6地址的IP网络检测需要试用ping6,同时pi ...

  5. Linux命令参数处理 shell脚本函数getopts

    getopts 命令 用途 处理命令行参数,并校验有效选项. 语法 getopts 选项字符串 名称 [ 参数 ...] 描述 getopts 的设计目标是在循环中运行,每次执行循环,getopts ...

  6. 关于shell脚本函数、数组、字符串截取、svn更新发布实例

    #/bin/bash #功能:QA服根据模板创建区配置文件并提交到svn上. SOURCE_PATH=/data/source_code SVN_PATH=/code/psm   #svn发布目录,要 ...

  7. shell脚本函数

    不调用就不执行 调用就执行 调用时候的$1是指执行时候的参数1 调用之后的$是位置参数

  8. shell 脚本之获取命令输出字符串以及函数参数传递

    在ubuntu 14.04之后,所有的U盘挂载也分用户之分,最近很多操作也和U盘有关,所以就研究了一上午shell脚本函数以及字符串操作的方法. 字符串操作: 获取他的命令输出比较简单,打个简单的比方 ...

  9. 《Linux命令行与shell脚本编程大全》第十七章 创建函数

    可以将shell脚本代码放进函数中封装起来,这样就能在脚本中的任何地方多次使用它了. 17.1 基本的脚本函数 函数:是一个脚本代码块,可以为其命名并在代码中任何位置重用. 17.1.1 创建函数 有 ...

随机推荐

  1. php api 接口

    <?php //简单形式 header('Content-Type:text/html;charset=utf-8'); //避免输出乱码 $output = array(); $a = @$_ ...

  2. 左侧多级菜单,高亮显示js

    左侧多级菜单,如果本页面是当前栏目,则左侧菜单高亮显示 <ul class="nav navbar-stacked" id="navs"> {ded ...

  3. 关于使用spring mvc前后端上传数据日期格式

    前端页面传入数据到后台,String,int等等类型都很友好,但是Date类型不能直接上传到服务器.否则会报异常![在这里插入图片描述](https://img-blog.csdnimg.cn/201 ...

  4. jvm虚拟机分享课笔记

    深入理解jvm虚拟机分享 1. jvm执行流程 java-编译-.class—类加载器(随时随地加载)--[进入java虚拟机] 执行引擎—本地方法接口---本地方法库 运行时数据区 2. 运行时数据 ...

  5. Spring4.2+SpringMVC+Mybatis3.4的集成(转-)

    文章转自 http://blog.csdn.net/jimolangge123/article/details/49210363 首先说明一下Web.xml中配置项的执行过程: <context ...

  6. shell编程之转义和引用

    shell中有两类字符,一类是普通字符,在Shell中除了本身的字面意思外没有其他特殊意义,即普通纯文本:另一类即元字符,是Shell的保留字符,在Shell中有着特殊的含义. 一.转义 转义是指使用 ...

  7. 学习CSS布局 - position

    position 为了制作更多复杂的布局,我们需要讨论下 position 属性. 它有一大堆的值,名字还都特抽象,别提有多难记了. 让我们先一个个的过一遍,不过你最好还是把这页放到书签里. 先看下运 ...

  8. maven 插

    一.maven插件元素 <?xml version="1.0" encoding="utf-8"?> <plugin> <!--插 ...

  9. 关于x210开发板和主机、虚拟机ping通问题

    关于x210开发板和主机.虚拟机ping通问题: 步骤: 1.关闭 Ubuntu.关闭VMware软件: 2.打开 网络连接,设置 以太网 IP地址,并确认使用的网卡 3.以管理员身份打开VMware ...

  10. MongoDB的数据类型介绍

    参考MongoDB官网:https://docs.mongodb.com/manual/reference/bson-types/ MongoDB文档存储是使用BSON类型,BSON(BSON sho ...