SHELL 编程规范与变量
shell
将人类使用的高级语言 翻译成二进制,也可以二进制翻译成高级语言
人类写了一个命令集合,然后用bash(shell)去翻译给 硬件执行
shell 脚本的概念#
将要执行的命令按顺序保存到一个文本文件
给该文件可执行权限
可结合各种shell控制语句可以完成更复杂的操作
应用场景#
重复操作
加户型任务
批量事务处理
服务运行状态监控
定时任务执行
默认:/bin/bash
面向过程语言:开发的时候 需要一步一步执行 (慢)
面向对象语言:开发的时候 将任务当成一个整体 (快)
三种处理逻辑#
顺序执行:程序按从上到下顺序执行
选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
循环执行:程序执行过程中需要重复执行多次某段语句(已知次数 已知条件 死循环)
#
1、声明的解释器
2、注释信息
3、执行命令
#不用 .sh结尾
#没有高亮
#.sh结尾
#有高亮
执行脚本#
1、直接调用shell解释器,加上脚本的名字 bash 脚本名 不需要加上权限
2、路径/脚本 路径;绝对相对 但是这个需要权限
3、source(.) 加脚本的名字, 不建议使用 不需要权限。 (会直接修改目前的环境内容,会有一些问题)
#没执行前还是a=10
#用source 修改了环境内容
实验 输入脚本名全局运行#
#将脚本与其中一个路径做软连接 全局,再给test.sh 执行权限。直接输入脚本名就可以全局执行。
shell 脚本的本质 程序
实验脚本 做本地yum#
#编辑脚本
#将建立本地yum 步骤输入脚本里
#执行脚本
脚本错误#
1、命令错误 :不会影响接下来的命令执行,但本条命令不执行
bash -x +脚本 (执行)
2、语法错误 : 直接影响脚本,无法正常运行
bash -n 检查语法错误 (提示的出错行数不一定是准确的)
3、逻辑错误 只能使用 bash -x 进行
加一些 脚本的安全选项
set -u 变量不存在不让执行
变量名=变量值
重定向#
类型 | 操作符 | 用途 |
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | 1> | 将输出结果保存到指定的文件(覆盖原有内容) |
>> | 将输出结果追加到指定的文件尾部 | |
标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
2>> | 标准错误输出结果追加到指定的文件尾部 | |
混合输出 | &>无论对错都可以重定向 | 将标准输出,标准错误的内容保存到同一个文件中 |
我们通过键盘 鼠标 扫描仪 话筒 等设备 输入给电脑的指令
我们称为:标准输入
tty #查看终端
改变输出 方向#
1、输出别的 终端设备
2、输出到文件中 (< >) ls > test (一个> =覆盖 两个>> = 追加)
| 管道符 :将第一个命令的结果 当作后一个命令的处理对象
变量#
常量: 值不可以变化
shell 部分 数据类型 所有 的数类型 都是字符串
变量名=变量值 两边没有空格
调用变量
echo $变量名
删除变量 unset 变量名
重新定义变量 变量名=变量值
追加变量值 变量名+=变量值
作用#
用来存放系统和用户需要使用的特定参数 (值)
变量名:使用固定的名称,由系统预定或用户定义
变量值:能够根据用户设置,系统环境的变化而变化
变量基础#
常见shell变量类型#
自定义变量:由用户自己定义,修改和使用
预定义变量: bash 中内置的一类变量 不能修改 规定好的变量 放在那里让你使用
环境变量:由系统维护,用于设置工作环境 当前目录 当前主机名 $PATH
只读变量:只可以读取不可以更改 只能修改 常量
位置变量 :通过命令行给脚本传递参数
echo $? 自定义变量
预定 :bash shell $? $$ $* $@ 程序中带的
环境变量 env 看到所有的环境变量
只读变量 只可以读不可以改
位置变量 $1 $2..$n
命名要求#
区分大小写
不能使用程序中的保留字和内置变量 如:if ,for ,hostname 命令
只能使用数字,字母及下划线,且不呢个以数字开头,注意:不支持短横线 ” -“ ,和主机名相反
不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
大驼峰 StudentFirstName
小驼峰 StudentFirstName
下划线 Student_name
特殊符号#
${} 定义的可以变量名的范围 ${ }一定不会错
"" 变量在双引号中可以识别 弱引用
'' 变量在单引号不被识别 强引用
`` 反撇号 代表引用命令执行的结果 效果等于$( )
变量追加#
#临时性
#小型计算器
整数变量运算#
expr 变量1 运算符 变量2 [运算符 变量3]
常用运算符#
加法运算:+
减法运算:-
乘法运算:、*
除法运算:/
取模(取余):%
export a=10 (加了export 当前进程以及后续子进程都会知道相对应的信息)
实验 脚本找 IP地址 主机名 系统版本 cpu型号 内存大小 磁盘大小#
#输入要执行脚本
#执行脚本
位置变量#
位置变量也成为位置参数,使用 $1、$2、$3、...、$9表示
#
$? 代表上一次命令执行结果是否正确 无法代表前前次。0 代表正确 非0代表不正确
$0 代表脚本本来的意思(名字)当前目录
$$ 代表当前bash的pid
$# 代表位置参数的总个数
$@ 代表返回所有参数 每一个参数都是一个独立的个体返回
$* 代表返回所有参数 所有参数当成一个整体返回
$!: 后台任务最后一个id
echo 打印在屏幕上 (写脚本的时候 对齐 不换行)
含义:回声
总结#
shell的作用与应用场景
shell脚本的编写规范与执行方法
重定向与管道符的作用与使用方法
自定义变量赋值时单引号、双引号、反撇号的使用方法
数值变量的常用运算符:+、-、\*、/、%
环境变量、只读变量、位置变量、预定义变量的用途
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?