您现在的位置:首页 > 知识库 > Linux Shell和Shell脚本结构分析

Linux Shell和Shell脚本结构分析

2023/12/19 15:13:47 | 来源:Admin

 

只要我们使用的是任何主流操作系统,那么我们都是在间接地与shell交互。在运行Ubuntu、LinuxMint或任何其他Linux发行版时,我们使用终端与shell交互。在本文中,我们将讨论Linux shell和shell脚本,因此在理解shell脚本之前,我们必须熟悉以下术语:

·内核(Kernel)

·Shell

·终端(Terminal)

推荐学习LINUX应用及核心技术演练课程,参考本课程您将深入的了解Linux,很好的梳理Linux中的概念。

 

什么是内核?

内核是一个计算机程序,它是计算机操作系统的核心,可以完全控制系统中的一切。它管理Linux系统的以下资源–

·文件管理

·过程管理

·I/O管理

·内存管理

·设备管理等。

 

人们经常误解,Linus Torvalds开发了Linux操作系统,但实际上,他只负责Linux内核的开发。

完整的Linux系统=内核+GNU系统实用程序和库+其他管理脚本+安装脚本。

 

什么是Shell

shell是一种特殊的用户程序,为用户提供使用操作系统服务的接口。Shell接受用户的可读命令,并将它们转换为内核可以理解的内容。它是一种命令语言解释器,执行从输入设备(如键盘)或文件读取的命令。shell在用户登录或启动终端时启动。


 


Shell大致分为两类——

·命令行Shell

·图形化Shell

命令行Shell

用户可以使用命令行界面访问Shell。在Linux/macOS中提供了一个名为Terminal的特殊程序,或在Windows OS中提供的命令提示符,以键入人类可读的命令,如“cat”、“ls”等,然后执行它。然后将结果显示在终端上给用户。Ubuntu 16.4系统中的终端如下所示–


 

 

在上面的屏幕截图中,执行带有“-l”选项的“ls”命令。它将以长列表格式列出当前工作目录中的所有文件。

对于初学者来说,使用命令行shell有点困难,因为很难记住这么多命令。它非常强大;它允许用户将命令存储在文件中,并一起执行它们。这样,任何重复的任务都可以轻松地自动化。这些文件在Windows中通常称为批处理文件,在Linux/macOS系统中称为Shell脚本。

 

图形ShellGraphical Shells)

图形Shell通过允许打开、关闭、移动和调整窗口大小等操作,以及在窗口之间切换焦点,提供了基于图形用户界面(GUI)的程序操作方法。Window OS或Ubuntu OS可以被认为是一个很好的例子,它为用户提供了与程序交互的GUI。用户不需要为每个操作键入命令。Ubuntu系统中的典型GUI–


 

 

有几种Shell可用于Linux系统,如–

BASH(Bourne Again SHell)–它是Linux系统中使用最广泛的SHell。它在Linux系统和macOS中用作默认登录shell。它也可以安装在Windows操作系统上。

CSH(C SHell)–C SHell的语法及其用法与C编程语言非常相似。

KSH(Korn SHell)–Korn SHell也是POSIX SHell标准规范等的基础。

每个shell执行相同的工作,但理解不同的命令,并提供不同的内置函数。

 

什么是终端?

一种程序,负责为用户提供一个接口,以便他/她可以访问shell。它基本上允许用户输入命令,并在基于文本的界面中查看这些命令的输出。为自动化和执行复杂任务而编写的大型脚本在终端中执行。

要访问终端,只需在搜索框“终端”中搜索并双击它。


 

 

在这里,您可以看到Red Hat Linux的终端外观。

 

 

 

Shell脚本

通常,shell是交互式的,这意味着它们接受命令作为用户的输入并执行它们。然而,有时我们希望定期执行一系列命令,因此我们必须每次在终端中键入所有命令。

由于shell也可以从文件中获取命令作为输入,所以我们可以将这些命令写入文件中,并可以在shell中执行它们,以避免这种重复工作。这些文件称为Shell脚本或Shell程序。Shell脚本类似于MS-DOS中的批处理文件。每个shell脚本都以`.sh`文件扩展名保存,例如myscript.sh。

