首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>编程开发>shell>正文

Sobell谈bash和Linux命令行命运

http://www.oklinux.cn  2007-04-21  来源:           会员收藏  游客收藏  【 】 
 LinuxPlanet(以下简称LP):命令行死亡了吗?

  答:不,根本就没有死亡。对于某些人和执行某些任务来说,使用图形界面更容易和更简洁。这实际上依赖于你要做什么和你是谁。图形用户界面和命令行之间的区别就像自动变档与变速杆一样。我使用变速杆是因为它能够让我更好地控制汽车,让我更多地感觉到汽车在做什么以及汽车是如何做到的。

  当然,这个讨论假设你是以系统管理员的级别操作文件的。有些应用程序有用户图形界面,有些应用程序也许没有这种界面,或者只有非常原始的命令行界面。设法从命令行运行这些应用程序是没有意义的。

  对命令行有好处的一件事情是它能够让你访问数百个工具软件。在命令行上面,你可以使用一个管道把工具软件结合在一起执行一项单个工具软件无法完成的工作。下面是从我的“Linux命令、编辑器和外壳编程实践指南”一书中摘录的部分内容,谈了有关这些管道及其连接的过程:

  “一个过程是Linux执行一个命令。过程之间的通信是UNIX/Linux的验证证明之一。一个通道(书写为垂直的直线“|”,在命令行中或者键盘上是一个垂直的实线)提供了这种通信最简单的方式。简单地说,一个通道接受一个工具软件的输出,然后把那个输出输入到其它工具软件。使用UNIX/Linux的词汇,这个通道接受了一个过程的标准输出,并把这个标准的输出作为另一个过程的标准输入。一个过程在屏幕上显示的大多数内容将发送给标准的输出。如果你没有重新定向这个输出,这个输出就在屏幕上显示出来。使用一个通道,你可以重新定向这个输出,这样它就变成了另一个工具软件的标准的输入。”

  例如,你可以把列出目录中文件的命令“ls”与计算一个目录中的文件和字数的命令“wc -w”结合在一起使用:

  $ ls | wc -w

  45

  在Linux系统管理领域,用户图形界面通常是建在命令行工具之外的,因此,你不能得到用户图形界面工具的好处。当然,除非你能使用鼠标。你在命令行下面能够完成的工作在图形用户界面系统管理工具中经常无法完成。

  Bourne和Bourne外壳程序

  LP:你能讨论一下bash(Bourne Again Shell)并且解释一下它与原来的Bourne外壳程序有什么区别吗?

  答:这个外壳程序(shell)是命令行的解释程序,它分析你输入的命令行并且调用你申请的程序,并且把你在命令行中输入的参数传递给这个程序。这个外壳程序也是一种高级的编程语言。bash是许多Linux系统默认的外壳程序。大多数Linux发布版软件还包含其它的外壳程序,甚至还有更多的外壳程序可供下载。

  由GNU计划编写的bash包含了原始版本的Bourne外壳程序,那是AT&T公司发布的UNIX下面的第一个外壳程序。我曾经建议读者考虑使用C外壳程序作为他们的交互式外壳程序,因为它拥有原始版本的Bourne外壳程序所没有的一些重要功能。目前,bash 拥有所有这些功能,而且某些bash还包括命令完成、历史(这样你可以编辑和重复以前的命令)和工作控制(允许你在前端和后端之间转移工作)等功能。当然,你可以使用bash编写外壳程序脚本(批处理文件)。

  许多Linux系统外壳程序脚本是从“#!/bin/sh”开始的。这一行命令让脚本在外壳程序下运行。这个外壳程序不是Bourne外壳程序的一部分,而是一个指向bash的链接。

  由于具有长期的和成功的历史,原始的Bourne外壳程序一直用来编写许多帮助管理Unix系统的外壳脚本。其中有些在Linux中出现的脚本称作 bash脚本。虽然bash脚本包含了许多原始的Bourne外壳程序中所没有的扩展功能和特性,但是,bash保持了对原始的Bourne外壳程序的兼容,因此你可以在bash下面运行Bourne外壳脚本。原始的Bourne外壳程序在Unix系统中称作sh。在Linux系统中,sh是指向bash 的一个符号链接,以确保需要Bourne外壳程序的脚本能够运行。当被称作sh的时候,bash尽最大的努力效仿原始的Bourne外壳程序。

  LP:你会建议Linux的新手学习bash还是学习TC外壳程序?

  答:如果你是一个顽固的C语言外壳程序员,你可以继续使用TC外壳程序(tcsh)。否则,我建议你使用bash。几乎所有的控制Linux的管理外壳脚本程序都是由bash运行的。因此,如果你学习bash,你将能够很容易地理解和修改这些脚本。

  awk

  LP:你为什么使用awk?

  答:这是一个很好的问题,特别是在很多人直接使用Perl语言的时候。这个工具软件简单而功能强大。在Perl出现之前,awk一直是操作文件的工具之一。目前,awk仍是有用的。GNU版本的awk称作gawk,有一些新的功能,使其成为一个非常有用的工具。下面是我的书中讨论的有关如何让gawk与协作进程之间相互通信的部分内容:

  协作进程:双向I/O

  协作进程是与另一个进程并行运行的一个进程。从3.1版本开始,gawk能够启动一个协作进程直接与后台进程交换信息。当你在客户机/服务器环境中工作,设置一个SQL前端和后端或者在一个网络上与一个远程系统交换数据的时候,协作进程是很有用的。gawk句法通过在启动后台进程的程序名称前面添加一个运算符号“|&”来识别一个协助进程。

  一个协助进程指令必须是一个过滤器(也就是说,它读取标准的输入并且写入标准的输出),必须在完成一行输出之后就进行刷新,而不是积累很多行很以后再进行输出。当一个指令作为协作进程被启动之后,它将通过一个双向的通道与一个gawk程序连接,这样,你就可以对这个协作进程进行读写操作。

  当与tr工具一起使用时,这个工具在完成每一行指令之后不刷新其输出。这个“to_upper”外壳脚本是不刷新其输出的tr指令的外壳。这个过滤器可以作为协作进程运行。对于读取的每一行指令,“to_upper”写入这些行,并且把这些行翻译成大写字母和标准的输出。如果你要“to_upper”显示调试的输出,可删除“set -x”前面的“#”。

  $ cat to_upper

  #!/bin/bash

  #set -x

  while read arg

  do

  echo "$arg" | tr '[a-z]' '[A-Z]'

  done

  $ echo abcdef | to_upper

  ABCDEF

  g6程序启动“to_upper”作为一个协作进程。这个gawk程序读取标准的输入或者在命令行中指定的一个文件,把这个输入翻译成大写字母,并把翻译的数据写入一个标准的输出。
