把代码封装成函数,相当于造了一个“轮子”,之后就直接重复使用即可。

函数的创建

shell中函数的创建有2种方式

1.使用function关键字

语法

function test {
...
}

2.使用括号

语法

test() {
...
}

函数的调用

记住三点即可。

1.调用方法

直接写函数名

test

2.先定义后调用

3.对于同名的函数,后面的会覆盖前面的

函数的返回值

使用默认的退出状态码有bug,所以推荐自定义退出码的方式。

test(){
...
return 5
}
test
echo $?

注意点

1.函数一调用完成就马上使用返回值(因为$?会显示上一条语句的返回值)

2.返回值范围在0~255

函数做为变量的值

编程语言中,将函数调用赋值给变量是很常见的事,但是shell中的情况有些不太一样

1.当函数调用赋值给变量时,并不会执行函数

2.函数的第一个echo语句的结果会被赋值给变量,剩下echo 语句或者代码正常执行

3.返回值并不会赋值给变量

function test {
echo 1
echo 2
return 6
}
echo 11
t=$(test)
echo "t: $t"
echo hello

结果

t: 

hello

向函数传递参数

记住以下几点

1.在脚本中调用函数时,必须将参数和函数调用放在同一行

2.在函数中,可以使用参数的环境变量来获取参数值

3.脚本在命令行中的参数值,需要在调用函数时一起传入

function test {
echo $1
echo $2
return 6
}
test $1 $2

结果

u
me

注意:

这里函数中$1和$2和调用时的含义不一样。

函数中的$1和$2指向脚本中函数调用时的参数;而调用时的$1和$2指向命令行中的参数

在函数中使用变量

在函数中定义局部变量要使用local关键字

local test

向函数中传递数组

将数组中的元素分解开,之后在函数内部进行重组

function testit {
local newarray
newarray=(;'echo "$@"')
echo "The new array value is: ${newarray[*]}"
}
myarray=(1 2 3 4 5)
echo "The original array is ${myarray[*]}"
testit ${myarray[*]}

结果

The original array is
The new array value is:

创建库文件

库文件可以实现一次定义函数,终生使用

库文件

a() {
echo ni
}

脚本文件

#!/bin/bash

. ./library

在命令行使用函数

单行方式

function test { ...; }

注意:tset之后必须有空格,语句结尾要加;。

多行方式

function test {
>...
>...
>}

注意:如果函数名和内置命令冲突,那么会覆盖内置命令!

在.bashrc中使用函数

直接在.bashrc文件中定义函数或者载入库文件即可。

使用shtool公共函数库

下载

传送门:ftp://ftp.gnu.org/gnu/shtool/shtool-2.0.8.tar.gz
安装

tar xf shtool...
cd shtool...
./configure
make
make test #测试

shtool库文件

语法

shtool [options] [function [options] [args]]
shtool platform --help
Usage: shtool platform [-F|--format <format>] [-S|--sep <string>] [-C|--conc <string>] [-L|--lower] [-U|--upper] [-v|--verbose] [-c|--concise] [-n|--no-newline] [-t|--type <type>] [-V|--version] [-h|--help]

shell脚本之函数的使用的更多相关文章

  1. Linux Shell脚本编程-函数

    函数介绍  定义:把一段独立功能的的代码当做一个整体,并为之一个名字,命名的代码段,此即为函数:  功能:函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程.  注意: ...

  2. Shell脚本之八 函数

    一.函数定义 Linux shell 可以用户定义函数,然后在shell脚本中可以随便调用. shell中函数的定义格式如下: [ function ] funname [()] { action; ...

  3. shell脚本的函数介绍和使用案例

    #前言:今天我们来聊聊shell脚本中的函数知识,看一下函数的优势,执行过程和相关的使用案例,我们也来看一下shell和python的函数书写方式有什么不同 #简介 .函数也具有别名类似的功能 .函数 ...

  4. Shell脚本(五)函数

    总结下shell中的函数用法 #!/bin/bash function add_v1() { echo "call function add" } function add_v2( ...

  5. Shell脚本学习 - 函数,输入输出重定向,文件

    函数 函数定义 [ function ] funname [()] { action; [return int;] } 定义时可以是function fun(),也可以直接fun(),不带参数 返回值 ...

  6. shell脚本 4 函数与正则

    shell函数 shell中允许将一组命令集合或语句形成一段可用代码,这些代码块称为shell函数.给这段代码起个名字称为函数名,后续可以直接调用该段代码. 格式 func() {   #指定函数名 ...

  7. shell脚本中${...}函数的用法总结

    ${...}在字符串中有非常多的用法: 1.${var} 限定变量. 如果一个变量名A是另一个变量名AB的前部分,那么,如果要在AB相连时,要得到A的值,就必须使用${var}限定. 如果变量名不会产 ...

  8. 在shell脚本中使用函数

    转载请标明:http://www.cnblogs.com/winifred-tang94/ 对于在脚本中重复使用的功能模块,可以封装成为函数. shell脚本中函数的定义可以使用如下两种方式: a. ...

  9. shell脚本函数及数组

    函数介绍: 函数function是由若干条shell命令组成的语句块,实现代码重用和模块话编程. 它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部 ...

随机推荐

  1. vc预处理

    VC 编译命令开关 vc可以可以通过Settings -->Project-->C/C++-->Customize来设置这个编译开关 /C:在预处理输出中保留注释语句 /c:只编译, ...

  2. 【转载】惠新宸:PHP在百度的应用现状及展望

    http://blog.sina.com.cn/s/blog_645f8e970100qvd8.html 惠新宸,百度PHP高级顾问,年二十有八,好追根究底,有不良嗜好, 幸性本善.乙酉年识互联网,丁 ...

  3. Javascript屏蔽鼠标右键-超简单,不过还是记录一下

    Javascript屏蔽鼠标右键,其实作用也不大,也许是为了防止别人查看源代码,其实想查看源代码有多种途径,未必需要通过鼠标右键.不过当我们自定义鼠标右键弹出菜单时,也许需要这些. 下面是源码: 1 ...

  4. [Python爬虫] 之五:Selenium 处理滚动条

     selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的.这时候需要借助滚动条来拖 ...

  5. C++中++i与i++效率比较

    解析: 在这里声明,简单的比较前缀自增运算符和后缀自增运算符的效率是片面的,因为存在很多因素影响这个问题的答案.首先考虑内建数据类型的情况:如果自增运算表达式的结果没有被使用,而是仅仅简单的用于增加一 ...

  6. 对SVM的个人理解---浅显易懂

    原文:http://blog.csdn.net/arthur503/article/details/19966891 之前以为SVM很强大很神秘,自己了解了之后发现原理并不难,不过,“大师的功力在于将 ...

  7. (算法)二叉树的第m层第k个节点

    题目: 给定以下二叉树: struct node { node *left, *right; int value; }; 要求编写函数 node* foo(node *node, unsigned i ...

  8. (剑指Offer)面试题53:正则表达式匹配

    题目: 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配是指字符串的所有字符匹配整个模式. ...

  9. iOS 状态栏和导航条配置

    iOS 状态栏和导航条配置 一:隐藏: [self.navigationController setNavigationBarHidden:YES animated:YES]; [[UIApplica ...

  10. 算法笔记_146:TarJan算法的应用(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M& ...