一:为什么要学习shell
Shell脚本是一种编程语言,用于编写命令行环境下的脚本程序。它可以用于执行一系列操作、自动化任务、批量处理文件等等。Shell脚本是Linux和UNIX系统管理员的常用工具之一,也是软件开发人员的必备技能之一.
学习shell有什么价值
- 学习shell的同时也会学习到Linux服务器的基本操作和管理,这个技能对于软件开发人员是必备的.
- 在学习shell的同时,也能接触和学习前端Node.js服务的进程管理、问题排查、资源监控等运维操作
- 学习shell以后可以使用 shell编写TCE、SCM、Docker脚本,完成服务编译和部署
总之: 学习Shell脚本编程可以帮助你更好地管理和操作系统,提高工作效率,同时也是学习编程的一个良好起点。对于软件开发人员来说也可以说是必须学习.
二: 语法和命令
变量类型
在shell中,有三种类型的变量:自定义变量、环境变量和系统环境变量。它们的作用和范围略有不同。
在shell中,可以使用“source”命令来在当前shell环境下执行一个脚本文件。这样,所有在脚本文件中定义的环境变量和自定义变量都会在当前shell环境中生效。如果直接运行脚本文件,会在一个新的子shell环境中执行,变量的作用域将不同。
| 类型 | 作用域 | 声明方式 | 规范 |
|---|---|---|---|
| 自定义变量 | 当前shell | = | 字符串,整型,浮点数,日期类型 |
| 环境变量 | 当前shell及其子shell | export, decalre -x | |
| 系统环境变量 | 所有shell | 启动加载 |
父进程和子进程:每次启动一个新的shell时,都会创建一个新的子shell进程。这个子shell进程可以访问父shell进程中的环境变量和自定义变量,但是它不能修改父shell中的变量。当子shell进程退出时,父shell进程会继续运行。
- 自定义变量:在shell脚本中,可以自定义变量来存储数据。自定义变量只在当前shell进程中可用。可以通过“=”符号赋值,例如:
makefileCopy code
message="Hello, World!"
- 环境变量:环境变量是一种全局变量,可供所有的shell进程使用。在shell中,使用“export”命令将一个自定义变量升级为环境变量,例如:
arduinoCopy code
export message="Hello, World!"
- 系统环境变量:系统环境变量是由操作系统设置的环境变量。这些变量通常包含有关系统配置和路径的信息,例如:
javascriptCopy code
PATH=/usr/local/bin:/usr/bin:/bin
- declare[+/-] 选项 变量
| 选项 | 含义 |
|---|---|
| - | 给变量设定类型属性 |
| + | 取消变量的类型属性 |
| -a | 将变量声明为数组类型 |
| -i | 将变量声明为整数型 |
| -x | 将变量声明为环境变量 |
| -r | 将变量声明为只读变量 |
| -p | 显示指定变量的被声明的类型 |
#! / bin/ bash
#变量名=变量值(等号左右不能有空格)
page_size=1
page_num=2
#将命令复制给变量
_1s=ls
# 将命令结果赋值给变量
file_list=$ ( ls -a)12
#默认字符串,不会进行+运算
total=page_size*page_num15
#声明变量为整型
let total=page_size*page_num18
declare -i total=page_size*page_num20
#导出环境变量
export total
declare -x total
运算符
- 算术运算符:可以用于对整数和浮点数执行算术运算,例如加法、减法、乘法和除法。常见的算术运算符包括加号(+)、减号(-)、乘号(*)、除号(/)和求余数(%)。
- 关系运算符:可以用于比较两个值是否相等或大小关系。常见的关系运算符包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)和小于等于(<=)。
- 逻辑运算符:可以用于组合和比较多个条件语句。常见的逻辑运算符包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。
- 字符串运算符:可以用于比较和操作字符串。常见的字符串运算符包括字符串相等(=)和字符串不相等(!=)。
- 文件测试运算符:可以用于测试文件的各种属性,如是否存在、是否可读、是否可写等。常见的文件测试运算符包括文件存在(-e)、文件可读(-r)、文件可写(-w)和文件可执行(-x)。