Shell 函数相关
一、函数的两种定义方式
第一种:函数名(){ ...... }
第二种:function 函数名{ ...... }
调用时直接使用 函数名 调用,将函数当作一个“命令”即可。函数内部直接使用 $1、$2 ... $n
二、函数返回值有两种形式
- return
- echo
1、使用 return 返回值
- 利用 return 返回函数的返回值,取值范围为 1~255 的整数
- 函数使用 return 返回值,通过只是用来供其他地方调用获取状态,因此一般情况只会返回 0 或 1。0表示成功,1表示失败
例如:判断 nginx 进程是否启动:
#!/bin/bash
# 判断nginx是否启动 function is_run_nginx
{
status=$$
ps -ef | grep ngnix | grep -v grep | grep -v $status &> /dev/null
if [ $? -eq ]; then
# 默认为0
return
else
return
fi
}
# return返回值不能 赋值给某个变量,只能用作后续程序进行判断
# is_run=`is_run_nginx`
is_run_nginx && echo "nginx is running" || echo "nginx is stop"
2、使用 echo 返回值
- 使用 echo 可以返回任何字符串结果
- 通常用来返回数据,比如一个字符串值 或 列表值
举例:获取系统用户名
#!/bin/bash #使用echo 返回值,返回系统用户名 function get_users
{
# -d 指定分隔符,-f 指定取第几列
echo `cat /etc/passwd | cut -d : -f `
} user_list=`get_users` index=
for u in $user_list
do
echo "This is $index user: $u"
done
三、Shell 全局变量与局部变量
1、全局变量
- 不做特殊声明的话,默认都是全局变量
- Tips:大型脚本慎用全局变量
2、局部变量(只能声明在函数内)
- 定义变量时,使用 local 关键字
- 函数内外同时存在同名变量,函数内变量覆盖函数外变量
注意:如果函数没有调用,函数里面的变量是不会生效的。
#!/bin.bash var1="hello var1" function test
{
var2="hello var2"
local var3="hello var3"
} # test 没调用,var2,var3都不存在
echo $var1
echo $var2
echo $var3 test echo $var1
echo $var2
# var3 为局部变量,不能打印
echo $var3
打印结果:
hello var1
// test函数没调用,var2 不存在
// test函数没调用,var2 不存在
hello var1 hello var2
// var3 是局部变量,echo 一个空值
四、建立函数库
函数库存在的目的就是 将重复代码封装成函数文件。一般函数库不直接执行,而是供脚本进行调用
关于函数库的一些经验:
- 库文件名的后缀是任意的,一般建议使用 .lib
- 库文件一般没有可执行选项
- 库文件无需和脚本在同一级目录,只需在脚本中引用时指定
- 第一行一般使用 #!/bin/echo , 输出警告信息,避免用户执行。
举个例子:
定义一个函数库,该函数库实现一下几个函数:1、加法函数 add;2、减法函数 reduce;3、乘法函数 multiple;4、除法函数 devide;打印系统运行情况的函数 sys_load,该函数可以显示内存运行情况。
函数库如下:
function add
{
echo "`expr $1 + $2`"
} function reduce
{
echo "`expr $1 - $2`"
} function multiple
{
echo "`expr $1 \* $2`"
} function divide
{
echo "`expr $1 / $2`"
} function sys_load
{
echo "Memory Info"
echo
free -m
echo echo "Disk Usage"
echo
df -h
echo
}
引用函数库中的函数,当前 脚本 和 lib 在同一级目录。
#!/bin/bash # 引用函数库 lib/base_function
# 通过点 ". " 引入函数库
. lib/base_function.lib add reduce multiple divide sys_load
Shell 函数相关的更多相关文章
- Linux Shell系列教程之(十五) Shell函数简介
本文是Linux Shell系列教程的第(十五)篇,更多Linux Shell教程请看:Linux Shell系列教程 函数可以将一个复杂功能划分成若干模块,从而使程序结构更加清晰,代码重复利用率更高 ...
- 使用shell数据处理数据实例①-------手把手教学版
引子: 在工作过程中经常要处理各种小数据,同事间会用各种工具方法来处理,比如用java.python.Perl甚至用UE手工处理.但貌似不都方便. 今天举一例子使用shell来处理,来说明shell一 ...
- 深入理解计算机系统项目之 Shell Lab
博客中的文章均为meelo原创,请务必以链接形式注明本文地址 Shell Lab是CMU计算机系统入门课程的一个实验.在这个实验里你需要实现一个shell,shell是用户与计算机的交互界面.普通意义 ...
- 测试常用shell语句——数值,数组类型;函数创建
一.特殊类型的变量 shell下默认的变量类型为字符串类型 1,数值类型 如果进行数值运算,有这么几种方法 方法一: declare -i sum sum=+ echo $sum 方法二: sum=$ ...
- 快,学会 shell
本文分成入门篇和基础篇.基础篇包括变量.字符串处理.数学运算三部分.基础篇包括流控制.函数和函数库三部分.主要是基于例子进行讲解,其中有 4 个复杂一点的脚本,看懂了也就入门了. 我们先来聊一聊 sh ...
- Shell替换
如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. #!/bin/bash a= echo -e "Value of a is ...
- Shell特殊变量
$ 表示当前Shell进程的ID,即pid $echo $$ 运行结果 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数 ...
- shell变量
定义变量 定义变量时,变量名不加美元符号($),如: variableName="value" 注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样.同时,变量名 ...
- 第一个shell脚本
打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...
随机推荐
- R语言查看栅格值
有这么一个需求,知道栅格上的坐标,想看看这个坐标上的栅格值是多少.坐标长这个样子 那么这样的坐标下的栅格值该怎么看 cellFromXY(the.stack$t1,c( -1505000,683500 ...
- Python入门(一)数据类型、循环语句
脚本语言类型: 1.编译型语言:写完代码不能执行,需要先编译 eg:c.c++.c# 2.解释性语言:不需要编译 直接执行 eg:python.jav ...
- [redis] redis 命令
- spring 事务关键类
TransactionInterceptor-> TransactionAspectSupport spring 事务的提交 AbstractPlatformTransactionManager
- English trip V2 - 3. A Healthy Diet Teacher:Corrine Key:各种前缀 im- un- in- re- over- under-
In this lesson you will learn to talk about foot and drink for a healthy diet. 课上内容(Lesson) What do ...
- 手撸代码实现equals方法
重点都在注释里面写了,这里就不再重复叙述,贴上代码到博客主要是备用. package equals; class Book extends Object { private String title; ...
- iptables命令使用详解
iptables的主要功能是实现对网络数据包进出设备及转发的控制.当数据包需要进入设备.从设备中流出或者经该设备转发.路由时,都可以使用iptables进行控制. 环境 操作系统:CentOS7.3 ...
- conda环境复制
配置环境是一个很烦的事,有时候用到服务器需要一遍又一遍的配..太麻烦了,这时候就要用到conda,直接复制已有的环境.事半功倍. 第一种方法:地址复制 首先找到要复制的环境的路径:conda info ...
- mac 中git操作账号的保存与删除
保存: 在mac中自动保存git的用户名和密码很简单,只需要在终端命令行中输入下面的命令就是: git config --global credential.helper osxkeychain 然后 ...
- 在ibatis中时间段查询完整代码
ibatis.xml文件中的代码如下: <typeAlias alias="ServInvokeTest" type="com.entity.ServInvokeT ...