Shell(2)------shell的基础知识

shell的基础知识——脚本执行、shell变量、常用的符号

插播!插播!插播!亲爱的朋友们,我们的shell课程上线啦!感兴趣的小伙伴可以去下面的链接学习哦~

Shell入门——基础知识+实战_在线视频教程-CSDN程序员研修院

Shell不仅仅是Linux系统的命令行界面,它更是一种命令语言,允许用户与系统内核进行交互。通过一系列命令的组合,Shell能够帮助我们自动化任务,简化复杂操作,并提高工作效率。当我们把这些命令按照特定的逻辑和流程组合在一起时,便形成了Shell脚本。

在众多Shell中,Bash无疑是最为人们所熟知和常用的。Bash不仅界面友好、易于上手,而且它是开源的,这意味着任何人都可以免费使用和修改。正因为如此,Bash成为了大多数Linux发行版的默认Shell环境。在日常工作中,无论是系统管理员还是开发者,都能够在Bash中找到自己所需的功能。

当准备开始Shell编程时,理解Shell解析器的作用至关重要。简而言之,解析器是Shell的核心,它的任务是将我们所编写的命令脚本翻译为系统内核可以理解的指令。常见的Shell解析器有多种,而每种解析器都有其特点和适用场景。为了确保脚本的兼容性和稳定性,选择合适的解析器是至关重要的。

编写一个简单的Shell脚本其实非常直观。以“Hello World”为例,首先我们需要为脚本命名,遵循惯例,名称应该是描述性的,并采用英文命名,同时要确保文件后缀为“.sh”。接下来,在文本编辑器中编写脚本内容。一般来说,我们会在文件的开头声明使用哪种Shell解释器,例如“#!/bin/bash”。这样做的目的是告诉系统用哪个解释器来执行这个脚本。

仅需实现打印功能,在终端中展示“hello  world”文本。

在完成Shell脚本的编辑后,执行这个脚本的过程其实并不复杂。首先,我们需要确认该文件是否具有执行权限。执行权限是确保脚本能够正常运行的关键因素。如果没有执行权限,我们需要修改文件权限,这通常涉及到使用chmod命令来赋予脚本执行权限。通过上一篇关于Linux命令学习的博客,我们深入了解了如何使用chmod命令来修改文件权限。因此,这一步应该不会构成太大的挑战。

一旦脚本具有了执行权限,我们就可以通过在终端中输入脚本的路径来执行它。这个过程相对直接,但需要确保脚本的路径正确无误。在执行脚本时,系统会按照脚本中的指令逐条执行,完成相应的任务。

Shell(2)------shell的基础知识_第1张图片

在Shell编程中,变量是不可或缺的基础知识。它们在程序运行过程中存储数据,并允许我们对这些数据进行操作。Shell变量分为两大类:自定义变量和系统变量。

首先,我们来了解一下自定义变量。自定义变量是我们在编程过程中为了存储特定数据而创建的变量。在Shell编程中,我们不需要提前声明变量,可以直接在代码中创建并使用。创建自定义变量的方法非常简单,只需为变量赋一个值即可。例如,我们可以将一个名为"math"的变量赋值为25,“math=25”。接下来,我们可以通过使用`$math`或`${math}`来引用这个变量。`$math`和`${math}`都可以用来表示变量math的值。在某些特定场合,我们还可以使用`{}`与其他字母或字符分开表示变量,以满足特定需求。

另外,系统变量在shell编程中的地位举足轻重。这些变量主要用于参数判断和命令执行后的返回值判断,其运用之巧妙令人叹为观止。在shell中,有几个重要的系统变量,例如$0、$1、$2、$3......、$n、$*、$#和$?。这些变量各有其独特的用途,下面我们将逐一详细解释,并通过实例来加深理解。

首先,我们来说说$0。在脚本中,$0代表的是当前执行的脚本的文件名。这是一个非常实用的变量,特别是在需要进行脚本名称判断或者输出脚本名称时。举个例子,如果我们在脚本的第一行写上"#!/bin/bash",第二行打印出$0的值,那么执行这个脚本后,就会输出这个脚本的文件名,可见$0的确如其所述,就是脚本的名称。

Shell(2)------shell的基础知识_第2张图片

除 "$0" 之外,系统中的其他变量也扮演着不可或缺的角色。例如,"$1" 至 "$n" 这些变量代表脚本的第一个至第n个参数。这些参数在脚本执行时被传递进来,使脚本能够根据不同的参数执行不同的操作。我们亦将简要阐述,仅列举部分变量以替代原九个示例,领会同理即可。直接运行时,结果将为空。若要执行文件,须附带参数以便识别,例如:

Shell(2)------shell的基础知识_第3张图片

当我们谈论脚本的参数时,我们经常会遇到一个特殊的符号$*。这个符号在脚本中有着特殊的含义,它代表了传递给脚本的所有参数内容。这些参数可以是任何类型的数据,例如字符串、数字、布尔值等。在脚本中,我们可以使用$*来引用所有传入的参数,并在需要的地方使用它们。

为了更好地理解$*的作用,我们可以考虑一个简单的例子。假设我们有一个脚本,它接受多个参数并打印出这些参数的值。如果我们使用$*来引用所有参数,那么无论传递给脚本多少个参数,它都能正确地打印出它们。例如,我们可以创建一个脚本来接收参数:1、2、3、4、5,并打印出它们的值。当调用该脚本时,我们可以传递任意数量的参数,脚本将正确地打印出这些参数的值。

Shell(2)------shell的基础知识_第4张图片

除了获取参数值以外,了解传参的数量也尤为重要。为此,我们可以使用特殊符号如  "$#"  来表示传参给脚本的参数个数。以下是一个关于如何使用  "$#"符号的实例:

