博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux Shell编程之三函数
阅读量:6160 次
发布时间:2019-06-21

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

   函数是什么呢?我们为什么有使用函数呢?

一、函数的相关知识

    函数就是就具有某种特定功能的代码打包起来,提供一个接口以供使用。这样做的好处是:一方面可以实现代码复用,例如:许多面向对象的语言,像Java提供的许多类和方法(函数)一样;另一方面是为了代码的模块化编程,这样可以实现多人同时开发代码。

    在 shell 中函数主要的作用是实现代码复用,当然利用函数比编写代码可以是代码更简洁,易读。

    

    shell中如何定义函数?

语法格式:

    function F_NAME {

        函数体

    }

    或者

    F_NAME() {

        函数体

    }

二、函数示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/bin/bash
# description: 将一个外部命令本身和它所依赖的库文件拷贝到指定路径下
# version:0.0
# date:2014-07-23
# author: Alex
# license: GPL
 
# 模拟根文件系统
 
ch_root=
"/mnt/sysroot"
[ ! -d $ch_root ] && 
mkdir 
$ch_root
 
bincopy() {
    
if 
which 
$1 &>
/dev/null
then
    
# local 定义局部变量,它的作用域是本个函数,一般我们在这里尽量使用局部变量,而不使用全局变量
        
local 
cmd_path=`
which 
--skip-
alias 
$1`
        
local 
bin_dir=`
dirname 
$cmd_path`
        
[ -d ${ch_root}${bin_dir} ] || 
mkdir 
-p ${ch_root}${bin_dir}
        
[ -f ${ch_root}${cmd_path} ] || 
cp 
$cmd_path ${ch_root}${bin_dir}
    
# 用 return 返回函数的状态值 是一个数字 0-255
        
return 
0
    
else
        
echo 
"Command not found."
        
return 
1
    
fi
}
 
libcopy() {
    
local 
lib_list=$(ldd `
which 
--skip-
alias 
$1` | 
grep 
-Eo 
'/[^[:space:]]+'
)
    
for 
loop 
in 
$lib_list;
do
        
local 
lib_dir=`
dirname 
$loop`
        
[ -d ${ch_root}${lib_dir} ] || 
mkdir 
-p  ${ch_root}${lib_dir}
        
[ -f ${ch_root}${loop} ] || 
cp 
$loop ${ch_root}${lib_dir}
    
done
}
 
 
read 
-p 
"Please input a command: " 
command
 
while 
"$command" 
!= 
"quit" 
];
do
    
if 
bincopy $
command 
;
then
        
libcopy $
command
    
fi
    
read 
-p 
"Please input a command: " 
command
done
本文转自 羊木狼 51CTO博客,原文链接:http://blog.51cto.com/guoting/1528506,如需转载请自行联系原作者
你可能感兴趣的文章
WPF中,多key值绑定问题,一个key绑定一个界面上的对象
查看>>
UML类图简明教程
查看>>
java反编译工具(Java Decompiler)
查看>>
Android开发之自定义对话框
查看>>
微信Access Token 缓存方法
查看>>
Eclipsed的SVN插件不能识别之前工作空间的项目
查看>>
Linux 查看iptables状态-重启
查看>>
amazeui学习笔记一(开始使用2)--布局示例layouts
查看>>
c#中lock的使用(用于预约超出限额的流程)
查看>>
ODI基于源表时间戳字段获取增量数据
查看>>
并发容器之CopyOnWriteArrayList(转载)
查看>>
什么是AAC音频格式 AAC-LC 和 AAC-HE的区别是什么
查看>>
原创:goldengate从11.2升级到12.1.2
查看>>
Quartz
查看>>
正则表达式的语法规则
查看>>
C#一个关于委托和事件通俗易懂的例子
查看>>
类似于SVN的文档内容差异对比工具winmerge
查看>>
Cause: java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist
查看>>
quratz线程
查看>>
execnet: rapid multi-Python deployment
查看>>