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 ...
随机推荐
- JDBC中execute、executeQuery和executeUpdate的区别
Statement 接口提供了三种执行 SQL 语句的方法:executeQuery.executeUpdate 和 execute.使用哪一个方法由 SQL 语句所产生的内容决定. 1>方法e ...
- tensorboard
在控制台输入: C:\Users\sunli\Documents\name\src>tensorboard --logdir=./w
- python小技巧---打印出不同颜色的输出
在调试代码时打印常常一种颜色,找个东西真的是很难,在一次听金角大王的视频中听到了个方法,也是喀什使用了,本来不打算做记录了,可是稍微有几天不用,还得翻之前的代码,找着也是听麻烦的,现在在这里做个记录 ...
- UNDO(二)
Managing Undo Beginning with Release 11g, for a default installation, Oracle Database automatically ...
- VS2017 MVC Spring net 环境配置
首先打开管理NuGet程序包. 搜索 "spring web",安装Spring.Web,Spring.Web.Mvc5,Spring.Web.Extensions, 搜索Micr ...
- 亚马逊VE账号运营
VE劲爆内幕大揭秘!“仿牌+Amazon VE”跟卖之路 Amazon Vendor Express 是Amazon.com2015年下旬推出的新的供应商平台,商家通过这个平台可以把产品卖给Amazo ...
- java8实战二------lambda表达式和函数式接口,简单就好
一.Lambda 可以把Lambda表达式理解为简洁地i表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表.函数主体.返回类型,可能还是一个可以抛出的异常列表. 听上去,跟我们用的匿名类,匿名 ...
- xibai的PCI卡在英文系统上安装报错
通过购买时自带的光驱,在里面直接找相对应的型号的驱动,直接安装,即可 不要通过电脑管理,然后更新驱动的这种方式,会报错
- 安装vue-cli时-4058报错的解决方法
一.报错信息 安装vue-cli时-4058报错 二.解决办法 1.安装淘宝镜像 npm --registry https://registry.npm.taobao.org info undersc ...
- shell脚本学习之case用法及实例
case语句和判断语句[if...elif...else]功能类似;当在逻辑判断比较简单的情况下,比后者的代码量要少许多.case用法,用变量来匹配某值,如果匹配成功则执行它下面的命令,直到 ;;为止 ...