shell函数使用
函数定义格式:
和js有点类似,不过在 shell 中 function 关键字是可选的。
如:
sum
{
// shell 语句
}
function sum()
{
// shell 语句
}
函数调用方法:
sum 参数1 参数2 ...
获取函数参数:
这个和我们以往的经验可能不太一样,shell 中获取函数参数的方式有点特别。
一般语言中,都是在函数名后面的括号中给定一个变量名去接收函数参数。
而在 shell 中,获取函数参数的方式是在函数体中使用美元符号加上数字获取,如 $1 获取第一个参数,$2 获取第二个参数,依次类推,但是大于或等于 10 的时候,$ 后面的数字要加上大括号,如 ${10}。
如:
sum()
{
echo $(($1 + $2))
}
与 $ 有关的其他参数:
| 参数处理 | 说明 |
| $# | 传递给函数的参数总个数 |
| $* | 以一个字符串显示所有的参数 |
| $$ | 脚本运行的当前进程的ID号 |
| $! | 后台运行的最后的进程的ID号 |
| $@ | 与$*相同,但是在使用时加引号,并在引号中返回每个参数 |
| $- | 显示 shell 使用的当前选项,如:我们使用 set -x 的时候,$- 中会包含 x |
| $? | 显示上一条命令的退出状态,或者说是返回值,没有返回值并正常运行的时候会返回 0 |
如:
#!/bin/bash funcA()
{
return 123
} sum()
{
echo "参数总个数: $#"
echo "字符串形式显示所有参数: $*"
echo "脚本运行的进程ID号: $$"
echo "字符串形式显示所有参数: $@"
echo "shell脚本运行的选项: $-"
funcA
echo "上一个语句的返回值: $?"
echo $(($1 + $2))
} sum 1 2
上面的代码会输出:
参数总个数: 2
字符串形式显示所有参数: 1 2
脚本运行的进程ID号: 1408
字符串形式显示所有参数: 1 2
shell脚本运行的选项: hB
上一个语句的返回值: 123
3
脚本中获取任意多的参数:
#!/bin/bash sumMulti()
{
sum=0
while [ "$1" != "" ]
do
sum=$(($sum+$1))
shift
done
echo $sum;
} sumMulti 1 2 3 4 5
while 后面的中括号左右需要有空格,语法需要,书写格式没有一般语言自由,
并且赋值表达式的等号左右不能有空格,有空格的语句,shell会将第一个词作为 shell 命令,然后将第一个空格后面的任何内容当作 shell 命令的参数,这也是 shell 的独特之处,理解这一点对于 shell 的学习非常关键!如上面的 sum=0 如果写作 sum = 0,会提示诸如下面的内容:
sum: =: No such file or directory
sum: 0: No such file or directory
也就是说 shell 在运行这个语句的时候,实际上是把 sum 当作 shell 命令了(当然函数也可以这么调用)。
shift 的作用是将第一个参数从参数列表中移除。
获取函数返回值:
1、通过 return 获取返回值:
#!/bin/bash sumMulti()
{
sum=0
while [ "$1" != "" ]
do
sum=$(($sum+$1))
shift
done
return $sum;
} sumMulti 1 2 3 4 5
echo "通过return获取返回值: $?"
我们可以使用上面提到的 $? 获取上一个函数执行的返回值。
2、通过 echo 获取返回值:(原理: 我们可以使用反引号获取命令执行的输出内容)
#!/bin/bash sumMulti()
{
sum=0
while [ "$1" != "" ]
do
sum=$(($sum+$1))
shift
done
echo $sum;
} sum=`sumMulti 1 2 3 4 5`
echo "通过echo获取返回值: $sum"
上面函数调用那一行也可以换做:两种写法差不多
sum=$(sumMulti 1 2 3 4 5)
shell函数使用的更多相关文章
- Shell入门教程:Shell函数详解
Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以速度很快,另外,Shell还能对函数进行预处理,所以函数的启动比脚本更快. 1.函数定义 ...
- Shell入门教程:Shell函数的返回值
shell函数返回值一般有3种方式: 1.return语句(默认的返回值) shell函数的返回值可以和其他语言的返回值一样,通过return语句返回. 比如: #!/bin/bash functio ...
- (转)Shell函数
Shell函数类似于Shell脚本,里面存放了一系列的指令,不过Shell的函数存在于内存,而不是硬盘文件,所以速度很快,另外,Shell还能对函数进行预处理,所以函数的启动比脚本更快. 1. 函数 ...
- Linux Shell系列教程之(十五) Shell函数简介
本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...
- Shell函数的简单应用
Shell函数的简单应用 在脚本内给函数传参: #!/bin/bash . /etc/init.d/functions CheckUrl (){ curl -I -s $ | head - } Che ...
- Shell函数语法
Shell函数语法 定义函数: function 函数名(){ 指令... } 调用函数,方法1: 函数名 调用函数,方法2: 函数名 参数一 参数二 return在函数里面使用会跳出函数并 ...
- shell 函数
1 shell函数的定义及其调用 shell函数有两种格式: function name { commands } name() { commands } 其中,name为函数名,commands为函 ...
- Shell函数:Shell函数返回值、删除函数、在终端调用函数
函数可以让我们将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高.像其他编程语言一样,Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: f ...
- Shell函数返回值、删除函数、在终端调用函数
Shell 也支持函数.Shell 函数必须先定义后使用. Shell 函数的定义格式如下: function_name () { list of commands [ return value ] ...
- Linux Shell 函数返回值
Shell函数返回值,常用的两种方式:return,echo 1) return 语句 shell函数的返回值,可以和其他语言的返回值一样,通过return语句返回. 示例: #!/bin/sh fu ...
随机推荐
- python-redis集合模式
无序集合SADD set集合是直接去重的,只会输出 xiao hehe sadd names3 xiao xiao hehe hehe 获取集合 names3的所有值,集合不能用切片形式获取值, ...
- Zabbix_agnet部署
原文发表于cu:2016-05-18 参考文档: zabbix监控linux主机:http://www.osyunwei.com/archives/8035.html 一.环境 Server:基于C ...
- SST:Single-Stream Temporal Action Proposals论文笔记
SST:Single-Stream Temporal Action Proposals 这是本仙女认认真真读完且把算法全部读懂(其实也不是非常懂)的第一篇论文 CVPR2017 一作 论文写作的动机m ...
- asp.net mvc同一个view展示多个不同列表思路
asp.net mvc一个模型一个view容易展示,可是遇到像首页那样,要同时调用好几个不同表的内容一小部分展示时,该怎么是好呢? 下边根据我的测试,用的是mvc access数据测试 先建立一个强类 ...
- drupal CVE-2018-7600 复现
1.系统环境 Drupal 8.5 linux 主机 ruby 代码 2.原理说明 影响版本 Drupal 6.x,7.x,8.x 参考:CVE-2018-7600漏洞分析 3.利用 在Python2 ...
- [T-ARA][너 때문에 미쳐][因为你而疯了]
歌词来源:http://music.163.com/#/song?id=5402880 作曲 : 赵英秀/김태현 [作曲 : 赵英秀/k/gim-Tae-hyeon] 作词 : 辉星 [作词 : 辉星 ...
- oozie的shell-action中加入hive脚本命令启动执行shell同时操作hive,抛异常Container killed on request. Exit code is 143 Container exited with a non-zero exit code 143
使用oozie来调度操作,用shell的action执行命令,其中shell里包含着hive -e 操作执行时,oozie窗口报 WARN ShellActionExecutor: - SERVER[ ...
- rest_framework基础
简介 为什么要使用REST framework? Django REST framework 是一个强大且灵活的工具包,用以构建Web APIs. - 在线可视的API,对于赢得你的开发者们十分有用 ...
- 基于NABCD评论作品,及改进建议
组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶 刘佳瑞 公冶令鑫 杨磊 杨金铭 张宇 卢帝同 一.拉格朗日2018--<飞词> 1.1 NABCD分析 N(Need,需求) ...
- 在html中怎么格式化输出json字符串
#今天的项目用到,看俊哥找到,特此记录下来 步骤: 1.在html页面中输入下面的标签,必须是在pre标签内输出格式才会生效: <pre id="songReqJson"&g ...