Bash shell 的功能
- 命令记忆功能 history :1000条指令
- 命令补全功能 tab :
- 接在一串指令的第一个字的后面,则为命令补全
- 接在一串指令的第二个字以后时,则为“文件补齐“
- 命令别名设置功能 alias :给指令取更短的名字
- 工作控制,情景背景控制
- 程序化脚本:编写shell 脚本
shell变量
-
变量:就是让某一个特定字串代表不固定的内容就是了
-
作用:
- 影响 bash 环境操作
- 脚本程序设计 (shell script) 的好帮手
-
变量的取用与设置:
- 取变量的值:echo $path
- 设置变量:=
- 取消变量设置规则,unset
-
查看环境变量
- env :观察环境变量
- set:观察所有变量
命令别名的设置
- alias:设置命令别名
- unalias:取消
指令运行的顺序
- 基本上,指令运行的顺序可以这样看:
- 以相对/绝对路径执行指令,例如“ /bin/ls ”或“ ./ls ”;
- 由 alias 找到该指令来执行;
- 由 bash 内置的 (builtin) 指令来执行;
- 通过 $PATH 这个变量的顺序搜寻到的第一个指令来执行。
bash的默认组合建!
万用字符 (wildcard)
bash 环境中的特殊符号
数据重定向>> |> |<< |< | 2>> |2>
- 输出重定向
- 标准输出 (stdout):代码为 1 ,使用 > 或 >> ;
- 标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
- 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;
- 区别:
- 也就是若以 > 输出到一个已存在的文件中,那个文件就会被覆盖掉啰!
- 利用两个大于的符号(>>) 就会在文件后面追加
- 1> :以覆盖的方法将“正确的数据”输出到指定的文件或设备上;
1>>:以累加的方法将“正确的数据”输出到指定的文件或设备上;
2> :以覆盖的方法将“错误的数据”输出到指定的文件或设备上;
2>>:以累加的方法将“错误的数据”输出到指定的文件或设备上;
- 1> :以覆盖的方法将“正确的数据”输出到指定的文件或设备上;
- 一些执行命令的可能已知错误讯息时,想以“ 2> /dev/null ”将他丢掉时;
命令执行的判断依据: ; , &&, ||
- 连续执行多条指令:在指令与指令中间利用分号 (;) 来隔开,这样一来,分号前的指令执行完后就会立刻接着执行后面的指令了
- cmd1&&cmd2:若 cmd1 执行完毕且正确执行($?=0),则开始执行 cmd2
- cmd1||cmd2:若 cmd1 执行完毕且正确执行( ? = 0 ) , 则 c m d 2 不 执 行 。 2. 若 c m d 1 执 行 完 毕 且 为 错 误 ( ?=0),则 cmd2 不执行。 2. 若 cmd1 执 行完毕且为错误 ( ?=0),则cmd2不执行。2.若cmd1执行完毕且为错误(?≠0),则开始执行 cmd2。
管线命令(pipe |)
- 管线命令使用的是“ | ”这个界定符号! 另外,管线命令与“连续下达命令”是不一样的。
- 管线命令仅会处理 standard output,对于 standard error output 会予以忽略
- 管线命令必须要能够接受来自前一个指令的数据成为 standard input 继续处理才行。
撷取命令: cut, grep
- cut
- 这个指令可以将一段讯息的某一段给他“切”出来~ 处理的讯息是以“行”为单位的。
- 选项与参数:
-d :后面接分隔字符。与 -f 一起使用;
-f :依据 -d 的分隔字符将一段讯息分区成为数段,用 -f 取出第几段的意思;
-c :以字符 (characters) 的单位取出固定字符区间; - cut 主要的用途在于将“同一行里面的数据进行分解!”最常使用在分析一些数据或文字数据的
时候
- grep指令
- grep 则是分析一行讯息, 若当中有我们所需要的信息,就将该行拿出来
- 选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 ‘搜寻字串’ 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 ‘搜寻字串’ 内容的那一行! - grep 可以解析一行文字,取得关键字
- 排序命令: sort, wc, uniq
- sort 是很有趣的指令,他可以帮我们进行排序
- 选项与参数:
-f :忽略大小写的差异,例如 A 与 a 视为编码相同;
-b :忽略最前面的空白字符部分;
-M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法;
-n :使用“纯数字”进行排序(默认是以文字体态来排序的);
-r :反向排序;
-u :就是 uniq ,相同的数据中,仅出现一行代表;
-t :分隔符号,默认是用 [tab] 键来分隔;
-k :以那个区间 (field) 来进行排序的意思 - unique:要将重复的数据仅列出一个显示
- 选项与参数:
-i :忽略大小写字符的不同;
-c :进行计数
- 选项与参数:
- wc: 统计这个文件里面有多少字?多少行?多少字符?
- 选项与参数:
-l :仅列出行;
-w :仅列出多少字(英文单字);
-m :多少字符;
双向重导向: tee
- 将这个数据流的处理过程中将某段讯息存下来,并且打印到控制台
- 选项与参数:
-a :以累加 (append) 的方式,将数据加入 file 当中!
字符转换命令: tr, col, join, paste, expand
- tr:可以用来删除一段讯息当中的文字,或者是进行文字讯息的替换
- 选项与参数:
-d :删除讯息当中的 SET1 这个字串;
-s :取代掉重复的字符! - join:
- 主要是在处理“两个文件当中,有 “相同数据” 的那一行,才将他加在一起”的
- 选项与参数:
-t :join 默认以空白字符分隔数据,并且比对“第一个字段”的数据,
如果两个文件相同,则将两笔数据联成一行,且第一个字段放在第一个!
-i :忽略大小写的差异;
-1 :这个是数字的 1 ,代表“第一个文件要用那个字段来分析”的意思;
-2 :代表“第二个文件要用那个字段来分析”的意思。 - paste:
- 个 paste 就要比 join 简单多了!相对于 join 必须要比对两个文件的数据相关性, paste 就
直接“将两行贴在一起,且中间以 [tab] 键隔开”而已. - 选项与参数:
-d :后面可以接分隔字符。默认是以 [tab] 来分隔的!
析”的意思。 - paste:
- 个 paste 就要比 join 简单多了!相对于 join 必须要比对两个文件的数据相关性, paste 就
直接“将两行贴在一起,且中间以 [tab] 键隔开”而已. - 选项与参数:
-d :后面可以接分隔字符。默认是以 [tab] 来分隔的!- :如果 file 部分写成 - ,表示来自 standard input 的数据的意思。