-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy path11_Learn_bash
More file actions
284 lines (199 loc) · 9.77 KB
/
11_Learn_bash
File metadata and controls
284 lines (199 loc) · 9.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
## Bash 变量的设置规则
1. 变量与变量内容以=连接
2. 等号两边不能有空格
3. 变量名称只能是英文字母和数字,不能以数字开头
4. (类似于PHP)变量中的双引号引起来的字符会被转义成原其本身内容,单引号则不会转义
5. 可使用转义字符:\
6. 可以使用反单引号获得其它命令的结果。如:`$PATH`
7. 增加变量内容时,可使用 $变量名称 或 $(变量名称) 的方式累加。如
PATH="$PATH":/home/bin
8. 若该变量需要在其它子进程使用(即变成环境变量),可使用export 变量名。如: export PATH
9. 通常默认变量使用大写,自定义变量使用小写
10. 可用 unset 变量名 的形式取消变量名的设置
----------------------------------------------------
## 查阅环境变量命令:env
env 表示 environment
## 查阅所有变量命令:set
----------------------------------------------------
## 环境变量1:PS1
PS1用于设置SHELL中的那串提示符。如 root@127.0.0.1:~$ 这串东西就是由PS1变量设置的
## 环境变量2:$
表示目前使用的shell的PID
## 环境变量3:?
表示上一次执行命令的返回值
如果命令成功执行,返回0,否则为非0值,不同的程序返回的码不一样
----------------------------------------------------------------------
## 把自定义变量变成环境变量:export 变量名
---------------------------------------------------------------------
## 与文件系统及程序的限制关系:ulimit
ulimit可用于限制用户可使用的某些系统资源,如可以打开的文件数量、可用的CPU时间、可用的内存总量等。
语法:
ulimit [-SHacdfltu] [配额]
-H hard limit,严格设置,必定不能超过这个设置的数值
-S soft limit,警告的设置,可以超过这个设定值,但如果超过会有警告
-a 后面不接任何参数,用于列出所有限制额度
-c 当某些进程发生错误时,系统可能会将该进程在内存中的信息写成文件,这种文件称为内核文件。本参数用于限制每个内核文件的最大容量
-f 此shell可以创建的最大文件容量,单位为KB
-d 进程可以使用的最大断裂内存容量
-l 可用于锁定的内存量
-u 单一用户可以使用的最大进程数量
----------------------------------------------------------------------------------------------------------------------------------
## 终端机的环境设置:stty, set
#stty -a 将目前所有的stty参数列出来
结果如:
speed 38400 baud; rows 44; columns 168; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -flusho -extproc
^ 表示Ctrl的意思,如intr=^C表示利用ctrl+c完成
eof End of file,结束输入
erase 向后删除字符
intr 送出一个中断(interrupt)信号
kill 删除在目前命令行上的所有文字
quit 送出一个quit信号给目前正在进行的进程
start 在某个进程停止后,重新启动它的输出
stop 停止目前屏幕的输出
susp 送出一个terminal stop的信号给正在进行的进程
# set [-uvCHhmBx]
-u 默认不启用,启用后,当使用未设置变量时,会显示错误信息
-v 默认不启用,启用后,在信息被输出前,会先显示信息的原始内容
-x 默认不启用,启用后,在命令被执行前,会显示命令内容(前面有++符号)
-h 默认启用,与历史命令有关
-H 默认启用,与历史命令有关
-m 默认启用,与工作管理有关
-B 默认启用,与括号[]的作用有关
-C 默认不启用,使用>等时,则若文件存在时,该文件不会被覆盖
------------------------------------------------------------------------------------------------
## bash通配符与特殊符号
# 通配符:
符号 | 意义
------|-----------------------
* | 代表0到无穷多个任意字符
? | 代表一个任意字符
[] | 代表任意一个在[]中的字符
[-] | 代表连续顺序字符。如[0-9]表示0到9之间的所有数字
[^] | 不在[]内的任意字符
# 特殊符号
符号 | 内容
------|---------------------------
# | 批注符号。多用于注释
\ | 转义符号,将特殊字符或通配符还原成其字面意义
| | 管道符,分隔两个管道命令的界定
; | 连续命令执行分隔符
~ | 用户主文件夹
$ | 变量前导符
& | 作业控制,将命令变成后台工作
! | 逻辑非
/ | 目录符号,路径分隔符
>,>> | 数据流重定向,输出导向,分别是“替换”与“累加“
<,<< | 数据流重定向,输入导向
'' | 单引号,不具有变量转换的功能
"" | 双绰号,具有变量置换的功能
`` | 两个`中间为可以先执行的命令,也可以使用$()
() | 在中间为子shell的命令
{} | 在中间为命令块的组合
-------------------------------------------------------------------------------------------------------------
## 11.5 数据库流重定向
标准输出/标准错误输出/标准输入
这三者所用的特殊字符如下:
1. 标准输入(stdin):代码为0,使用<或<<
2. 标准输出(stdout):代码为1,使用>或>>
3. 标准错误输出(stderr):代码为2,使用2>或2>>
标准输出和标准错误输出可以同时使用,将正确的输出信息的错误的输出信息分别存到不同的文件中去。例如:
find /home -name . bashrc > list_right 2> list_error
# /dev/null 垃圾桶黑洞
可以把输出流导向至/dev/null 它可以吃掉任何信息
# 将正确与错误数据都写入
find /home -name .bashrc > list 2>&1
写入的文件名为list,写入的数据为2和1,写入方式为>
-------------------------------------------------------------------------------------------------------------
## 11.5.2 命令执行的判断依据:; && |
# cmd;cmd 不考虑命令的相关性的连续命令执行。即一次执行多个命令
如在关机前先执行同步操作:
sync; shutdown now
# $?(命令回传码)与&&或||
根据前一个命令执行是否成功来决定是否执行后一个命令。即需要考虑命令的相关性
说明如下:
命令执行情况 | 说明
----------------|---------------------------------------
cmd1 && cmd2 | 如果cmd1执行完毕且正确执行($?=0),则开始执行cmd2。否则cmd2不执行
cmd1 || cmd2 | 如果cmd1执行完毕且正确执行($?=0),则cmd2不执行,否则执行cmd2
----------------------------------------------------------------------------------------------
## 11.6 管道符命令(pipe)
对前一个命令的正确输出进行处理
# 选取命令:cut, grep
1) cut
cut -d ‘分隔字符’ -f fields
cut -c 字符范围
如:
echo $PATH | cut -d ':' -f 5 输出$PATH的内容,并以:分隔只取第5段
echo $PATH | cut -d ':' -f 3,5 输出$PATH的内容,并以:分隔只取第3段和第5段
export | cut -c 12- 输出export命令的结果,并只取第12个字符及之后的数据
export | cut -c 12-20 输出export命令的结果,并只取第12-20个字符的数据
2) grep
grep [-acivn] [--color=auto] '查找字符串' filename
-a 将binary文件以text文件的方式查找数据
-c 计算找到'查找字符串'的次数
-i 忽略大小写
-n 输出行号
-v 反向选择,即显示不包含'查找字符串'的那些行
--color=auto 将找到的字符串加上颜色
## 11.6.2 排序命令:sort, wc, uniq
1) sort
sort [-fbMnrtuk] [文件或标准输入]
-f 忽略大小写
-b 忽略前面的空格
-M 以月份的名字排名
-n 使用数字排序
-r 反射排序
-u uniq,相同的数据仅出现一行
-t 分隔符,默认为tab
-k 以哪个区间排序
如,将/etc/passwd文件记录的账号以账号排序:
cat /etc/passwd | sort
以第3列排序
cat /etc/passwd | sort -t ':' -k 3
2) uniq
将重复数据仅显示一个
uniq [-ic]
-i 忽略大小写
-c 计数
3) wc
统计字符
wc [-lwm]
-l 仅列出行
-w 仅列出多少字(英文单字)
-m 多少字符
如列出/etc/man_db.conf中有多少相关字、行、字符数:
cat /etc/man_db.conf | wc
131 721 5165
行 字数 字符数
## 11.6.4 字符转换命令:tr col join paste expand
# tr
tr可用于删除一段信息当中的文字,或者进行文字替换
tr [-ds] SET1 [SET2]
-d 删除信息中的SET1
-s 替换字符,将SET1换成SET2
# col
col [-xb]
-x 将tab键转换成对待的空格
-b 在文字内有反斜杠(/)时,仅保留反斜框最后面的字符
# join
主要用于将两个文件中有相同数据的一行连接在一起
join [-ti12] file1 file2
-t join默认以空格符分隔数据,并且对比“第一个字段”的数据,
如果两个文件相同,则将两条数据连成一行,且第一个字段放在第一个
-i 忽略大小写
-1 数字1,代表第一个文件要用哪个字段来分析
-2 数字2,代表第二个文件要用哪个字段来分析
## 11.6.5 切割命令 split
split [-bl] file PREFIX
-b 后面接欲切割成的文件大小,可加单位,如b, k, m等
-l 以行数来切割
PREFIX 前缀