# Shell 脚本和编程

88 阅读3分钟
title: Shell 脚本和编程
date: 2023-05-12 17:45:36
tags: Shell

Shell 脚本和编程

Shell基本概念

学习shell 的价值: 1.Linux服务器的基本操作和管理 2.前端Node.js服务的进程管理、问题排查、资源监控等运维操作 3.使用shell 编写TCE、SCM、 Docker 脚本,完成服务编译和部署

...

命令和语法

Shell是一种命令行解释器,它提供了一种与操作系统内核进行交互的方式。大多数Unix和Unix-like系统都支持shell,它们的语法和命令略有不同,但基本思想和使用方法相同。

Shell的语法主要包括:

  1. 命令:Shell中最基本的概念是命令,可以是系统提供的或用户自定义的。命令可以接受参数,并且也可以被组合起来形成管道或重定向等复杂的操作。
  2. 变量:Shell支持变量,变量可以保存一些值或者字符串,可以通过echo命令输出等操作。
  3. 控制结构:Shell支持if、for、while等控制结构,这些结构可以帮助我们更好地控制程序流程。
  4. 函数:Shell支持函数,可以将一些相同的代码封装在函数里面,以便于重复调用或者模块化使用。

Shell的常用命令包括:

  1. cd:进入到指定的目录。
  2. ls:列出指定目录下的文件和目录。
  3. rm:删除指定文件或目录。
  4. cp:复制文件或目录。
  5. mv:移动文件或目录。
  6. mkdir:创建新的目录。
  7. cat:将文件内容输出到终端。
  8. echo:输出文本或变量的值到终端。
  9. grep:搜索指定的文本。
  10. sed:对文本进行编辑和替换。

变量

类型作用域声明方式规范
自定义变量当前shell=(隐式声明)字符串、整型、浮点型、日期型
环境变量当前shell及其子shellexport declare -x(显示声明)
系统环境变量所有shell启动加载

管道

Shell中的管道是一种非常有用的特性,它可以将多个命令连接起来,并且将前一个命令的输出作为后一个命令的输入,在实现复杂的操作时非常方便。

管道使用“|”符号来表示,例如:

$ command1 | command2

上面的命令会先执行command1,将其输出传递给command2进行处理。在这个过程中,command1和command2可以是任何Shell支持的命令。

管道可以被嵌套使用,例如:

$ command1 | command2 | command3

这个命令会先执行command1,将其输出传递给command2,command2的输出再传递给command3进行处理。

使用管道可以实现很多强大的操作,例如:

  1. 过滤:通过管道,我们可以将某个命令的输出作为过滤条件来筛选出需要的结果。例如:

    $ ls -l | grep ".txt"
    

    上面的命令会将当前目录下所有以“.txt”结尾的文件列出来。

  2. 统计:通过管道,我们可以对输出结果进行统计分析,例如:

    $ ps aux | wc -l
    

    上面的命令会统计当前系统进程的数量。

  3. 排序:通过管道,我们可以对输出结果进行排序,例如:

    $ cat file.txt | sort
    

    上面的命令会将file.txt中的内容按照字母顺序排序。

重定向

Shell中的重定向是一种用来控制标准输入、标准输出和标准错误的方法,可以将这些流定向到文件或者其他设备上。在Shell中,有三个标准的文件描述符:

  1. 标准输入(stdin):文件描述符为0,表示Shell从该文件中获取输入。
  2. 标准输出(stdout):文件描述符为1,表示Shell将输出写入该文件中。
  3. 标准错误(stderr):文件描述符为2,表示Shell将错误信息写入该文件中。

Shell提供了如下的重定向操作符:

  1. :将输出重定向到指定的文件中,会覆盖原有文件内容。

    $ command > file.txt
    
  2. :将输出重定向到指定的文件中,不会覆盖原有文件内容,而是在文件末尾追加。

    $ command >> file.txt
    
  3. 2>:将错误信息重定向到指定的文件中。

    $ command 2> error.txt
    
  4. 2>&1:将错误信息和标准输出合并,并重定向到指定的文件中。

    $ command > output.txt 2>&1
    
  5. <:将指定文件的内容作为命令的输入。

    $ command < input.txt
    

重定向可以让我们更好地控制Shell的输入和输出,使得程序的运行更加灵活。在Shell编程中,重定向常被用来将命令的输出保存到文件中,或者将文件的内容读取为命令的输入。

执行过程和原理

...

调试和前端集成

...