持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
Hi~,我是一碗周,如果写的文章有幸可以得到你的青睐,万分有幸~
🍎 写在前面
先来介绍一下新开的这个专栏:《前端&运维那点事儿》将会从前端的角度,依次学习Linux→Nginx→Docker→持续集成→k8s,从而打造一个属于站在前端角度的运维专栏。
从这篇文章开始开始介绍shell,在这篇文章先来介绍一下shell以及bash的功能和技巧;
🍓 什么是Shell
Shell是一个命令行解释器,它连接了用户和Linux内核,向用户提供了一个高效、安全、低成本使用Linux内核;
Shell本身并不是内核的一部分,他只是基于内核编写的一个软件,用户可以通过Shell来启动、挂起、停止或者编写一些应用程序;
Shell虽然没有C++、JavaScript、Python等强大,但也支持了基本的编程元素,我们可以通过Shell来编写出我们需要的脚本;
由于Linux的开放性的特定,使得在Linux中可以选择的Shell有很多,我们可以通过查看/etc/shells来查看当前系统中有哪些可以用的Shell,示例如下:
[root@ywanzhou ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
这里我们以Bash为例。
🍒 echo命令
首先我们先来补充一个之前没有介绍的echo命令,该命令可以在命令行中输出内容,该命令可以添加-c选项,可以输出转义字符,常用的转义如下:
| 控制字符 | 作用 |
|---|---|
| \n | 换行符 |
| \r | 回车键 |
| \b | 退格键 |
| \t | 制表符,也就是【Tab】键 |
| \v | 垂直制表符 |
示例如下:
[root@ywanzhou ~]$ echo -e "Hello\nWorld" # 换行打印
Hello
World
echo命令还能输出颜色,示例代码如下:
echo -e "\033[32msuccess\033[0m" # 输出绿色的字符串 success
完整语法如下:
echo -e "\033[字背景颜色;字体颜色m字符串\033[0m"
字背景颜色和字体颜色如下表所示:
| 字体颜色代码 | 颜色 | 背景颜色代码 | 颜色 |
|---|---|---|---|
| 30 | 黑色 | 40 | 黑色 |
| 31 | 红色 | 41 | 红色 |
| 32 | 绿色 | 42 | 绿色 |
| 33 | 黄色 | 43 | 黄色 |
| 34 | 蓝色 | 44 | 蓝色 |
| 35 | 紫色 | 45 | 紫色 |
| 36 | 深绿 | 46 | 深绿 |
| 37 | 白色 | 47 | 白色 |
🍑 Bash功能
🍏 历史命令
Bash具有自动记录历史命令的功能,用户所执行的命令会在注销时自动记录到自己家目录下的.bash_history隐藏文件中。如果想要查看这些历史命令可以通过以下几种方法:
-
直接查看
~/.bash_history文件; -
通过上下方向键来查看;
-
通过
history命令查看。
如果我们通过history命令查看历史记录时,可以通过!序号的方式执行某条历史记录。
🍎 别名
在目前我们使用的Linux系统中,我们直接输入ll命令可以显示文件的详细信息,但是系统中不存在ll命令,这个命令只是被提前定义好的别名而已;别名的优势就在于可以把很长的命令进行简化,从而提高工作效率。
创建别名可以使用alias命令,该命令如果不添加参数则表示查看系统当前的所有别名,如下所示:
[root@ywanzhou ~]$ alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
创建别名示例如下:
alias llh='ls -lh --color=auto'
删除别名可以使用unalias命令,只需要添加别名名称即可:
unalias llh
使用alias命令创建的别名在重启之后就会失效,我们可以将别名写入配置文件,示例如下:
vim ~/.bashrc
# 然后找个位置输入下面这段内容
alias llh='ls -lh --color=auto'
# 别名就创建好了,如果想要生效,还需要执行下面这个命令
source ~/.bashrc
此时别名就算重启之后也不会失效。
🥭 重定向
Bash的标准输入设备是键盘、鼠标等设备,标准输出设备是显示器;我们一般都是通过键盘输入命令并执行,系统将返回信息显示在屏幕上;输入和输出都有自己的文件描述符,如下表所示:
| 设备 | 设备文件名 | 文件描述符 | 类型 |
|---|---|---|---|
| 键盘 | /dev/stdin | 0 | 标准输入 |
| 显示器 | /dev/stdout | 1 | 标准输出 |
| 显示器 | /dev/stderr | 2 | 标准错误输出 |
我们可以使用Linux中的重定向符号(<、>、|、<<、>>)重新定义输出;
| 类型 | 符号 | 作用 |
|---|---|---|
| 标准输出重定向 | 命令 > 文件 | 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中 |
| 标准输出重定向 | 命令 >> 文件 | 以追加的方式,把命令的正确输出输出到指定的文件或设备当中 |
| 错误输出重定向 | 命令2>文件 | 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中 |
| 错误输出重定向 | 命令2>>文件 | 以追加的方式,把命令的错误输出输出到指定的文件或设备当中 |
| 正确输出和错误输出同时保存 | 命令>文件 2>&1 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中 |
| 正确输出和错误输出同时保存 | 命令>文件 2>>&1 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中 |
| 正确输出和错误输出同时保存 | 命令&>文件 | 以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中 |
| 正确输出和错误输出同时保存 | 命令&>>文件 | 以追加的方式,把正确输出和错误输出都保存到同一个文件当中 |
| 正确输出和错误输出同时保存 | 命令>>文件1 2>文件2 | 以覆盖的方式,正确的输出追加到文件1中,把错误输出追加到文件2中 |
输入重定向使用的是<和<<两种:
-
命令 < 文件:把文件做为命令的输入; -
命令 << 标识符 标识符:把标识符之间内容作为命令的输入;
示例如下:
[root@ywanzhou ~]$ wc < install.sh
67 149 2258
[root@ywanzhou ~]$ wc << !
> ywanzhou
> !
1 1 9
# wc命令的功能为统计指定文件中的行数、字数、字节数, 并将统计结果显示输出
🍌 管道
管道命令操作符是|,它只能处理经由前面一个指令传出的正确输出信息,对错误信息信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入。
语法如下:
命令1 | 命令2 | 命令3
# 【命令1】正确输出,作为【命令2】的输入
# 【命令2】的输出作为【命令3】的输入
# 【命令3】输出就会直接显示在屏幕上面了。
# 通过管道之后【命令1】和【命令2】的正确输出不显示在屏幕上面
例子如下:
ll | grep 'centos7' # 我们将ll的结果作为 grep 的命令的输入,然后过滤信息,只要包含cnetos的文件
🍋 符号
🍊 多命令执行符
| 多命令执行符 | 格式 | 作用 | 案例 |
|---|---|---|---|
; | 命令1;命令2 | 多个命令执行,命令之间没有任何逻辑联系 | echo 1;echo 2; |
&& | 命令1&&命令2 | 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 | echo 1&&echo 2; |
\\ | 命令1\\ 命令2 | 逻辑或 当命令1执行不正确,则命令2才会执行 当命令1正确执行,则命令2不会执行 | echo 1\\echo 2; |
🍉 通配符
| 通配符 | 作用 |
|---|---|
? | 匹配一个任意字符 |
* | 匹配0个或任意字符,也就是可以匹配任意内容 |
[] | 匹配中括号中任意一个字符 |
[-] | 匹配中括号中任意一个字符,-代表范围 |
[^] | 匹配不是中括号中的一个字符 |
🍈 其他符号
| 符号 | 作用 |
|---|---|
| '' | 单引号。在单引号中所有的特殊符号,如$和`都没有特殊含义 |
| "" | 双引号,在双引号里特殊符号都没有特殊含义,但是 $ ` \ 例外,拥有调用变量值,引用命令和转义的含义 |
| · | 反引号,扩起来的是系统命令(MarkDown默认把反引号解析成了代码) |
| $() | 和反引号一样 |
| # | 在shell脚本中,#开头的行代表注释 |
| $ | 用于调用变量的值 |
| \ | 转义符号 |
🍍 快捷键
Bash提供了大量的快捷键为用户所使用,熟练掌握这些快捷键会提高工作效率;下表展示了Bash中的快捷键以及功能描述:
| 快捷键 | 描述 |
|---|---|
| ctrl+c | 强制终止当前命令 |
| ctrl+a | 光标移动到命令行首 |
| ctrl+e | 光标移动到命令行尾 |
| ctrl+l | 清屏,相当于clear命令 |
| ctrl+u | 从光标所在的位置删除到行首 |
| ctrl+k | 从光标所在的位置删除到行尾 |
| ctrl+r | 在历史命令中搜索 |
| tab | 自动补齐 |
| ctrl+w | 删除光标前一个单词 |
| alt+d | 删除光标后一个单词 |
🍇 写在最后
这篇文章中涉及到的全部都是Shell的基础知识,虽然不难,但是比较乱,不成体系,所以需要花一些时间好好的记一下。
如果对本篇文章对你有所帮助,可以点赞收藏评论支持一下我;如果有所疑问,欢迎私信~