大龙的博客

常用链接

统计

最新评论

Shell编程中eval和几个内部命令的解释

bash命令解释套装程序包含了一些内部命令。内部命令在目录列表时是看不见的,它们由Shell本身提供。常用的内部命令有:echo, eval, exec, export, readonly, read, shift, wait和点(.)。
  1.echo
  命令格式:echo arg
  功能:在屏幕上显示出由arg指定的字串。
  2.eval 花开 
  命令格式:eval args
    命令eval的功能是將参数(args)读入 C shell 中,然后在加以执行。例如:

         101 # set vcom = 'ls -l ; date'
         102 # $vcom
             ; not found
             date not found

在命令 101,vcom 是 'ls -l ; date'。当我们來执行“$vocm”,会出现错误信息“; not found”及“date not found”。原因是 C shell 在语法解析中无法理解特殊符号所造成的。符号“;”和命令 date 被理解成是命令 ls -l 后的“文件名称”。所以才会有“not found”。命令eval 便是用來解决这种情況:

         103 # eval $vcom
             total 1
             -r--r--r-- 1 akira 1296 Oct 12 07:29 search.c
             Tue Oct 18 12:13:53 CST 1994

其实在作法上使用命令 eval 便相当于以下的用法:

         104 % echo $vcom | csh
              total 1
              -r--r--r-- 1 akira 1296 Oct 12 07:29 search.c
              Tue Oct 18 12:13:54 CST 1994

如果你是在 C shell 下,你也可使用以下的方式:

         /bin/csh << EOF
         $vcom
         EOF

另外在使用命令 eval 上也有技巧,看一互換的技巧:

         % set a = '$b'
         % set b = 'swapping'
         % echo $a
         $b
         %eval echo $a
         swapping

3.exec
  命令格式:exec命令参数
  功能:当Shell执行到exec语句时,不会去创建新的子进程,而是转去执行指定的命令,当指定的命令执行完时,该进程(也就是最初的Shell)就终止了,所以Shell程序中exec后面的语句将不再被执行。
  4.export
  命令格式:export变量名 或:export变量名=变量值
  功能:Shell可以用export把它的变量向下带入子Shell,从而让子进程继承父进程中的环境变量。但子Shell不能用export把它的变量向上带入父Shell。
  注意:不带任何变量名的export语句将显示出当前所有的export变量。
  5.readonly
  命令格式:readonly变量名
  功能:将一个用户定义的Shell变量标识为不可变。不带任何参数的readonly命令将显示出所有只读的Shell变量。
  6.read
  命令格式:read变量名表
  功能:从标准输入设备读入一行,分解成若干字,赋值给Shell程序内部定义的变量。
  7.shift语句
  功能:shift语句按如下方式重新命名所有的位置参数变量,即$2成为$1,$3成为$2…在程序中每使用一次shift语句,都使所有的位置参数依次向左移动一个位置,并使位置参数$#减1,直到减到0为止。
  8.wait
  功能:使Shell等待在后台启动的所有子进程结束。wait的返回值总是真。
  9.exit
  功能:退出Shell程序。在exit之后可有选择地指定一个数位作为返回状态。
  10.“.”(点)
  命令格式:. Shell程序文件名
  功能:使Shell读入指定的Shell程序文件并依次执行文件中的所有语句。

posted on 2011-01-01 21:27 大龙 阅读(5060) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理