1.什么是shell
首先我们来看一下用户操作计算机的流程:
用户都是通过各种各样的应用程序来指挥内核,让内核达成我们所需要的硬件任务,这个应用程序其实就在
最外层,相当于鸡蛋的外壳一样,因此被称为shell。
所以广义的shell包括图形界面的软件,狭义的shell指的是命令行方面的软件。
shell依据早期的UNIX发展者不同就有许多版本,而Linux使用的这一版本被称为"Bourne Again SHell"(bash)
你可以打开你的Linux主机下的 /etc/shells 这个文件,就可以看到你的主机可用的shell:
2.bash shell 的功能
①命令记忆功能
你曾经执行过的记录几乎都能够被记录下来,当我们在命令行中按下↑/↓就能找到前一个/后一个输入的命令;
其实这些之前记录下来的命令是被保存在 ~/.bash_history 文件里的,有兴趣的可以 cat ~/.bash_history 看一下
需要注意的是,这个文件记录的是前一次登录以前执行过的命令,至于本次登录所执行的命令都被暂存在临时
内存中,本次登录注销之后,命令记录才会记录到 .bash_history 中去。
②补全功能
其实就是Tab键的使用,
Tab接在一串命令的第一个字后面,则为命令补全;
Tab接在一串命令的第二个字后面,则为文件补全;
例如:l [Tab] [Tab] 将显示所有可用的以l开头的命令
③命令别名设置
我们常用的命令别名ll,相当于ls -l,那么这个别名是在哪里设置的呢?alias命令可以帮助你找到它
我们也是可以自行设置命令别名的,如下:
alias eco='ls -al'
3.bash shell内置命令之type
type命令用来检测一个命令的类型(bash内置命令、外部命令、命令别名)
-t //显示命令类型 -a //显示路径 -p //只有命令为外部命令才会显示路径
4.命令执行之命令太长
我们可以直接敲出命令然后回车执行,但是如果命令太长怎么办呢,此时就要用反斜杆来转义了()
利用 [Enter] 使得光标跳到下一行,继续书写命令(回车要紧挨着反斜杆)。
5.变量
变量就是以一组文字或符号等,来替代一些设置或者是一串保留的数据。
变量的显示:echo;变量的销毁:unset;变量的设置:用=号直接赋值。
如下命令中:bash用于打开一个shell子进程,exit用于退出该子进程,export将该进程中的变量变为环境变量。
其实这里的进程有点模块化的意思,a进程(模块)里声明的变量b进程(模块)里当然找不到,除非export
如果你了解过模块化的话,这段话应该不难理解。
这方面的内容可以参考我以前写的一个拖拽模块或者ES6的模块化相关知识。
6.环境变量
env 命令查看环境变量和变量说明(set命令可以查看自定义变量和环境变量):
7.PS1 变量
图中红框的内容是可以自行设置的,这个设置的命令就是修改PS1变量,格式如下:
PS1='[u@h w A ##]$'
d //显示星期 月 日 H //显示完整的主机名 h //显示主机名第一个小数点之前的名字 //显示24小时制的时间到秒 T //显示12小时制的时间到秒 A //显示24小时制的时间到分钟 @ //显示12小时制的am/pm样式 u //目前用户的账号名称 v //bash的版本信息 w //完整的工作目录名称 W //利用basename函数取得的工作目录名称 # //执行的第几个命令 $ //提示符,如果是root提示符就是#,否则是$
8.其他变量相关操作
read test //接下来光标会跳到下一行,让你为这个变量设置一个值 read -p "Please type your name:" -t 30 name //要求为name变量设置一个值,并给出提示语,等待输入的时间为30s
declare/typeset [options] 变量 //设置变量的类型 -a //数组类型(array) -i //整数类型(integer) -x //和export一样,将变量设置为环境变量 -r //将变量设置成readonly
注意:变量设置默认类型是文字类型(字符串)
9.变量内容的删除、替换
前面我们知道变量在不声明类型的情况下,默认类型就是文本类型,那么变量内容的操作实际上就是字符串操作
先复制系统环境变量PATH到自定义变量path,后续的操作就在path变量上进行:
删除:
删除的命令是:echo ${path#/*:}
这样就会从前面开始找符合 /*: 这种格式的字符串,不出意外,首先匹配到的是 /usr/local/sbin: 于是这段就被删除了
# //一个#表示从前面开始匹配,删除符合条件的最短的字符串 ## //两个#表示从前面开始匹配,删除符合条件的最长的字符串 % //一个%表示从后面开始匹配,删除符合条件的最短的字符串 %% //两个%表示从后面开始匹配,删除符合条件的最长的字符串
替换:
替换的命令是:echo ${path/bin/BIN}
将第一个/bin 替换为 /BIN
/bin/BIN //将第一个符合条件的进行替换 //bin/BIN //将所有的符合条件的进行替换