十年专注于品牌网站建设 十年专注于品牌网站建设,低调、高逼格、有情怀的网络应用服务商!
南昌百恒网络微信公众号 扫一扫关注
小程序
tel-icon全国服务热线:400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络微信小程序

百恒网络

南昌百恒网络

dash shell的特性

百恒网络 2017-04-08 246

虽然bash shell是Linux发行版中最广泛使用的shell,但它并不是唯一的选择。现在基本已经了解了标准的Linux bash shell,知道了能用它做什么,是时候看看Linux世界中的其他一些shell了。接下来南昌APP制作开发公司小编将会介绍另外两个可能会碰到的shell,以及它们与bash shell有什么区别。
       1.什么是 dash shell
       Debian的dash shell的历史很有趣。它是ash shell的直系后代,而ash shell则是Unix系统上原来的Bourne shell的简化版本。Kenneth Almquist为Unix系统开发了一个Bourne shell的简化版本,并将它命名为Almquist shell,缩写为ash。ash shell最早的版本体积极小、速度奇快,但缺乏许多高级功能,比如命令行编辑或命令使用记录功能,这使它很难用作交互式shell。
       NetBSD Unix操作系统移植了ash shell,直到今天依然将它用作默认shell。NetBSD开发人员对ash shell进行了定制,增加了一些新的功能,使它更接近Bourne shell。新功能包括使用emacs
       和vi编辑器命令进行命令行编辑,利用历史命令来查看先前输入的命令。ash shell的这个版本也被FreeBSD操作系统用作默认登录shell。
       Debian Linux发行版创建了它自己的ash shell版本(称Debian ash,或dash)以供自用。dash复制了ash shell的NetBSD版本的大多数功能,提供了一些高级命令行编辑能力。
       但令人不解的是,实际上dash shell在许多基于Debian的Linux发行版中并不是默认的shell。由于bash shell在Linux中的流行,大多数基于Debian的Linux发行版将bash shell用作普通登录shell,而只将dash shell作为安装脚本的快速启动shell,用于安装发行版文件。
       流行的Ubuntu发行版是例外。这经常让shell脚本程序员摸不清头脑,给Linux环境中运行shell脚本带来了很多问题。Ubuntu Linux发行版将bash shell用作默认的交互shell,但dash shell用作默认的 /bin/sh  shell。这个“特性”着实让shell脚本程序员一头雾水。
       每个shell脚本的起始行都必须声明脚本所用的shell。在bash shell脚本中,我们一直用下面的行。
#!/bin/bash
       它会告诉shell使用位于/bin/bash的shell程序来执行脚本。在Unix世界中,默认shell一直是/bin/sh。许多熟悉Unix环境的shell脚本程序员会将这种用法带到他们的Linux shell脚本中。
#!/bin/sh
       在大多数Linux发行版上,/bin/sh文件是链接到shel程序/bin/bash的一个符号链接。这样你就可以在无需修改的情况下,轻松地将为Unix Bourne shell设计的shell脚本移植到Linux环境中。
       很遗憾,Ubuntu Linux发行版将/bin/sh文件链接到了shell程序/bin/dash。由于dash shell只含有原来Bourne shell中的一部分命令,这可能会(而且经常会)让有些shell脚本无法正确工作。
       以后将逐步了解dash shell的基础知识以及它跟bash shell的区别。如果你编写的bash shell脚本可能要在Ubuntu环境中运行,了解这些内容就尤其重要。
       2.dash shell 的特性
       尽管bash shell和dash shell都以Bourne shell为样板,但它们还是有一些差别的。在深入了解shell脚本编程特性之前,将会带你了解Debian dash shell的一些特性,以便让你熟悉dash shell的工作方式。
       2.1 dash 命令行参数
       dash shell使用命令行参数来控制其行为。下列表中列出了命令行参数,并介绍了每个参数的用途。

dash命令行参数

dash命令行参数

       除了原先的ash shell的命令行参数外,Debian还加入了另外一些命令行参数。 -E 和 -V 命令行参数会启用dash shell特有的命令行编辑功能。
       -E 命令行参数允许使用emacs编辑器命令进行命令行文本编辑。你可以使用所有的emacs命令来处理一行中的文本,其中会用到Ctrl和Meta组合键。
       -V 命令行参数允许使用vi编辑器命令进行命令行文本编辑。这个功能允许用Esc键在普通模式和vi编辑器模式之间切换。当你在vi模式中时,可以用标准的vi编辑器命令(例如, x 删除一个字符, i 插入文本)。完成命令行编辑后,必须再次按下Esc键退出vi编辑器模式。
       2.2 dash 环境变量
       dash shell用相当多的默认环境变量来记录信息,你也可以创建自己的环境变量。将会介绍环境变量以及dash如何处理它们。
       (1). 默认环境变量
       dash环境变量跟bash环境变量很像(参见第6章)。这绝非偶然。别忘了dash shell和bash shell都是Bourne shell的扩展版,两者都吸收了很多Bourne shell的特性。不过,由于dash的目标是简洁,因此它的环境变量比bash shell少多了。在dash shell环境中编写脚本时要记住这点。
       dash shell用 set 命令来显示环境变量。
$set
COLORTERM=''
DESKTOP_SESSION='default'
DISPLAY=':0.0'
DM_CONTROL='/var/run/xdmctl'
GS_LIB='/home/atest/.fonts'
HOME='/home/atest'
IFS='
'
KDEROOTHOME='/root/.kde'
KDE_FULL_SESSION='true'
KDE_MULTIHEAD='false'
KONSOLE_DCOP='DCOPRef(konsole-5293,konsole)'
KONSOLE_DCOP_SESSION='DCOPRef(konsole-5293,session-1)'
LANG='en_US'
LANGUAGE='en'
LC_ALL='en_US'
LOGNAME='atest'
OPTIND='1'
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
PPID='5293'
PS1='$ '
PS2='> '
PS4='+ '
PWD='/home/atest'
SESSION_MANAGER='local/testbox:/tmp/.ICE-unix/5051'
SHELL='/bin/dash'
SHLVL='1'
TERM='xterm'
USER='atest'
XCURSOR_THEME='default'
_='ash'
$
       这和你的默认dash shell环境很可能会不一样,因为不同的Linux发行版在登录时分配的默认环境变量不同。
       (2). 位置参数
       除了默认环境变量,dash shell还给命令行上定义的参数分配了特殊变量。下面是dash shell中用到的位置参数变量。

       所有dash的位置参数都类似于bash shell中的位置参数。可以在shell脚本中使用位置参数,就和bash shell中的用法一样。
       (3). 用户自定义的环境变量
       dash shell还允许定义自己的环境变量。与bash一样,你可以在命令行上用赋值语句来定义新的环境变量。
$ testing=10 ; export testing
$ echo $testing
10
$
       如果不用 export 命令,用户自定义的环境变量就只在当shell或进程中可见。
       警告 dash变量和bash变量之间有一个巨大的差异。dash shell不支持数组。这个小特性给高级shell脚本开发人员带来了各种问题。
       2.3 dash 内建命令
       跟bash shell一样,dash shell含有一组它能识别的内建命令。你可以在命令行界面上直接使用这些命令,或者将其放到shell脚本中。表中列出了dash shell的内建命令。
dash shell内建命令

dash shell内建命令

dash shell内建命令

       可能在bash shell中已经认识了上面的所有内建命令。dash shell支持许多和bash shell一样的内建命令。会注意到其中没有操作命令历史记录或目录栈的命令。dash shell不支持这些特性。
       本文仅限内部技术人员学习交流,不得作于其他商业用途.希望此文对广大技人员有所帮助。原创文章出自:南昌APP制作开发公司-百恒网络


400-680-9298,0791-88117053
扫一扫关注百恒网络微信公众号
扫一扫打开百恒网络小程序

欢迎您的光顾,我们将竭诚为您服务×

售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售前咨询 售前咨询
 
售后服务 售后服务
 
售后服务 售后服务
 
备案专线 备案专线
 
×