博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shell函数使用
阅读量:6827 次
发布时间:2019-06-26

本文共 1948 字,大约阅读时间需要 6 分钟。

函数定义格式:

和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/bashfuncA(){    return 123}sum(){    echo "参数总个数: $#"    echo "字符串形式显示所有参数: $*"    echo "脚本运行的进程ID号: $$"    echo "字符串形式显示所有参数: $@"    echo "shell脚本运行的选项: $-"    funcA    echo "上一个语句的返回值: $?"    echo $(($1 + $2))}sum 1 2

上面的代码会输出:

参数总个数: 2字符串形式显示所有参数: 1 2脚本运行的进程ID号: 1408字符串形式显示所有参数: 1 2shell脚本运行的选项: hB上一个语句的返回值: 1233

  

脚本中获取任意多的参数:

#!/bin/bashsumMulti(){    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 directorysum: 0: No such file or directory

也就是说 shell 在运行这个语句的时候,实际上是把 sum 当作 shell 命令了(当然函数也可以这么调用)。

 

shift 的作用是将第一个参数从参数列表中移除。

 

获取函数返回值:

1、通过 return 获取返回值:

#!/bin/bashsumMulti(){    sum=0    while [ "$1" != "" ]    do        sum=$(($sum+$1))        shift    done    return $sum;}sumMulti 1 2 3 4 5echo "通过return获取返回值: $?"  

我们可以使用上面提到的 $? 获取上一个函数执行的返回值。

 

2、通过 echo 获取返回值:(原理: 我们可以使用反引号获取命令执行的输出内容)

#!/bin/bashsumMulti(){    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)

  

 

  

 

转载于:https://www.cnblogs.com/eleven24/p/8590234.html

你可能感兴趣的文章
python 之多线程加锁
查看>>
我的友情链接
查看>>
exchange快速将断开的邮箱显示出来
查看>>
linux 下查找文件或者内容常用命令
查看>>
Linux常用系统调用表
查看>>
linux x86_64要注意的问题
查看>>
批处理中的call与start的个人学习心得
查看>>
搜索引擎的前世今生
查看>>
JSP
查看>>
经典排序算法 - 地精排序Gnome Sort
查看>>
Java中main函数参数String args[] 和 String[] args 区别
查看>>
puppet FAQ
查看>>
Struts2.0+Hibernate2.5+Spring3.0搭建JavaEE项目要用的jar
查看>>
互联网
查看>>
MySQL load data 权限相关
查看>>
ScriptManager.RegisterStartupScript失效的解决方案
查看>>
vsftpd 添加用户
查看>>
第三方模块的安装
查看>>
Terracotta中锁与性能的问题
查看>>
遇到Linux系统安装时窗口过大,按钮点不到,该怎么解决
查看>>