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 ...
随机推荐
- Mybatis-Plus的填坑之路 - Lynwood/wunian7yulian
目录 Mybatis-Plus 我来填坑~ 目录 一.简单介绍 官方说明 : 成绩: 最新版本: 开发层面MyBatis-Plus特色 Mybatis-Plus中的Plus 二.MP的特性 三.MP框 ...
- Digital Roots:高精度
C - Digital Roots Description The digital root of a positive integer is found by summing the digits ...
- MD5加密字符串--基于python
import hashlib#md5加密32位def md5(str): import hashlib m = hashlib.md5() m.update(str) return m.hexdige ...
- jquery选择器 直观实验
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Polycarp and Letters(set首战!)
Description Polycarp loves lowercase letters and dislikes uppercase ones. Once he got a string s con ...
- Weighted Median
For n elements x1, x2, ..., xn with positive integer weights w1, w2, ..., wn. The weighted median is ...
- 软件工程-东北师大站-第六次作业PSP
1.本周PSP 2.本周进度条 3.本周累计进度图 代码累计折线图 博文字数累计折线图 4.本周PSP饼状图
- HDU 2105 The Center of Gravity
http://acm.hdu.edu.cn/showproblem.php?pid=2105 Problem Description Everyone know the story that how ...
- (五)hadoop系列之__集群搭建SSH无密访问多台机器
免密码ssh设置 现在确认能否不输入口令就用ssh登录localhost: $ ssh localhost 如果不输入口令就无法用ssh登陆localhost,执行下面的命令: . 并修改hosts映 ...
- SQL中 ALL 和 ANY 区别的
在select中我们可能会认为all和any应该表达的意思差不多.其实他们的意思完全不一样: all: 是将后面的内容看成一个整体,如: >all (select age from studen ...