前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《前端运维》一、Linux基础--03Shell基础及补充

《前端运维》一、Linux基础--03Shell基础及补充

作者头像
zaking
发布2021-05-27 11:16:06
6420
发布2021-05-27 11:16:06
举报
文章被收录于专栏:zaking'szaking's

诶诶欸?不是学Linux么?怎么要讲shell了?shell是啥?啥是shell?

别急,我们先简单了解下shell是什么。Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。而我们日常中所说的Shell,通常是指Shell脚本,但是你一定要注意的是Shell和Shell Script并不是一回事。

Shell是解释执行的脚本语言,在Shell中可以直接使用Linux系统命令。诶?脚本语言?javascript不也是脚本语言?是的。Shell和javascript都是脚本语言。理论上讲,如果Linux能理解javascript,那么javascript完全可以像Shell一样在Linux上运行。换句话说,javascript代码可以在浏览器中运行,Shell可以在Linux中使用,它们所扮演的角色都是类似的,只不过运行的平台不同,道理是相通的。

OK,从现在起,所有的代码都是在本地编写,并通过FTP传到服务器上运行,如果你是Windows电脑,那么下载个XFTP软件使用即可,如果你是mac,请百度下如何传文件到服务器,这不是本文的重点,也不再赘述。其实mac的话,本地的terminal也可以运行linux命令,但是涉及到一些服务器文件的时候,可能就不行了。

首先,我们创建一个本地的文件,后缀名其实是无所谓的,还记得不,我们之前说过,linux是不会根据后缀名来区分文件类型的,那我们加上后缀名一方面是为了见名知意,另一方面是为了其他平台的兼容(这个是我编的)。

由于Linux文件不区分类型,所以我们要在写shell脚本的文件里面写上:#!/bin/bash。就像Html文件开头的<!DOCTYPE html>一样,是为了告诉系统,这个文件用什么程序来解释该文件的内容。

ps:bash是什么意思呢?其实就是Linux的shell的种类,比如常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)

等等。所以,这回你知道了,bash是什么意思,就是shell的一个种类而已。

一、第一个shell脚本

我们先来创建一个脚本文件,并写上在文件的里面写上这样的内容:

代码语言:javascript
复制
#!/bin/bash
echo 'Hello World!'

然后,根据我们之前所说,通过FTP把这个文件传到/demo目录下,然后通过sh命令执行脚本,激动人心的时刻到来了~

完美!这里有一点要注意的是,通过sh命令调用shell脚本文件,可以不用在第一行指定解释器信息,因为实际上,你的命令已经决定了用啥解释器。但是作为可执行文件执行的时候,一定要加的。所以无论啥场景,你加上肯定没问题。

另外一种,可执行文件的方式:

这里要注意的是,文件的地址一定要写相对路径的形式,因为如果你只写test1.sh,系统会去PATH里去找,显而易见是找不到的。

我们已经完成了脚本的运行。下面,我们来学习一些有关于Shell语言的一些基本内容。

二、补充

2.1、echo

输出内容到标准输出。上面第一部分已经使用过了,这里不再重复:

  • -e,激活转义字符。
2.2、alias,alias [别名]=[指令名称]

别名,简单来说,类似于npm包管理的package.json中的script,在一个简短的命令和复杂的命令间建立联系,可以让命令的使用更便捷。该命令可以创建临时生效的别名。如果要永久生效,需要修改~/.bashrc文件。也可以通过直接执行alias命令,查看当前设置别名的命令有哪些。

2.3、history

可以查询执行过的命令。选项-c 会清空历史命令,选项-w,可以把缓存中的历史命令写入历史命令保存文件(~/.bash_history),默认情况下,历史命令会保存1000条,可以修改/etc/profile文件中的HISSIZE字段,从而修改其可保存的数量。历史命令可以通过以下方式来调用:

  1. 使用上下箭头调用以前的历史命令
  2. 使用 !n 重复执行第n条历史命令
  3. 使用 !! 重复执行上一条命令
  4. 使用 !字符 重复执行最后一条以该字符串开头的命令
2.4、命令的生效顺序
  • 绝对路径或者相对路径
  • 别名
  • bash内部命令
  • 按照$PATH环境变量定义的目录查找顺序找到的第一个命令
2.5、命令快捷键

命令

含义

ctrl+c

强制终止当前命令

ctrl+l

清屏

ctrl+a

光标移动到命令行首

ctrl+e

光标移动到命令行尾

ctrl+u

从光标所在的位置删除到行首

2.6、标准输入输出

设备

设备文件名

文件描述符

类型

键盘

/dev/stdin

0

标准输入

显示器

/dev/stdout

1

标准输出

显示器

/dev/stderr

2

标准错误输出

2.6.1、输出重定向

类型

符号

作用

标准输出重定向

命令 > 文件

以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中

标准输出重定向

命令 >> 文件

以追加的方式,把命令的正确输出输出到指定的文件或设备当中

错误输出重定向

命令>文件

以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中

错误输出重定向

命令>>文件

以追加的方式,把命令的错误输出输出到指定的文件或设备当中

正确输出和错误输出同时保存

命令>文件 2>&1

以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中

正确输出和错误输出同时保存

命令>文件 2>>&1

以追加的方式,把正确输出和错误输出都保存到同一个文件当中

正确输出和错误输出同时保存

命令&>文件

以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中

正确输出和错误输出同时保存

命令&>>文件

以追加的方式,把正确输出和错误输出都保存到同一个文件当中

正确输出和错误输出同时保存

命令>>文件1 2>文件2

以覆盖的方式,正确的输出追加到文件1中,把错误输出追加到文件2中

2.6.2、输入重定向

wc命令的功能为统计指定文件中的行数、字数、字节数, 并将统计结果显示输出。命令 < 文件,把文件做为命令的输入。

2.7、管道符

就是“|”这个符号。使用方法是这样的:

  • 命令1|命令2

意思是命令1的正确输出会作为命令2的操作对象。

2.8、通配符

用来匹配目录或文件名,也就是说在操作文件的时候,支持下面的字符来匹配。

通配符

作用

?

匹配一个任意字符

*

匹配0个或任意字符,也就是可以匹配任意内容

[]

匹配中括号中任意一个字符

[-]

匹配中括号中任意一个字符,-代表范围

[^]

匹配不是中括号中的一个字符

2.9、其他符号

符号

作用

''

单引号,在单引号中所有的特殊符号,如$和`都没有特殊含义

""

双引号,在双引号里特殊符号都没有特殊含义,但是 $ ` \ 例外,拥有调用变量值,引用命令和转义的含义

``

反引号,扩起来的是系统命令

$()

和反引号一样

#

在shell脚本中,#开头的行代表注释

$

用于调用变量的值

\

转义符号

今天内容比较散乱,主要作为承上启下的作用。而这篇文章也没写例子,主要是我觉得如果认真学习了前两篇内容,这篇的例子完全可以由你自己去尝试,就当做是一次作业吧。下一篇文章,我们正式进入Shell的学习。记得别忘了把准备工作做好哦。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-05-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、第一个shell脚本
  • 二、补充
    • 2.1、echo
      • 2.2、alias,alias [别名]=[指令名称]
        • 2.3、history
          • 2.4、命令的生效顺序
            • 2.5、命令快捷键
              • 2.6、标准输入输出
                • 2.6.1、输出重定向
                  • 2.6.2、输入重定向
                    • 2.7、管道符
                      • 2.8、通配符
                        • 2.9、其他符号
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档