在shell中定义函数可以使代码模块化,便于复用代码。不过脚本本身的变量和函数的变量的作用域问题可能令你费解,在这里梳理一下这个问题。
(1)Shell脚本中定义的变量是global的,其作用域从被定义的地方开始,到shell结束或被显示删除的地方为止。
例1:脚本变量的作用域
#!/bin/bash
#define the function ltx_func
ltx_func()
{
echo $v1
#modify the variable v1
v1=200
}
#define the variable v1
v1=100
#call the function ltx_func
ltx_func
echo $v1
结果:
100
200
解析:脚本变量v1的作用域从被定义的地方开始,到shell结束。调用函数ltx_func的地方在变量v1的作用域内,所以能够访问并修改变量v1。
(2)Shell函数定义的变量默认是global的,其作用域从“函数被调用时执行变量定义的地方”开始,到shell结束或被显示删除处为止。函数定义的变量可以被显示定义成local的,其作用域局限于函数内。但请注意,函数的参数是local的。
例2:函数定义的global变量
#!/bin/bash
#define the function ltx_func
ltx_func()
{
#define the variable v2
v2=200
}
#call the function ltx_func
ltx_func
echo $v2
结果:
200
解析:函数变量v2默认是global的,其作用域从“函数被调用时执行变量定义的地方”开始,到shell结束为止。注意,不是从定义函数的地方开始,而是从调用函数的地方开始。打印命令在变量v2的作用域内,所以能够访问变量v2。
例3:函数定义的local变量
#!/bin/bash
#define the function ltx_func
ltx_func()
{
#define the local variable v2
local v2=200
}
#call the function ltx_func
ltx_func
echo $v2
结果:
(空)
解析:函数变量v2显示定义为local的,其作用域局限于函数内。打印命令在函数外,不在变量v2的作用域内,所以能够不能访问变量v2。
例4:函数参数是local变量
#!/bin/bash
#define the function ltx_func
ltx_func()
{
echo "param 1: $1"
}
#call the function ltx_func
ltx_func 100
结果:
100
解析:函数参数是local的,通过位置变量来访问。打印命令输出函数的第一个参数。
(3)如果同名,Shell函数定义的local变量会屏蔽脚本定义的global变量。
例5:同名local变量屏蔽global变量
#!/bin/bash
#define the function ltx_func
ltx_func()
{
echo $v1
#define the local variable v1
local v1=200
echo $v1
}
#define the global variable v1
v1=100
#call the function ltx_func
ltx_func
echo $v1
结果:
100
200
100
解析:global变量v1的作用域从被定义的地方开始,到shell结束。调用函数ltx_func的地方在变量v1的作用域内,所以能够变量v1。函数又定义了同名的local变量v1,同名local变量屏蔽global变量,所以函数第二次打印访问的是local变量。退出函数后再次打印v1,此时函数定义的local变量已经消失,访问的是global变量。
- 浏览: 5221388 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (756)
- postgreSQL (1)
- 数据库 (18)
- oracle (1)
- Java Web (212)
- ZK框架 (0)
- installanywhere (0)
- linux命令 (51)
- dos cmd (3)
- 随笔_随感 (14)
- Java (290)
- C (1)
- unix (11)
- C++ (0)
- perl (0)
- python (10)
- ruby (2)
- bash (4)
- mysql (8)
- android (5)
- 法律 (0)
- maven ant (2)
- ios (11)
- Continuous integration (3)
- java swing (71)
- java swt (4)
- spring MVC (26)
- javascript (139)
- css (23)
- libgdx (0)
- nginx (9)
- loadruner (0)
- php (5)
- git (9)
- IDEA (6)
- 接口调试神器 (9)
- 数学math (1)
- eclipse (2)
- mac (17)
- freemark (0)
- ajax (1)
- less (1)
- zookeeper (1)
- react (3)
- html5 (3)
- jQuery (1)
- gitlab (2)
- shell (6)
- zsh (1)
- hibernate (6)
- gradle (3)
- groovy (3)
- 分布式锁 (1)
最新评论
-
fanchengliang:
好用,特地登录了来顶
破解 navicat premium 11 -
w_mojian180:
这个方法对于子类来说是没效果的
Spring AOP会忽略从父类继承的方法 -
cremains:
如何使用redis实现分布式锁 -
wangyudong:
没这么麻烦吧,网上找了一个Holer工具,只需要配置一个Acc ...
公网访问局域网内的数据库 -
haoxuexi87:
Jmeter性能测试从入门到精通(2018年最新)课程观看地址 ...
JMeter 接口测试入门01
发表评论
-
使用awk 分析日志
2018-04-22 15:44 1486直接上shell命令: awk 'BEGIN{index2 ... -
使用shell命令查看分析日志(2)
2018-04-21 11:56 1851目标: 查看日志文件中,所有空指针异常发生的位置,及前后1 ... -
使用shell命令查看分析日志
2018-04-21 11:11 4320摘要: 现在网站都有后 ... -
linux shell 条件判断
2017-01-27 23:04 3512linux shell 条件判断 (1)是否等于 if ... -
linux expect常见用法
2017-01-22 13:49 2686linux expect常见用法 expect有什么用呢 ... -
linux shell批量重名了java 类
2016-12-28 17:43 1179linux shell批量重名了java 类 所以的单元 ... -
hosts.deny
2016-12-21 12:21 1480linux 防止攻击的配置: hosts.deny 内 ... -
centos 更新svn 客户端版本
2016-10-17 23:17 2326centos 更新svn 客户端版本 添加源 /etc/ ... -
linux 服务器常用脚本
2016-08-17 22:22 1076linux 服务器常用脚本 (1)nginx 重新加载 ... -
linux ip白名单
2016-03-21 08:56 13631linux ip白名单 配置文件:/etc/hosts.a ... -
安装CentOS7 之后遇到的问题
2016-03-13 13:19 1192我安装的centos7的版本是: CentOS Linux ... -
stub测试时如何接口转发
2016-03-01 15:00 1277stub测试时如何接口转发我们的网站依赖协作方接口(其他部门 ... -
linux 系统如何防止攻击
2016-02-27 14:11 2024linux 系统如何防止攻击 经常看看登录日志:/var/ ... -
sed 常见用法
2016-02-24 18:24 1467sed 常见用法 (1)添加注 ... -
[转]ubuntu 设定永久dns
2016-02-23 15:22 2698通过修改: sudo vi /etc/resolvconf ... -
linux 定时器
2016-02-01 09:25 2580linux 定时器 (1)实例 [root@iZ25t ... -
阿里云主机防止攻击的建议
2016-01-17 23:54 1852阿里云主机防止攻击的建议 (1)关闭不必要的服务 [r ... -
grep命令常见用法
2016-01-17 21:37 3024grep命令常见用法 (1)通过端口号找进程 占用800 ... -
linux 禁止指定ip访问
2016-01-13 23:31 4820linux中如何禁止指定的i ... -
通过命令名称查询进程id
2016-01-10 22:37 2094linux 中如何通过命令名称查询出进程的id呢?\ 例如 ...
相关推荐
`2.2Shell变量的作用域:全局变量、环境变量和局部变量.html`将讲解变量的不同类型及其作用域,包括全局变量(在整个脚本中可见)、环境变量(可供所有子进程使用)和局部变量(仅在其定义的函数或块中有效)。...
在Shell编程中,变量的作用域是一个关键概念,它决定了变量在哪些范围内可以被访问。Shell中的变量主要有三种作用域:局部作用域、全局作用域...通过合理利用变量作用域,你可以更好地组织和控制你的Shell脚本的逻辑。
说起函数调用,相信大家也不会陌生,然而对于初学Shell的我来说,Shell中函数调用方式却有点让我不太习惯,自己也走了不少的弯路,因为传递参数时出了一个很“自然”的错误,也让我吃了不少的苦头,所以总结一下...
* shell 函数变量的作用域:函数中的变量可以在局部和全局中使用。 5. Linux Shell 脚本编程实践 Linux Shell 脚本编程可以应用于各种场景,例如系统管理、网络管理、数据处理等。 * 自动化系统管理:使用 shell ...
在Shell脚本中,了解函数的作用域和变量的作用范围非常重要,这直接影响到函数内部和外部变量的行为。 **示例代码** (testfun2.sh): ```sh #!/bin/sh echo $(uname); declare num=1000; uname() { echo "test!"; ...
4. 函数编写:掌握如何在Shell脚本中定义和调用函数,以及参数传递和局部变量的作用域。 5. 脚本调试和测试:学习使用调试工具和方法对脚本进行错误检测和问题诊断,以及如何编写测试用例确保脚本的稳定性和可靠性...
- **变量**:Shell脚本中可以定义并使用变量,例如`NAME="John"`,然后通过`echo $NAME`输出变量值。 - **流程控制**:包括条件语句(如`if`,`elif`,`else`)和循环语句(如`for`,`while`,`until`)。 2. **...
函数内部可以使用`local`关键字定义只在函数内部作用域有效的变量。 2. **退出状态**: 函数执行完毕后会返回一个退出状态,这个值可以通过`return`命令指定,范围是0到255,其中0表示成功,非0表示错误。如果没有...
编写Shell脚本的过程中还需要注意特殊字符的使用,比如$()用于命令替换,{}用于限定变量的作用域,[]用于测试条件表达式,而 [[]]则用于更高级的条件测试。 最后,脚本编写完成之后,建议通过实际的例程、习题实训...
本文将深入讲解Linux shell脚本的几个核心知识点,包括Shebang、变量、作用域、特殊参数变量、状态变量、内置命令、字符串操作以及文件管理。 首先,Shebang(#!/bin/bash)是shell脚本的第一行,它指定了脚本应...
- **从shell中访问描述符**:演示了如何在Shell脚本中访问和操作文件描述符。 #### 第10章 管道输入读 - **逐行选项1**至**逐行选项4**:提供了四种不同的方法来逐行读取管道输入。 - **直接管道读**:直接从管道...
默认情况下,变量在整个脚本中都是可见的,但也可以限制其作用域仅限于某个函数内部。 3. **掌握Shell通配符的用法**: - **通配符**:`*` 表示任意数量的任意字符;`?` 表示单个任意字符;`[` 和 `]` 定义一组...
数也能像环境变量一样用export到处,如此,函数的作用域就可以扩展到子进程中。 export -f fname Linux export命令用于设置或显示环境变量。 在shell中执行程序时,shell会提供一组环境变量。export可新增,修改...
在后续章节中,将详细介绍如何声明、赋值和使用变量,以及变量的作用域和生命周期。理解变量是编写有效脚本的关键,因为它们可以存储数据并在脚本的不同部分之间传递信息。 **控制流** 条件语句(如if、else、case...
函数与数组章节介绍了Shell函数的定义、调用和作用域。数组作为数据集合,在Shell脚本中同样可以使用,包括创建、索引、追加和删除元素等操作。 文本处理在Shell脚本中占有重要地位,通常涉及grep、sed和awk这三个...
Shell脚本是Linux/Unix操作系统中用于自动化任务的编程语言,它基于Bash shell,是系统管理员和开发者常用的工具之一。以下是对常用Shell工作脚本的一些重点总结: 1. 批量创建文件: - 在 `/shi` 目录下批量创建...
Shell变量是Shell脚本编程中的基础元素,用于存储各种数据。在Bash Shell中,变量的定义无需指定类型,它们默认被当作字符串处理,这意味着无论赋予变量的是整数、浮点数还是其他类型,都会被当作字符串存储。这与C/...
在Linux系统中进行日常运维或者是编写脚本时,变量是再熟悉不过的了,但这些变量都有哪些类型,具体的用法又有哪些差异呢?本文整理分享给大家: 一、bash变量类型: 本地变量 局部变量 环境变量 位置变量 特殊变量...
总结来说,Linux Shell的自定义函数为我们提供了模块化和复用代码的能力,通过理解函数定义、返回值处理以及变量作用域,可以更高效地编写Shell脚本。记得在编写函数时,考虑函数的可读性和可维护性,同时注意变量的...