我们输入了五个参数,执行脚本后,我们会看到如下输出:

Shell(2)------shell的基础知识_第5张图片

在计算机编程领域,程序执行后的状态检测是一项重要任务。在这个过程中,$?符号扮演着关键角色。它的作用是判断程序执行是否成功,返回0表示执行顺利,反之,若返回非零值,则表明执行过程中出现了问题。

在未来的实战编写shell脚本过程中,这些系统变量将具备极高的重要性。例如,在编写登录脚本时,若需进行参数传递,这些变量将起到至关重要的作用。

我们已经了解了shell脚本的基本概念和一些基础知识。接下来,我们将深入探讨shell脚本中一些常用且高频的符号,这些符号在实际应用中发挥着重要作用。掌握这些符号的使用方法,将有助于提高shell脚本的编写效率和灵活性。

首先,让我们来看一下这几个在shell脚本中常用的符号:>、>>、;、|、&&、||和“”、‘’。这些符号具有不同的功能,下面我们将逐一进行解释。

1.  >  和  >>符号:这两个符号主要用于文件操作,其中>表示将命令的输出结果重定向到指定的文件,覆盖原有文件内容;而>>则表示将命令的输出结果追加到指定文件的末尾,不会覆盖原有内容。例如,我们有一个文本文件test.txt,可以使用以下命令将其内容覆盖为文本abcdefg:

如果想把文本修改成12345678,可以再次使用 > 符号

在实现追加内容而不覆盖原有内容的目标时,可采用>>符号。以下为示例展示:

Shell(2)------shell的基础知识_第6张图片

2. ;符号:;用于表示命令之间的分组,它可以让多个命令组成一个逻辑单元。在shell脚本中,使用分号隔开的多个命令会在同一进程中执行,而且这些命令会按照编写顺序依次执行。

例如,当我们希望进入某一目录并创建一个文件时,可以利用分号符号来实现这一目标。

可见,一条语句实则已执行了两条命令,此时4.txt文件已成功创建。

3. |符号:|表示管道操作,将左侧命令的输出结果传递给右侧的命令。这种操作常用于将一个命令的输出作为另一个命令的输入。

通过实例加以说明,我们可以利用管道符号将ls命令的输出结果传输至grep命令,从而实现对特定文件的筛选。

这个命令就是把你当前目录下的所有文件和文件夹列出来,然后挨个检查它们的扩展名是不是  .txt,符合条件的就输出到控制台。

4. &&  和  ||符号:这两个符号用于表示逻辑与(AND)和逻辑或(OR)操作。在shell脚本中,使用&&连接的两个命令只有在左侧命令执行成功的情况下,右侧命令才会被执行;而使用||连接的两个命令只要左侧命令执行失败,右侧命令就会被执行。

以下为一示例,可通过将多个命令串联成一条命令,确保其按正确顺序执行。例如,我们先进入一个目录,删除2.txt文件,接着新建一个名为3.txt的文件。

此时,我们已进入mod目录,创建了一个名为3.txt的文件,并删除了2.txt。现在,目录中已不存在2.txt。在此语句之后,若再添加创建4.txt文件的指令,请问该指令是否仍会执行?

可见就没法执行了,我们需要寻找替代方案,符号或——||成为了一个值得考虑的选项。

继续以上述示例进行说明,当目录中已不存在2.txt文件时,尝试删除2.txt的命令将会失败。为确保能够成功创建4.txt文件,可将原命令中的&&符号替换为||符号。这样一来,在删除2.txt失败的情况下,系统将自动执行创建4.txt的操作。

Shell(2)------shell的基础知识_第7张图片

5. 双引号(“”)和单引号():这两个引号符号在编程领域中具有重要的意义。在shell脚本中,它们分别用于表示字符串和字符。

首先,双引号(“”)用于包含整个字符串。当需要在脚本中处理字符串时,使用双引号将字符串括起来。这样可以确保字符串内的内容被视为一个整体,避免因特殊字符而导致解析错误。

例如,我们先前创建的用于处理系统变量的shell.sh脚本,当使用双引号时,变量值会被打印出来。那么,若将双引号改为单引号,又会产生何种现象呢?我们将$2这一行的双引号替换为单引号,并进行运行,以观察其效果。

Shell(2)------shell的基础知识_第8张图片

我们发现它只输出了变量本身,并没有输出变量的值,因此我们可以得出结论:

双引号(" ")会对字符串进行变量替换和命令替换(即把命令的输出结果作为字符串的一部分)。而单引号(‘)则用于表示字符串中的单个字符,当需要处理字符串中的某个字符时,可以使用单引号将该字符括起来,这样可以避免特殊字符引起的问题。

6. 反引号,或者称之为反引号字符("`"),是Shell中一种重要的符号,主要用于表示命令替换。命令替换是一种功能强大的特性,它允许我们将一个命令的标准输出作为另一个命令的参数,从而实现命令的复合和扩展。

反引号在Shell中的作用与$()符号相似。它们都可以用来表示命令替换,但反引号具有更高的灵活性和易用性。反引号可以让我们轻松地将一个命令的输出结果作为另一个命令的参数,从而简化我们的操作流程。

例如,我们可以使用反引号来获取当前目录的绝对路径:

反引号在Shell脚本中的应用还有很多,如环境变量替换、函数定义和参数传递等。熟练掌握反引号的使用,可以大大提高我们在编写Shell脚本时的效率和便利性。

总之,脚本执行、shell变量和常用符号是计算机编程和操作系统中不可或缺的概念。了解它们的作用和用法,有助于我们更好地应对日常工作和学习中的挑战。在实际应用中,我们要灵活运用这些概念,编写出高效、可靠的脚本程序。

你可能感兴趣的:(Shell,linux)