免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3551 | 回复: 3
打印 上一主题 下一主题

[系统管理] shell脚本函数写法讨论 [复制链接]

论坛徽章:
1
操作系统版块每日发帖之星
日期:2016-01-20 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-03-23 13:09 |只看该作者 |倒序浏览
本帖最后由 bobower 于 2018-03-23 13:11 编辑

HI ALL:

今天看别人写的一个shell写本,发现里面有个函数的写法不是很明白,百度很久也没有找到合理说明(可能百度关键字不最优吧,哈哈~),特来向各位大神请教~!

例一:
脚本如下:
# cat /tmp/a.sh
a () {
        a=1 b=3
        echo $a
        echo $b
}
a
echo $a
echo $b

====================
脚本说明:函数a中,a=1 b=3 没有换行,也没用分号隔开,我理解这样是会报错的,但执行是对的,如下
执行:
# sh -x /tmp/a.sh
+ a
+ a=1
+ b=3
+ echo 1
1
+ echo 3
3
+ echo 1
1
+ echo 3
3


====================
执行说明:函数中a=1 b=3相当于变量,可以在函数内外使用。

例二:
再来看一个例子,脚本如下:
# cat /tmp/b.sh
a () {
        a=1 b=3 ls /etc/fstab
        echo in: $a
        echo in: $b
}
a
echo out: $a
echo out: $b

=====================
脚本说明:相比于/tmp/a.sh,/tmp/b.sh脚本函数在 a=1 b=3后面多加了“ls /etc/fstab”,其它在变量输出时加了前缀信息,便于理解。
执行:
# sh -x /tmp/b.sh
+ a
+ a=1
+ b=3
+ ls /etc/fstab
/etc/fstab
+ echo in:
in:
+ echo in:
in:
+ echo out:
out:
+ echo out:
out:

====================
执行说明:执行结果显示,函数内的a=1 b=2是有赋值的,后面ls /etc/fstab也有执行。
但echo $a和$b时,不管是函数内还是函数外,都为空,请问这是为什么?

论坛徽章:
1
天秤座
日期:2013-09-05 10:45:07
2 [报告]
发表于 2018-03-30 19:13 |只看该作者
本帖最后由 howandsen 于 2018-03-30 19:30 编辑

例一:
分号和换行一样只是众多 control operator 中的一种。
只有命令结尾才需要加 control operator ,变量赋值严格来讲不是命令,而是命令的前置。
所以多个变量赋值之间不应该用分号分割,因为分号和换行的作用是等同的。
man bash 中也明确定义了简单命令的组成——由一系列可选的变量赋值开始。
SHELL GRAMMAR
        Simple Commands
                A simple command is a sequence of optional variable assignments followed by blank-separated words and redirections, and terminated by a control operator...




例二:
如果变量赋值后面加了命令,则变量成为后面命令的环境变量,并且对当前 shell 无效。
SIMPLE COMMAND EXPANSION
...
               If  no command name results, the variable assignments affect the current shell environment.  Oth‐erwise, the variables are added to the environment of the executed command and do not affect  thecurrent  shell  environment...


论坛徽章:
0
3 [报告]
发表于 2018-04-12 10:27 |只看该作者
佩服楼上
只想知道楼上大神,是了解真相去查manual来给我们这些菜鸟解释,还是学习过程中就已经通读过了.

论坛徽章:
0
4 [报告]
发表于 2018-04-15 22:20 |只看该作者
bobower 发表于 2018-03-23 13:09
HI ALL:

今天看别人写的一个shell写本,发现里面有个函数的写法不是很明白,百度很久也没有找到合理说 ...

厉害了,为什么a函数结束后,还有一个a,为什么在a函数里面可以有a变量?顺便问一下,能帮忙推荐一本学习shell脚本的书吗。
正在学习shell脚本,但是我手上这本感觉好粗略,好多细节都没有。想找一本比较比较详尽的书看看。

来自一个正在努力学习shell脚本的小白

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP