Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1213251
  • 博文数量: 261
  • 博客积分: 4196
  • 博客等级: 上校
  • 技术积分: 3410
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-17 17:05
文章分类

全部博文(261)

文章存档

2018年(1)

2017年(22)

2016年(2)

2015年(8)

2014年(27)

2013年(40)

2012年(161)

分类: LINUX

2012-02-28 09:55:56

参考:http://www.ibm.com/developerworks/cn/linux/shell/bash/bash-2/index.html

大多数时候,虽然可以不使用括起字符串和字符串变量的双引号,但这并不是好主意。为什么呢?因为如果环境变量中恰巧有一个空格或制表键,bash 将无法分辨,从而无法正常工作。这里有一个错误的比较示例:

if [ $myvar = "foo bar oni" ]
then
echo "yes"
fi
在上例中,如果 myvar 等于 "foo",则代码将按预想工作,不进行打印。但是,如果 myvar 等于 "foo bar oni",则代码将因以下错误失败:
[: too many arguments

在这种情况下,"$myvar"(等于 "foo bar oni")中的空格迷惑了 bash。bash 扩展 "$myvar" 之后,代码如下:

[ foo bar oni = "foo bar oni" ]
因为环境变量没放在双引号中,所以 bash 认为方括号中的自变量过多。可以用双引号将字符串自变量括起来消除该问题。请记住,如果养成将所有字符串自变量用双引号括起的习惯,将除去很多类似的编程错误。"foo bar oni" 比较 应该写成:
if [ "$myvar" = "foo bar oni" ]
then
echo "yes"
fi
更多引用细节

如果要扩展环境变量,则必须将它们用 双引号、而不是单引号括起。单引号 禁用 变量(和历史)扩展。

查看shell种类:s -l /bin/sh 连接到哪个文件。一般有csh   ksh   bash  dash  cash ……
shell是计算机用来解释你输入的命令然后决定进行何种处理的程序。shell也可以在非交互模式下调用。举个例子,可以把一些要输入的命令预先存放在 文本文件里(叫做shell脚本)然后执行该文件。可以把shell看作是DOS下面的command.com(命令行解释器),而shell脚本就象是 DOS的批处理文件(*.bat)。和DOS相比较,shell的功能要先进和丰富得多。

在Linux系统下有几个不同的shell(如果你全部安装):


bash          "Bourne Again" shell

sh            Bourne shell,在很多UNIX下是标准的shell
csh           C shell,和C编程语言语法相近,在大部分UNIX下有效
pdksh        public domain Korn shell
tcsh          微型 C shell, 在小的系统里经常使用
sash          单机版本的shell,当文件库无效的时候可以使用
ash, zsh等    可能还有更多其他版本

Linux系统下缺省的shell是bash(你的计算机上应该也是),这是一个非常出色和标准的shell,象我这样的Linux新手实在想不出有什么 理由要修改它。bash不仅对UNIX下应用广泛的Bourne shell后向兼容,而且合并了其他shell的一些非常有用的特性。从一个新手的角度来看,出于历史原因,一些既存的shell脚本可能要求特定的 shell程序才能够运行,为了保证shell脚本充分的后向兼容性,Linux保留了不同类型的shell。一些shell可能很有用,比如,如果你准 备给一些小型“嵌入式设备”写程序,那么你可能需要tcsh(微型C shell)。


你可以检查你现在正在运行的shell :


echo $SHELL


如果你想要试一下其他类型的shell,举个例子 :


tcsh


该命令将启动微型C shell。结束使用,输入:


exit


这将回到你原来的shell(在第一个shell下输入exit会把你退出系统)。你可以通过显示环境变量“shell level”(shell层次)看看你当前环境下的shell的堆栈:


echo $SHLVL


在以上的命令里, “$”表示“扩展shell环境变量”, “SHLVL”是“变量名”,“echo”是屏幕输出命令。


每个用户的缺省shell在文件/etc/passwd最后一个字段指定。如果你真的想要修改它,(要求root用户)把你想要的shell替换文件里的 “/bin/bash”。

 shell发展历史.doc  
阅读(1033) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~