Skip to content

Commit b3a2d3e

Browse files
committed
docs: edit script
1 parent 7f8a791 commit b3a2d3e

1 file changed

Lines changed: 76 additions & 3 deletions

File tree

docs/script.md

Lines changed: 76 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,21 +69,65 @@ echo 'Hello World!'
6969
echo 'Hello World!' # 井号后面的部分也是注释
7070
```
7171

72+
## 启动顺序
73+
74+
每一个 Bash 脚本启动的时候,会读取一系列配置文件。这分成登录 Shell 和非登录 Shell 两种情况。
75+
76+
登录 Shell 读取配置文件的顺序如下。
77+
78+
- `/etc/profile`:所有用户的全局配置。
79+
- `~/.bash_profile`:用户的个人配置,可用于扩展或覆盖全局配置。
80+
- `~/.bash_login`:如果找不到`~/.bash_profile`,Bash 则尝试读取此文件。
81+
- `~/.profile`:如果找不到`~/.bash_profile``~/.bash_login`,Bash 尝试读取此文件。
82+
83+
非登录 Shell 读取配置文件的顺序如下。
84+
85+
- `/etc/bash.bashrc`:所有用户的全局配置。
86+
- `~/.bashrc`:用户的个人配置,可用于扩展或覆盖全局配置。
87+
88+
除了读取上面的配置文件之外,非登录 Shell 还会从它的父进程继承环境变量。
89+
90+
普通用户对 Shell 的配置修改,一般写在`~/.bashrc`文件里面。非登录 Shell 默认会读取这个文件,而登录 Shell 大多数情况下也会通过变通方法读取该文件。比如,`.bash_profile`文件通常会像下面这样写。
91+
92+
```bash
93+
# .bash_profile
94+
# Get the aliases and functions
95+
if [ -f ~/.bashrc ]; then
96+
. ~/.bashrc
97+
fi
98+
99+
# User specific environment and startup programs
100+
PATH=$PATH:$HOME/bin
101+
export PATH
102+
```
103+
104+
上面代码中,如果`~/.bashrc`文件存在,就会执行这个文件。这就是“登录 Shell”读取`~/.bashrc`的方法。另外,最后两行的作用是在环境变量`$PATH`里面,追加`$HOME/bin`目录,然后`export`命令的作用是将这个变量输出给当前 Shell 的所有子进程。
105+
72106
## 别名
73107

74-
`alias`命令用来为命令指定别名
108+
`alias`命令用来为一个命令指定别名
75109

76110
```bash
77111
alias NAME=DEFINITION
78112
```
79113

114+
上面命令中,`Name`是新命令的名称,`DEFINITION`是这个新命令对应的要执行的事情。
115+
80116
下面的例子是指定`ls -ltr`命令的别名为`lt`,运行结果是按照修改时间(`-t`)的倒序(`-r`),列出文件的详细信息(`-l`)。
81117

82118
```bash
83119
$ alias lt='ls -ltr'
84120
```
85121

86-
指定别名以后,就可以像使用其他命令一样使用别名。
122+
指定别名以后,就可以像使用其他命令一样使用别名。一般来说,都会把常用的别名写在`~/.bashrc`的末尾。
123+
124+
下面是定义一个`today`命令的写法。
125+
126+
```bash
127+
$ alias today='date +"%A, %B %-d, %Y"'
128+
$ today
129+
星期一, 一月 6, 2020
130+
```
87131

88132
直接调用`alias`命令,可以显示所有别名。
89133

@@ -97,9 +141,38 @@ $ alias
97141
$ unalias lt
98142
```
99143

144+
## 程序
145+
146+
别名只适合封装简单的单个命令,如果要封装复杂的多行命令,就需要 Bash 函数。
147+
148+
Bash 函数的语法如下。
149+
150+
```bash
151+
fn() {
152+
# codes
153+
}
154+
```
155+
156+
上面命令中,`fn`是自定义的函数名,函数代码就写在大括号之中。
157+
158+
下面是显示当前日期时间的函数。
159+
160+
```bash
161+
today() {
162+
echo -n "Today's date is: "
163+
date +"%A, %B %-d, %Y"
164+
}
165+
```
166+
167+
这个函数可以写在脚本文件里面,调用的时候直接写函数名即可。
168+
169+
```bash
170+
$ today
171+
```
172+
100173
## env 命令
101174

102-
`env`命令总是在`/usr/bin`里面,它会在指定环境之中运行一个程序`/usr/bin/env bash`的意思是,找到`bash`的可执行文件。
175+
`env`命令的可执行文件总是在`/usr/bin`目录里面,作用是在指定环境之中运行一个程序`/usr/bin/env bash`的意思是,找到`bash`的可执行文件,然后在 Bash 环境中运行脚本
103176

104177
相应的,如果要执行Node脚本,可以写成下面这样。
105178

0 commit comments

Comments
 (0)