背景
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用来执行脚本