首页 > soft > shell 命令替换

shell 命令替换

之前介绍过shell有两种方式可以取得变量的值:通过赋值语句,或者是以命令参数传递给脚本。下面来介绍另一种方式,用命令替换。

命令替换:允许你使用命令的标准输出就好像它是一个变量值一样。其语法为:$(UNIX command))

这其实和PHP的命令替换是很像的,举个PHP的例子先说明一下什么叫命令替换:

$var_fir = 'var_sec';

$var_sec = 'yyy';

$var_thi = $$var_fir;

var_dump($var_thi);

结果返回的是’yyy’,很明显$$var_fir被替换成了$var_sec。和此类似,shell中你也可以进行命令替换,例如:

$(pwd)值为当前目录(等同于环境变量$PWD)

$(ls $HOME)为用户根目录下的所有文件名

$(ls $(pwd))为当前目录下所有文件名

就是这样,也许你会问这有啥用啊?用途何在?一般都啥时候用到这个命令替换?

这才是最根本的,因为只知道有一个强大的工具,却不知道如何去使用,那么这个工具是会生锈的,毫无价值。

仔细看我上面举的例子你就会明白了,一般在终端中做命令替换是有必要的,这样可以将一个命令的结果做为另一个命令的参数。

比如书中的这个例子我认为很不错,就是要发一个邮件信息给当前已登录的所有用户:

who命令可以输出当前所有在线的人的信息

root                ty1   Oct 13 12:05

simaopig        ty1   Oct 13 01:05

xiaoxiaozi       ty1   Oct 13 09:05

这里中间的是由空格分隔的,而不TAB。因为这里我们只需要第一列的值,即用户名。

所以,我们可以在cut命令中使用空格来作为域分隔符来处理

所以,获得所有登录的人的名字的命令就是:

#f1表示第一例
who | cut -d  '    '  -f1

同理,为这些人发邮件的命令就是

#把括号内命令生成的结果先执行,然后作为mail的参数
mail $(who | cut -d '    ' -f1
  1. 还没有评论
评论提交中, 请稍候...

留言

可以使用的标签: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
Trackbacks & Pingbacks ( 0 )
  1. 还没有 trackbacks