shell脚本--函数
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脚本--函数的更多相关文章
- shell脚本函数与数组
前言 之前写过一篇关于shell脚本流程控制总结,这次继续写关于shell脚本的问题.本篇文章主要包含shell脚本中的函数以及数组的用法介绍.同时也涵盖了一些字符串处理以及shell脚本比较使用的小 ...
- shell脚本函数及数组
函数介绍: 函数function是由若干条shell命令组成的语句块,实现代码重用和模块话编程. 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部 ...
- 运维shell脚本函数语法
在fun.sh 文件里,使用函数来封装脚本内容 usege() { echo "hello world" echo "脚本怎么使用函数......"}usege ...
- 利用shell脚本函数实现网络连通性的检测
通常情况下,linux系统网络连通性的检测有两种方法: 1.通过“ping指令 + 目标IP” 或者 “ping指令 + 目标IP域名” 注意针对IPv6地址的IP网络检测需要试用ping6,同时pi ...
- Linux命令参数处理 shell脚本函数getopts
getopts 命令 用途 处理命令行参数,并校验有效选项. 语法 getopts 选项字符串 名称 [ 参数 ...] 描述 getopts 的设计目标是在循环中运行,每次执行循环,getopts ...
- 关于shell脚本函数、数组、字符串截取、svn更新发布实例
#/bin/bash #功能:QA服根据模板创建区配置文件并提交到svn上. SOURCE_PATH=/data/source_code SVN_PATH=/code/psm #svn发布目录,要 ...
- shell脚本函数
不调用就不执行 调用就执行 调用时候的$1是指执行时候的参数1 调用之后的$是位置参数
- shell 脚本之获取命令输出字符串以及函数参数传递
在ubuntu 14.04之后,所有的U盘挂载也分用户之分,最近很多操作也和U盘有关,所以就研究了一上午shell脚本函数以及字符串操作的方法. 字符串操作: 获取他的命令输出比较简单,打个简单的比方 ...
- 《Linux命令行与shell脚本编程大全》第十七章 创建函数
可以将shell脚本代码放进函数中封装起来,这样就能在脚本中的任何地方多次使用它了. 17.1 基本的脚本函数 函数:是一个脚本代码块,可以为其命名并在代码中任何位置重用. 17.1.1 创建函数 有 ...
随机推荐
- 布局:高度已知,布局一个三栏布局,左栏和右栏宽度为200px,中间自适应
需求:高度已知为200px,写出三栏布局,左栏和右栏各位200px,中间自适应,如下图所示: 方法一:float浮动布局 原理是:定义三个区块,需要注意的是中间的区块放在右边区块的下面,统一设置高度为 ...
- Django基础之urls
一 Django简介 二 视图层之应用系统 一 Django简介 Django: urls:路径与视图函数的映射关系 views:逻辑处理 models:与数据库相关的操作 t ...
- laravel 使用构造器进行增删改查
使用原生语句进行增删改查 //$list = DB::select('select * from wt_category where id = :id', ['id' => 34]); //$i ...
- Click to add to Favorites Troubleshooting: High Version Count Issues (Doc ID 296377.1)
Copyright (c) 2018, Oracle. All rights reserved. Oracle Confidential. Click to add to Favorites Trou ...
- mysql-修改字段类型和修改字段名称
文章转自:https://blog.csdn.net/u010002184/article/details/79354136 mysql修改字段类型: --能修改字段类型.类型长度.默认值.注释 -- ...
- 搭建C++环境
因为测试用例是C++,我必须安装对应的C++环境,否则跑不起C++代码.突然觉得VsCode如此操蛋,觉得为什么就不能像Eclipse中的Maven那样,安装插件就集成了Maven所必需的,省了安装这 ...
- pstart
下面是我初步的排查过程: [1] [root@71 ~]# tcpdump host 192.168.0.71|grep "IP 115.*"|more tcpdump: verb ...
- Android 工程引入自定义Library后,工程无法识别Library中的类
这个问题有点神啊. 在工程中导入第三方类库包(自定义Library)本来运行的好好的,突然间所有引用的Library中的类都无法在工程中引用了,一个劲的打红叉,eclipse也重启了,项目也clean ...
- VS2013开发上位机并调用MSCcommm控件的方式
此文章适合VC++串口通信入门 一.页面布局及添加控件 1, 安装好vs2010如图 2, 新建一个基于VC++的MFC项目comm 注意:点击ok,然后next,这时候要将application t ...
- C++模板的特化
C++类模板的三种特化,讲得比较全面 By SmartPtr(http://www.cppblog.com/SmartPtr/) 针对一个模板参数的类模板特化的几种类型, 一是特化为绝对类型(全特化) ...