共2页: 上一页 1 [2] 下一页

上一篇: Linux shell介绍,第四章   下一篇: 用shell写守护进程


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
· 用shell写守护进程
· Linux shell介绍,第四章
· Linux shell介绍,第三章
· Linux Shell介绍,第二章
· Linux Shell介绍,第一章
· bash字符串匹配的用法
· Bash For Beginner's Guide (Bash新手指南)中文版下
· shell是什么
· 新手看招 Linux Shell编程简单一例
· Shell编程新手入门 Linux解释器原理
· 在Linux系统中批量建立用户的shell
· Linux中让Tomcat5自动启动服务脚本
· TCSH shell 编程入门
· shell 脚本,怎么样可以限定等待多长时间后执行。
· sed 中的变量问题(含有/符号),如何替换
· 一个小脚本,帮助你清除无用的rpm包
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Linux下的定时器:alarm()与setitimer(
· Linux和DOS的FORMAT命令区别[参考篇
· linux指令大全[2][注]来源于天津Lin
· linux指令大全[1][注]来源于天津Lin
· linux指令大全[3][注]来源于天津Lin
· 最常用的基本操作命令[推荐篇]
· 文件和目录操作相关命令详解
· 文件内容查询命令
· 文件内容统计命令
· 文件的复制、删除和移动命令
· 目录的创建与删除命令
· 文本处理sort命令
  阅读排行
·常用Linux Shell技巧集锦
·shell编程实例三:一个简单的目录菜单
·Shell编程基础
·Process priority and control on AIX
·Shell 编程实例集锦
·Shell脚本调试技术
·Bash 实例:探讨 ebuild 系统
·linux shell 编程基础
·Linux快速编辑Shell命令行
·Linux下的shell编程入门
·UNIX和Linux Shell正则表达式语法介绍
·使用 Bash shell 脚本进行功能测试
· Bash For Beginner's Guide (Bash新手
· bash字符串匹配的用法
·Linux操作系统下使用yum升级的详细方法
网摘收藏: