zoukankan      html  css  js  c++  java
  • bash

    bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell —
    这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)。
    Bourne shell是一个早期的重要shell,由史蒂夫·伯恩在1978年前后编写,并同Version 7 Unix一起发布。
    bash则在1987年由布莱恩·福克斯创造。在1990年,Chet Ramey成为了主要的维护者。

    概念
    Bash (GNU Bourne-Again Shell) 是许多Linux发行版的默认Shell 。
    事实上,还有许多传统UNIX上用的Shell,例如tcsh、csh、ash、bsh、ksh等等,
    Shell Script大致都类同,当您学会一种Shell以后,其它的Shell会很快就上手,
    大多数的时候,一个Shell Script通常可以在很多种Shell上使用。

    bash是大多数Linux系统以及Mac OS X默认的shell,它能运行于大多数类Unix风格的操作系统之上,
    甚至被移植到了Microsoft Windows上的Cygwin系统中,以实现Windows的POSIX虚拟接口。
    此外,它也被DJGPP项目移植到了MS-DOS上。

    bash的命令语法是Bourne shell命令语法的超集。
    数量庞大的Bourne shell脚本大多不经修改即可以在bash中执行,只有使用了Bourne的特殊变量或内置命令的脚本才需要修改。
    bash的命令语法很多来自Korn shell (ksh) 和 C shell (csh),
    例如命令行编辑,命令历史,目录栈,$RANDOM 和 $PPID 变量,以及POSIX的命令置换语法: $(...)。
    作为一个交互式的shell,按下TAB键即可自动补全已部分输入的程序名、文件名、变量名等等

    环境变量
    在 bash 和几乎所有其它 shell中,用户可以定义环境变量,这些环境变量在以 ASCII字符串存储。
    环境变量的最便利之处在于:它们是UNIX进程模型的标准部分。
    这意味着:环境变量不仅由shell脚本独用,而且还可以由编译过的标准程序使用。
    当在 bash中“导出”环境变量时,以后运行的任何程序,不管是不是 shell脚本,都可以读取设置。
    一个很好的例子是 vipw 命令,它通常允许 root用户编辑系统口令文件。
    通过将 EDITOR环境变量设置成喜爱的文本编辑器名称,可以配置vipw,使其使用该编辑器,而不使用 vi,如果习惯于 xemacs 而确实不喜欢vi,那么这是很便利的。

    BASH 的基本语法
    · 最简单的例子 —— Hello World!
    · 关于输入、输出和错误输出
    · BASH 中对变量的规定(与 C 语言的异同)
    · BASH 中的基本流程控制语法
    · 函数的使用

    在 bash 中定义环境变量的标准方法是:
    $ myvar='This is my environment variable!'
    以上命令定义了一个名为 "myvar" 的环境变量,并包含字符串 "This ismy environment variable!"。
    以上有几点注意事项:

    第一,在等号 "="的两边没有空格,任何空格将导致错误(试一下看看)。
    第二个件要注意的事是:虽然在定义一个字时可以省略引号,但是当定义的环境变量值多于一个字时(包含空格或制表键),引号是必须的。
    注意:有关如何在 bash 中使用引号的非常详尽的信息,请参阅 bash帮助页面中的“引用”一节。特殊字符序列由其它值“扩展”(替换)确实使bash 中字符串的处理变得复杂。
    第三,虽然通常可以用双引号来替代单引号,但在上例中,这样做会导致错误。为什么呢?因为使用单引号禁用了称为扩展的bash 特性,其中,特殊字符和字符系列由值替换。例如,"!"字符是历史扩展字符,bash通常将其替换为前面输入的命令。
    实际使用环境变量。这有一个例子:
    $ echo $myvarThis is my environment variable!
    通过在环境变量的前面加上一个 $,可以使 bash 用 myvar的值替换它。这在 bash术语中叫做“变量扩展”。但是,这样做将怎样:
    $ echo foo$myvarbarfoo
    我们希望回显 "fooThis is my environmentvariable!bar",但却不是这样。错在哪里?简单地说,bash变量扩展设施陷入了困惑。它无法识别要扩展哪一个变量:$m、$my、$myvar、$myvarbar 等等。如何更明确清楚地告述 bash引用哪一个变量?试一下这个:
    $ echo foo${myvar}barfooThis is my environment variable!bar
    如您所见,当环境变量没有与周围文本明显分开时,可以用花括号将它括起。虽然$myvar 可以更快输入,并且在大多数情况下正确工作,
    但 ${myvar}却能在几乎所有情况下正确通过语法分析。
    除此之外,二者相同,将在本系列的余下部分看到变量扩展的两种形式。
    请记住:当环境变量没有用空白(空格或制表键)与周围文本分开时,请使用更明确的花括号形式。
    回想一下,我们还提到过可以“导出”变量。
    当导出环境变量时,它可以自动地由以后运行的任何脚本或可执行程序环境使用。
    shell脚本可以使用 shell 的内置环境变量支持“到达”环境变量,而 C程序可以使用 getenv() 函数调用。这里有一些 C代码示例,输入并编译它们 -- 它将帮助我们从 C的角度理解环境变量:
    myvar.c -- 样本环境变量
    C 程序
    #include <stdio.h>
    #include <stdlib.h>
    int main(void)
    { char *myenvvar=getenv("EDITOR");
    printf("The editor environment variable is set to %s ",myenvvar);}

    参数说明
    -c字符串
    若用-c参数,则bash从字符串中读入命令,如果字符串后还有变量就被设定为从$0开始的位置参数。
    -i
    若用-i参数,则bash是交互的。
    -s
    若用-s参数,则bash从标准输入中读入命令(在执行完-c带的命令之后。)直到输入exit。
    -
    单一的号表明参数执行完毕,并且屏蔽此后所跟参数,后面的所有变量都被看作是文件名。
    -norc
    如果bash是交互的,则不执行个人初始化文件:-/.bashrc,如果bash作为sh来运行,这个参数缺省是关闭的。
    -noprofile
    不执行系统范围的启动文件/etc/profile也不执行个人的启动文件-/.bash_profile,-/.bash_login或-/.profile,缺省情况下,bash作为登录的shell时以这些文件作为启动文件。
    --refile文件名
    如果bash是交互的,则以此文件作为bash的启动文件。替代-/.bashrc。
    -version
    在bash开始时显示此bash的版本号。
    -quiet
    不显示版本号和其他信息,这是缺省值。
    -login
    激活bash,伪装为登录shell。
    -nobraceexpansion
    不执行大括号扩展。
    -nolineediting
    在交互状态下不使用GNU的readline库去读取命令。即取消了命令行编辑功能。
    -posix
    改变bash的行为,使其符合Posix 1003.2规定的标准。

    备注:随笔中内容来源于网上资料整理,仅供参考。

  • 相关阅读:
    小型数据库的选择(轻量级数据库)(转)
    MSSOAP与WebService
    SOAP和WSDL的一些必要知识 (转)
    几个小型数据库的比较
    常用的嵌入式数据库的比较
    webservice Quiz(Wsdl &Soap)
    ASP.Net获取文件的路径
    SOAP=RPC+HTTP+XML
    记录几个IP查询接口
    COM+组件注册方法
  • 原文地址:https://www.cnblogs.com/Alanf/p/7741590.html
Copyright © 2011-2022 走看看