【shell实战之】在命令行中使用函数

可以用脚本函数执行一些十分复杂的操作,但有时候,在命令行界面直接使用这些函数也很
有必要。
就像在 shell 脚本中将脚本函数当作命令使用一样,在命令行界面中也可以这样做。这个特
性很不错,因为一旦在 shell 中定义了函数,就可以在整个系统的任意目录中使用它,而无须担
心该函数是否位于 PATH 环境变量中。重点在于 shell 要识别这些函数。有几种方法可以实现这一
目的。

在命令行中创建函数

单行命名函数

因为 shell 会解释用户输入的命令,所以可以在命令行中直接定义一个函数。有两种方法。
一种方法是采用单行方式来定义函数:
$ function divem { echo $[ $1 / $2 ]; } 
$ divem 100 5 
20
当你在命令行中定义函数时,必须在每个命令后面加个分号,这样 shell 就能知道哪里是命
令的起止了:
$ function doubleit { read -p "Enter value: " value; echo $[ 
 $value * 2 ]; } 
$ 
$ doubleit 
Enter value: 20 
40 
$ 

多行命名函数

另一种方法是采用多行方式来定义函数。在定义时,bash shell 会使用次提示符来提示输入
更多命令。使用这种方法,无须在每条命令的末尾放置分号,只需按下回车键即可:
$ function multem { 
> echo $[ $1 * $2 ] 
> } 
$ multem 2 5 
10 
$ 
输入函数尾部的花括号后,shell 就知道你已经完成函数的定义了。
 在命令行创建函数时要特别小心。如果给函数起了一个跟内建命令或另一个命令相同的
名字,那么函数就会覆盖原来的命令。

在.bashrc 文件中定义函数

在命令行中直接定义 shell 函数的一个明显缺点是,在退出 shell 时,函数也会消失。对复杂
的函数而言,这可是个麻烦事。
有一种非常简单的方法可以解决这个问题:将函数定义在每次新 shell 启动时都会重新读取
该函数的地方。
.bashrc 文件就是最佳位置。不管是交互式 shell 还是从现有 shell 启动的新 shell,bash shell
在每次启动时都会在用户主目录中查找这个文件。

直接定义函数

可以直接在用户主目录的.bashrc 文件中定义函数。大多数 Linux 发行版已经在该文件中定义
了部分内容,注意不要误删,只需将函数放在文件末尾即可。这里有个例子:
$ cat .bashrc 
# .bashrc 
# Source global definitions 
if [ -r /etc/bashrc ]; then 
 . /etc/bashrc 
fi 
function addem { 
 echo $[ $1 + $2 ] 
} 
$ 
该函数会在下次启动新的 bash shell 时生效。随后你就能在系统中的任意地方使用这个函
数了。

源引函数文件

只要是在 shell 脚本中,就可以用 source 命令(或者其别名,即点号操作符)将库文件中
的函数添加到.bashrc 脚本中:
$ cat .bashrc 
# .bashrc 
# Source global definitions 
if [ -r /etc/bashrc ]; then 
 . /etc/bashrc 
fi 
. /home/rich/libraries/myfuncs 
$ 
要确保库文件的路径名正确,以便 bash shell 找到该文件。下次启动 shell 时,库中的所有函
数都可以在命令行界面使用了:
$ addem 10 5 
15 
$ multem 10 5 
50 
$ divem 10 5 
2 
$ 
更棒的是,shell 还会将定义好的函数传给子 shell 进程,这样一来,这些函数就能够自动用
于该 shell 会话中的任何 shell 脚本了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值