背景

Bourne Again Shell 基于一个早期的UNIX shell即Bourne Shell。

初始化文件

启动shell运行的初始化文件取决于shell是登陆shell还是非登陆shell的交互式shell或者非交互shell(也就是脚本)

登陆shell

/ect/profile 首先执行其中命令,通过设置该文件超级用户可以为全系统内的所有bash用户建立默认特征

.bash_pro-file, .bash_login和.profile 然后shell一次查找这三个文件,并执行她找到的首个文件中的命令。可以将命令放在这些文件中的某个里以覆盖掉/etc/profile文件中的默认设置。

.bash_logout 注销时执行的名利。

交互式非登陆shell

这种shell不回执行前面提到的初始化文件中的命令,但是从登陆shell中继承了这些由初始化文件设置的shell变量。

/etc/bashrc 尽管不是通过bash直接调用,许多~/.bashrc还是调用/etc/bashrc。这种安排可以让超级用户为全系统内的非登陆bash shell设置默认特性。

.bashrc 交互式非登陆shell执行~/.bashrc文件中的命令,而登陆shell的初始化文件通常会调用他, 这样登陆和非登陆shell都可以使用.bashrc中的命令。

非交互shell

不执行前面描述的初始化文件中的命令。然而从登陆shell继承变量。

内置的符号命令
符号 命令
() 子shell
$() 命令替换
(()) 算术表达式计算,let的同义词(当被扩起来的值中包含等号时使用)
$(()) 算数展开(不用于被扩起来的值中包含等号的情形)
[] test命令
[[]] 条件表达式,类似于[],但是添加了字符串比较
重定向

文件描述符 0-标准输入 1-标准输出 2-标准错误输出
将命令的标准输出重定向时,发送到标准错误输出的输出结果将不受影响,类似的,当使用管道发送标准输出时,标准输出结果也不会收到影响。
复制文件描述符 如下例子,1>将标准输出重定向hold。然后2>&1声明文件描述符2为文件描述符1的副本。这样做的结果是,标准输出和标准错误输出均被重定向到文件hold

cat x y 1> hold 2>&1
如果顺序颠倒,标准错误输出已经拷贝了标准输出到一个副本,这样只有标准输出被重定向到文件hold

shell脚本中经常将echo的输出发送到标准错误输出,1>&2

#!指定shell

#!后的字符作为执行脚本的命令解释器的绝对路径名,可指定其他shell来执行脚本。

tips:

  • ‘.’或source用来执行脚本