shell 函数定义和调用

为什么80%的码农都做不了架构师?>>>   hot3.png

一. 函数定义

语法:

[function] functionname[()]{action;[return int;]
}

说明:

1、可以带function fun()  定义,也可以直接fun() 定义,不带任何参数。

2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255

#!/bin/shbuild(){echo $1, $2;return $(($1+$2))
}
build 5 7;total=$(build 3 2);echo $totle, $?

从上面这个例子我们可以得到几点结论:

1、必须在调用函数地方之前,声明函数,shell脚本是逐行运行。不会像其它语言一样先预编译。一次必须在使用函数前先声明函数。

2、total=$(fSum 3 2);  通过这种调用方法,我们清楚知道,在shell 中 单括号里面,可以是:命令语句。 因此,我们可以将shell中函数,看作是定义一个新的命令,它是命令,因此 各个输入参数直接用 空格分隔。 一次,命令里面获得参数方法可以通过:$0…$n得到。 $0代表函数本身。

3、函数返回值,只能通过$? 系统变量获得,直接通过=,获得是空值。其实,我们按照上面一条理解,知道函数是一个命令,在shell获得命令返回值,都需要通过$?获得。

二. 函数作用域

#!/bin/shecho $(uname);
declare num=1000;uname()
{echo "test!";((num++));return 100;
}
testvar()
{local num=10;((num++));echo $num;}uname;
echo $?
echo $num;
testvar;
echo $num;sh testfun2.sh
Linux
test!
100
1001
11
1001

我们一起来分析下上面这个实例,可以得到如下结论:

1、定义函数可以与系统命令相同,说明shell搜索命令时候,首先会在当前的shell文件定义好的地方查找,找到直接执行。

2、需要获得函数值:通过$?获得

3、如果需要传出其它类型函数值,可以在函数调用之前,定义变量(这个就是全局变量)。在函数内部就可以直接修改,然后在执行函数就可以读出修改过的值。

4、如果需要定义自己变量,可以在函数中定义:local 变量=值 ,这时变量就是内部变量,它的修改,不会影响函数外部相同变量的值 。




转载于:https://my.oschina.net/uabao/blog/498901

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nhibernate代码生成器v2.1中文版

Nhibernate代码生成器v2.1中文版(转发)下载转载于:https://www.cnblogs.com/hakuci/archive/2008/03/15/1106802.html

Head First设计模式读书笔记——策略模式

问题描述: 目前的任务是实现一个FPS类游戏的各种角色(友军、敌军、平民和狗、猫、鸭子等动物)以及他们的各种行为(攻击、游泳等)。 设计方案一 很简单,只要实现一个角色超类,将角色的各种行为放…

centos+bond+bridge+docker(ssh容器)固定ip实现测试环境(一)

硬件:R730交换机:H3C Switch S5120-28P-SI系统:centos7#nmtuihttp://568273240.blog.51cto.com/802.3ad为LACP模式交换机部分:# systemctl restart network可以多重启几遍试下。http://568273240.blog.51cto.com/注意:…

jQuery 获取屏幕高度、宽度

做手机Web开发做浏览器兼容用到了,所以在网上找了些汇总下。alert($(window).height()); //浏览器当前窗口可视区域高度 alert($(document).height()); //浏览器当前窗口文档的高度 alert($(document.body).height());//浏览器当前窗口文档body的高度 alert($(do…

python 发起HTTP请求

因为微信公众号群发需要调用高级群发接口,其中涉及到python发起HTTP请求,现在将相关实现操作记录如下: 首先,HTTP请求分为GET和POST,如下所示: 首先是发起get 请求: # -*- coding: utf-8 -*- im…

如何在webservice中取得sesssionid

[WebMethod(EnableSessiontrue)] 一定要标注EnableSessiontrue public string GetID() { return Session.SessionID; } 转载于:https://www.cnblogs.com/suneryong/archive/2008/03/26/1122578.html

pthread_join

