学习shell的价值:
Linux服务器的基本操作和管理 前端Node.js服务的进程管理、问题排查、资源监控等运维操作 使用shell编写TCE、SCM、Docker脚本,完成服务编译和部署
课程准备
一台安装了 linux 系统的物理机或者云主机,可运行 shell 脚本 本地的 vscode 安装 Bash Debug 插件,并升级 bash 到4.x以上 Npm 全局安装 zx 依赖
Shell基本概念 概念 Shell(也称为命令行界面或终端)是一种通过文本输入和输出进行交互的计算机用户界面。它允许用户通过输入命令来执行操作、运行程序和管理系统 命令(Command):Shell通过输入命令来执行不同的操作或任务,例如创建文件、复制文件、移动文件、运行程序等。命令通常由命令名和参数组成,命令名指定要执行的操作,参数用于指定命令的具体操作方式或作用对象。 提示符(Prompt):Shell在等待用户输入命令时会显示一个提示符,通常是一个特殊的字符或字符串,表示Shell已经准备好接受命令输入。 文件系统(File System):Shell可以用于管理计算机上的文件和目录,包括创建、复制、移动、删除、重命名、查看等操作。Shell使用文件系统的路径来定位文件和目录,例如绝对路径(从根目录开始的完整路径)和相对路径(从当前目录开始的相对路径)。 管道(Pipeline):Shell允许将多个命令通过管道连接起来,其中一个命令的输出作为另一个命令的输入。这样可以实现多个命令的组合和协作,从而更加灵活地完成复杂的任务。 环境变量(Environment Variable):Shell使用环境变量来存储系统级别的配置信息、用户配置和运行时参数。环境变量可以在命令中使用,并且可以通过设置和修改来影响Shell的行为和操作。 脚本(Script):Shell允许用户编写一系列命令的脚本文件,以便将一组命令作为一个单独的程序运行。脚本可以包含条件语句、循环、函数等控制结构,从而实现更加复杂的自动化任务。 快捷键(Shortcut):Shell提供了许多快捷键和命令行编辑功能,用于提高命令行操作的效率和便捷性。例如,可以使用上下箭头键来浏览历史命令,使用Tab键进行命令和文件名的自动补全,使用Ctrl+C来中断正在执行的命令 命令
类型作用域声明方式规范自定义变量当前shell=(隐式声明)字符串、整型、浮点型、日期型环境变量当前shell及其子shellexport declare -x(显示声明)系统环境变量所有shell启动加载
#表示当前脚本或函数的参数个数。在shell脚本中,可以通过#来获取当前脚本或函数的参数个数,并根据参数个数执行相应的操作。 *来获取当前脚本或函数的所有参数,并根据参数列表执行相应的操作。 ?来获取上一个命令的退出状态码,并根据状态码执行相应的操作。 PS1来自定义shell提示符的格式,以适应个人习惯或需求。 HOME来获取当前用户的主目录,并根据主目录执行相应的操作。 PATH来添加或删除系统的可执行文件路径,以便更方便地执行系统命令或自定义命令。
Unix shell既是一个命令解释器也是一种编程语言。作为命令解释器,shell为丰富的GNU工具集提供了用户接口。
#!/bin/bash
这是脚本文件的shebang,它告诉系统脚本文件使用哪种解释器来执行。在这个例子中,使用的是bash解释器
#变量名=变量值(等号左右不能有空格),定义了两个变量page_size和page_num,并分别给它们赋值为1和2 page size=1 page_num=2 #将命令复制给变量,这样可以通过变量名来执行命令。 _ls=ls #将命令结果赋值给变量,可以通过变量名来访问命令结果 file_list=$(ls -a) #默认字符串,不会进行 + 运算。所以total的值为"page_sizepage_num"字符串 total=page_sizepage_num #声明变量为整型(-i),后续的数值计算中,total会被当作整型来处理 let total=page_sizepage_num declare -i total=page_sizepage_num #导出环境变量,使得其在子进程中也可用 export total declare -x total