前言
bash是Linux中默认的shell,通过bash及bash提供的工具我们可以很高效的使用Linux完成我们的工作,接下来让我们来学习学习bash。
1. Shell介绍
shell是一个程序,可以实现外部与内核的通信功能,通过shell我们可以控制内核完成一些复杂的工作,从而完成我们的任务。Linux中常见的shell有bash/bsh/ash/tsh/zsh/ksh等,其中bash是Linux中默认的shell,这些shell本质上差异不大,只是一些语法的实现上有些区别。因为bash是Linux默认的shell,而且bash确实功能强大,使用也方便,所以接下来我们主要来学习bash,不过shell也和编程类似,可以触类旁通。
2. bash特点
- history命令
history命令会列出记录的所有bash命令!number:执行.bash_history文件中第n条命令!!:执行上一条命令!command:执行以command开头的最近的一条命令
bash下组合按键
ctrl+C:终止目前的命令
ctrl+D:输入结束(EOF)
ctrl+Z:暂停目前的命令
- 通配符
*:代表0到无穷多个任意字符
?:代表一定有一个任意字符
[]: 代表一定有一个在中括号内的字符(非任意字符),例如[abcd],代表一定有一个字符,可能是a,b,c,d这四个中任意一个
[-]:若有减号在中括号内,代表在编码顺序内的所有顺序,例如[0-9]代表0到9之间的所有数字
[^]:若中括号内的第一个字符为指数符号^,那表示原向选择,例如[ ^abc]代表一定有一个字符,只要是非a,b,c的其他字符就接受的意思
- bash其他符号
#:注释符号,后面内容不执行
\:转移符号
|:管道符号,分隔两个管道命令的界定
~:用户的主文件夹
;:连续命令执行分隔符
$:变量前导符
&:作业控制,将命令变成背景下工作
!:逻辑运算符非
/:目录符号
** >,>> **:数据流重定向,分别是“替换”和“累加”,1>表示输出正确信息,2>表示输出错误信息,同时输出则为2>&1
<,<<:数据流重定向,输入导向
“:两个反单引号中间为先执行命令,也可使用$()
- 数据管理命令
cut:对于比较规整的信息,cut可以截取每一行特定部分的字符
grep:对输出结果进行查询筛选
sort:对输入内容进行排序
uniq:对输入去重的操作
wc:对输入进行统计计数
tee:同时将数据屏幕输出和保存到文件
xargs:将输入通过空格符或者断行符分开作为参数
-的用途:有些命令需要用到文件名作为参数,可以用-代指srdout和stdin输出的文件名
awk: 编辑文档,方便列操作
paste: 合并文档,可以用’-d’指定分隔符
cat: 查看文档,也可以重定向成合并文档
- 正则表达式
字符集
[:alnum:]:代表英文大小写字符及数字,即0-9,A-Z,a-z
[:alpha:]:代表任何英文大小写字符,即A-Z,a-z
[:blank:]:代表空格键与[Tab]按键
[:cntrl:]:代表键盘上面的控制按键,即包括CR,LF,Tab,Del等
[:digit:]:代表数字字符,即0-9
[:graph:]:除了空格符(空格键与[Tab]按键)外的其他所有按键
[:lower:]:代表小写字符,即a-z
[:print:]:代表任何可以被打印出来的字符
[:punct:]:代表标点符号
[:upper:]:代表大写字符,即A-Z
[:space:]:任何会产生空白的字符,包括空格键[Tab]CR等
[:xdigit:]:代表十六进制的数字类型,因此包括0-9,A-F,a-f等
基础字符表达式与应用
.:代表一定有一个任意字符
:代表重复前一个0到无穷次
^word:待查找的字符串在行首
word$:待查找的字符串在行尾
[list]:从字符集合的RE字符里面找出想要选取的字符
[^list]:从字符集合的RE字符里面中找出不要的字符串或范围
[n1-n2]:从字符集合的RE字符里面找出想要选取的字符范围
[^$]:指定空白行
{n1,n2}:连续n到m个的前一个RE字符,若为{n}则是连续n个的前一个RE字符,若为{n,}则是连续n个以上的前一个RE字符
*扩展的正则表达式**
+:重复一个或者一个以上的前一个RE字符
?:零个或者一个的前一个RE字符
|:用或(or)的方法找出数个字符串
():找出”组“字符串
()+:多个重复组的判别
- 文本工具
- sed命令
作用:sed本身是一个管道命令,可以分析stdin,还可以将数据进行替换、删除、新增、选取特定行的功能语法:sed [n1] [n2] function;function选项如下所示
- a:新增,a后面可以接字符串,而这些字符串会在新的一行中出现
- c:替换,c的后面可以接字符串,这些字符串可以替换n1,n2之间的行
- d:删除,因为是删除,所以d后面通常不接任何参数
- i:插入,i的后面可以接字符串,而这些字符串会在新的一行出现
- p:打印,也就是将某一个选择的数据打印出来,通常p会与sed -n一起运行
- s:替换,可以直接进行替换的工作,通常这个s的动作可以搭配正则表达式,例如1,20s/word1/word2/g,即将1到20行中word1替换成word2
- 文件比较工具
- diff [-bBi] from-file to-file:比较from-file和to-file的差别,注意不要用diff命令去比较不相干的文件,这样没有比较的结果
- cmp [-s] file1 file2:比较file1和file2,返回第一个发现的不同点字节处和行数
3. bash理解
在翻看了许多资料之后,对于bash的理解又有了新的进步。bash是一个默认的shell,当我们进入Linux系统是,Linux就会给每一个账户分配一个shell,因此,当我们开始进入了以后,就是已经开始在使用bash了,原本我以为是只在调用bash的时候才使用,没想到bash一直都是我工作的环境,正是在这个环境下,我们能够方便的使用上下键查看历史命令、使用tab键补全路径、还有直接使用grep、awk、sed等这些工具进行工作等等,还有数据重定向、命令管道符等等,非常的方便,bash果然是非常实用、好用。
如果需要切换shell的话,也是可以的,可以有如下操作:
- 方法一: chsh -s /bin/ksh
- 方法二: usermod -s /bin/ksh root
- 查看当前shell:echo $SHELL或者egrep ‘root’ /etc/passwd
- 查看所有shell:cat /etc/shells或者chsh -l