shell脚本与任何其他编程语言一样具有语法。如果您以前有任何编程语言(如Python、C/C++等)的经验,那么开始使用它将非常容易。

shell脚本由以下元素组成–

·外壳关键词–if、else、break等。

·Shell命令–cd、ls、echo、pwd、touch等。

·功能

·控制流–如果..那么..否则,外壳和外壳循环等。

 

为什么需要shell脚本?

编写shell脚本有许多原因:

·避免重复工作和自动化

·系统管理员使用shell脚本进行例行备份。

·系统监控

·向外壳添加新功能等。

 

shell脚本的一些优点

·命令和语法与直接在命令行中输入的命令和语法完全相同,因此程序员不需要切换到完全不同的语法

·编写shell脚本要快得多

·快速入门

·交互式调试等。

 

shell脚本的一些缺点

·容易发生代价高昂的错误,一个错误就可以改变可能有害的命令。

·执行速度慢

·语言语法或实现中的设计缺陷

·不适合大型复杂任务

·提供与其他脚本语言不同的最小数据结构。等。

 

使用BashShell编写shell脚本的简单演示

如果您在终端上工作,则需要在目录的深处遍历某些内容。然后,对于路径中接下来的几个目录,我们必须执行如下所示的命令,以访问“python”目录:


 

这是相当令人沮丧的,所以为什么不可以有一个实用程序,我们只需键入目录的名称,我们可以直接跳到那里,而不必反复执行“cd../”命令。将脚本另存为“jump.sh”

 

Bash:

 

# !/bin/bash

 

# A simple bash script to move up to desired directory level directly

 

function jump()

{

    # original value of Internal Field Separator

    OLDIFS=$IFS

 

    # setting field separator to "/"

    IFS=/

 

    # converting working path into array of directories in path

    # eg. /my/path/is/like/this

    # into [, my, path, is, like, this]

    path_arr=($PWD)

 

    # setting IFS to original value

    IFS=$OLDIFS

 

    local pos=-1

 

    # ${path_arr[@]} gives all the values in path_arr

    for dir in "${path_arr[@]}"

    do

        # find the number of directories to move up to

        # reach at target directory

        pos=$[$pos+1]

        if [ "$1" = "$dir" ];then

 

            # length of the path_arr

            dir_in_path=${#path_arr[@]}

 

            #current working directory

            cwd=$PWD

            limit=$[$dir_in_path-$pos-1]

            for ((i=0; i<limit; i++))

            do

                cwd=$cwd/..

            done

            cd $cwd

            break

        fi

    done

}

 

目前,我们无法执行shell脚本,因为它没有权限。我们必须通过键入以下命令使其可执行–

 

$ chmod +x path/to/our/file/jump.sh

 

现在,为了在每个终端会话上都可用,我们必须将其放在“.bashrc”文件中。

“.bashrc”是一个shell脚本,每当以交互方式启动时,Bashshell就会运行该脚本。.bashrc文件的目的是提供一个地方,您可以在这里设置变量、函数和别名,定义提示,并定义每当打开新的终端窗口时要使用的其他设置。

现在打开终端并键入以下命令:

 

$ echo “source ~/path/to/our/file/jump.sh”>> ~/.bashrc

 

现在打开您的终端,通过键入以下命令来尝试新的“跳转”功能-

 

$ jump dir_name

 

就像下面的屏幕截图:

 

 

Linux核心技术

在Linux操作系统、vim、shell、docker、k8s的混乱中感到迷失?中培IT学院的LINUX应用及核心技术演练课程将成为您掌握Linux核心应用技巧的终极指南!本课程除了能够使学员掌握Linux Bash Shell脚本编程实践能力、提升对复杂Linux Bash Shell脚本的阅读理解、编写能力以外,还涉及了广泛的Linux核心技术,包括:vim、Linux常见应用环境部署和docker、k8s等的实践技术。课程由业内Linux权威讲师授课,实践与案例穿插进行,为广大学员提供了不可多得的Linux环境时间技术,开拓技术视野。

 

近期开班:

12月21-23日·杭州

5月27-29日·广州

录播随时可学,可定制入企培训

标签: linux

近期开班