函数简介 函数pthread_join用来等待一个线程的结束。函数原型为: extern int pthread_join (pthread_t__th, void **__thread_return); 第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。…

简单线性回归算法

为什么80%的码农都做不了架构师?>>> /*** 简单线性回归算法* param array y轴数据* param array x轴数据* returns array(slope,intercept,r2)*/ function linearRegression(y, x) {var lr {};var n y.length;var sum_x 0;var sum_y 0;var sum_xy …

模拟BS服务器

一、模拟BS服务器分析 二、BS模拟服务器代码实现 图片都是单独请求,后台单独线程,这边是通过构造方法传入的Runable接口的实现类匿名对象创建线程; 创建本地输入流读取到网络输出流传过来的信息再放到网络输出流中返回; 转载于:ht…

c#修饰符!

在C#中,有如下几种修饰符,分别是public,protected,internal,private。先来看一下C# 4th Edition中的说明: public No restrictions. Members marked public are visible to any method of any class. private The members in class A that ar…

wifi定位技术

wifi定位是iphone升级到1.1.3之后新加的应用服务,拿到机器后开始试用一下wifi定位。在美国达拉斯,定位按钮被按下后,旋转了大约2秒钟,所在的街道就立刻闪现在屏幕中央了。难怪乔布斯也说:“Its really cool”&#xff…

linux定时任务启动

/sbin/service crond stop /sbin/service crond start /sbin/service crond restart

不要62

题目 试题描述杭州人称那些傻乎乎粘嗒嗒的人为 62(音:laoer)。杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除…

myssh

http://blog.csdn.net/infon/archive/2007/04/17/1568309.aspx http://blog.csdn.net/infon 转载于:https://www.cnblogs.com/tries/archive/2008/04/11/1148121.html

队列,排队买饭

1 /*这题的错误是和同学熬夜找出来的呃 。。。*/ 2 3 #include<stdio.h> 4 #include<string.h> 5 int main() 6 { 7 int front,rear,i,f,j,n,t,q[10000]; 8 char s[20]; 9 scanf("%d",&n); 10 rear 0,front0; 1…

CentOS 7 下的 Firewall

CentOS 7 默认实用的用Firewalld作为防火墙&#xff0c;摒弃了原先的iptables。但是内核还是使用iptable作为管理参考文档https://access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.htmlhttp://www.myhome.net.tw/2…

POJ 1091(数论)

题目大意是给定两个整数n和m&#xff0c;求出长度为n1满足条件的数列data的个数&#xff0c;数列的要求下&#xff1a;1&#xff09;1<data[i]<m,for1<i<n2)data[n1]m;3&#xff09;这个n1个数满足&#xff1a;存在x1,x2,...,xn,xn1,满足x1*data[1]x2*data[2]...x(…

你真的了解.NET中的String吗?

你真的了解.NET中的String吗? Terrylee&#xff0c;2005年12月25日 概述 String在任何语言中&#xff0c;都有它的特殊性&#xff0c;在.NET中也是如此。它属于基本数据类型&#xff0c;也是基本数据类型中唯一的引用类型。字符串可以声明为常量&#xff0c;但是它却放在了堆中…

没有动任何配置文件,今天就出现了修改的JSP内容在页面不体现。依然是老的页面内容...

2019独角兽企业重金招聘Python工程师标准>>> 现象&#xff1a; 没有动任何配置文件&#xff0c;今天就出现了修改的JSP内容在页面不体现。依然是老的页面内容 问题分析: 既然可以用过&#xff0c;所以系统应该是检测文件更新的&#xff0c;之所以不重新编译JSP&…

DIV中class和id的区别

1.class是设置标签的类&#xff0c;id是设置标签的标识;2. 使用方法不同&#xff1a; class属性用于指定元素属于何种样式的类,如样式表可以加入.content1 { color: red; background: #ff80c0 } 使用方法&#xff1a;class"content1" id属性用于定义一个元素的独…