【前端&运维那点事儿】五:迈向Shell的第一步:Shell基础

1,887 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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/stdin0标准输入
显示器/dev/stdout1标准输出
显示器/dev/stderr2标准错误输出

我们可以使用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的基础知识,虽然不难,但是比较乱,不成体系,所以需要花一些时间好好的记一下。

如果对本篇文章对你有所帮助,可以点赞收藏评论支持一下我;如果有所疑问,欢迎私信~