当前位置:网站首页>shell 编程规范与变量
shell 编程规范与变量
2022-07-30 13:05:00 【行走DI五花】
目录
十三、 shell脚本编写本地yum仓库及恢复公共yum仓库
一、shell脚本概述
1、shell的功能
Shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当“翻译官”的角色,负责接收用户输入的操作命令并进行解释,将需要执行的操作传递给内核执行,并输出执行结果返回给用户
2、shell脚本应用场景
①重复性操作
②交互性任务
③批量事务处理
④服务运行状态监控
⑤定时任务执行
.............................
3、shell 脚本的构成
①脚本的声明(使用的解释器)例如“#!/bin/bash” (表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器)
②注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。
③可执行语句。

ER
二、shell脚本的执行方法
①先给文件一个执行权限(+x),然后指定绝对路径或者相对路径执行

②sh+脚本路径,可不赋予执行权限

③source+ 脚本路径,可不赋予执行权限

注:source加载的是全局的环境。sh和路径方式实现加载的是脚本环境。
三、管道符“|”的使用
管道符作用:将管道符号“|”左侧的命令输出的结果,作为右侧命令的(处理对象)输入,同一行命令中可以使用多个管道组合使用。
例如:echo "123123" | passwd --stdin lisi

四、重定向
| 类型 | 设备文件 | 文件描述编号 | 默认设备 |
| 标准输入 | /dev/stdin | 0 | 键盘 |
| 标准输出 | /dev/stdout | 1 | 显示器 |
| 标准错误输出 | /dev/stderr | 2 | 显示器 |
| 类型 | 操作符 | 用途 |
| 重定向输入 | < | 从指定的文件读取数据 |
| 重定向输出 | > | 将标准输出结果 保存 到指定的文件,并且覆盖原有内容 |
| >> | 将标准输出结果 追加 到指定的文件的尾部,不覆盖原有内容 | |
| 标准错误输出 | 2> | 将错误信息 保存 到指定的文件,并且覆盖原有内容 |
| 2>> | 将错误信息 追加 到指定的文件的尾部,不覆盖原有内容 | |
| 混合输出 | &> | 将标准输出、标准错误保存到同一文件中 |
| 2>&1 | 将标准错误输出重定向到标准输出 | |
| 1>&2 | 将标准输出重定向到标准错误输出 |
例如:



五、 变量的分类
①环境变量:由系统维护,用于设置工作环境

特殊环境变量:

②位置变量:通过命令行给脚本程序传递参数

③自定义变量:由用户自己定义、修改和使用

④预定义变量:Bash中内置的一类变量,不能直接修改

预定义变量是由 Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用"$"符号和另一个符号组合表示
$#:表示命令行中位置参数的个数。
$*:表示所有位置参数的内容,这些内容当做一个整体
[email protected]:表示列出所有位置参数,但是是以单个的形式的列出
$?:表示前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非0值均表示执行出现异常
$0:表示当前执行的脚本或程序的名称
$$:表示返回当前进程的进程号
$!:返回最后一个后台进程的进程号

⑤定义新的变量
格式:变量名=变量值
变量命名规则:以字母或下划线开头,区分大小写
查看变量的值:格式:echo $变量名

取消定义的变量 unset+变量名

六、赋值时使用引号的含义
双引号:允许通过$符号引用其他变量值(将会对引号内的变量进行转义输出)
单引号:禁止引用其他变量值,$视为普通字符(能屏蔽引号内的一切特殊符号的含义,仅作为字符串输出)
反撇号:命令替换,提取命令执行后的输出结果,`…`和$(…)作用相同(把反撇号内的作为执行命令进行输出)


七、变量作用范围
①默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时,局部变量将无法再使用
②export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用
export 变量名=变量值

八、read命令获取输入内容
在使用read命令时可以得到一个交互界面
格式:read -p "提示信息" 变量名
echo $变量名


九、 整数变量的运算
整数运算有: expr 、$(()) 、$[]、let
1、格式:expr 变量1 运算符 变量2 [运算符 变量3]
PS:在使用expr运算时,命令字、变量、运算符之间都需要空格,且使用乘法”*“时需要配合”\“使用,禁止转义。
运算符:+ 加法、- 减法、\* 乘法、/ 除法、% 取余(\:表示不对特殊符号进行转义“*”原本为通配符,代表0或所有,在这里仅表示乘号)

2、let 运算
PS:命令字、变量、运算符之间都不需要空格,且使用乘法”*“时不需要配合”\“使用

设置 i=1
i++ /i-- 表示在使用i之后,使i的值加或者减1
++i /--i 表示在使用i之前,使i的值加或者减1
i+=2 相当于 使i的值加2



3 、$(()) 运算
PS:命令字、变量、运算符之间都不需要空格,且使用乘法”*“时不需要配合”\“使用,但$(())进行运算时需要配合echo 才能输出


4、$[] 运算
PS:命令字、变量、运算符之间都不需要空格,且使用乘法”*“时不需要配合”\“使用,但运算时需要配合echo 才能输出

十、 小数变量的运算
格式:echo "scale=n;$A+$B" | bc
表示自定义保留几位小数,命令字、变量、运算符之间都不需要空格,且使用乘法”*“时不需要配合”\“使用,但运算时需要配合echo 才能输出
PS:小数取几位的方法只能准确定位在除法上,其他的都要分情况而定。在进行除法使scale缺省代表只保留整数部分。

ps 截取小数后几位的方法:printf '%...f\n' 目标数

做整数的幂的运算和其他算法表示方法不一样,需注意。
bc 可以做逻辑运算,真为1,假为2
十一、read -p
在脚本中的作用:为了提供一个人机交互的界面。供用户输入。
十二、shell脚本求圆形面积
1、使用交互式的方式定义一个圆的半径,然后写一个脚本求圆的面积(面积=πr**2;π=3.14)

验证:

2、 使用交互式的方式定义一个圆的直径,然后写一个脚本求圆的面积

十三、 shell脚本编写本地yum仓库及恢复公共yum仓库


恢复公共yum仓库的shell脚本


总结:
学习shell的概念,各种shell脚本能够用到的命令及编写规范
边栏推荐
- 一本通循环结构的程序设计题解(2)
- leetcode207.课程表(判断有向图是否有环)
- dolphinscheduler simple task definition and complex cross-node parameter transfer
- How to display an Excel table in the body of an email?
- 句柄与指针的简单理解
- Anaconda\Scripts\pip-script.py is not present ? 解决方案
- 一本通循环结构的程序设计第一章题解(1)
- Heshu Group: Make smart cities smarter and make real life better
- R语言ggstatsplot包grouped_ggwithinstats函数可视化分组小提琴图、并添加假设检验结果(包含样本数、统计量、效应大小及其置信区间、显著性、组间两两比较、贝叶斯假设)
- 机器学习——特征选择
猜你喜欢

学习笔记——七周成为数据分析师《第二周:业务》:业务分析指标

一文读懂Elephant Swap,为何为ePLATO带来如此高的溢价?

shell脚本流程控制语句

jsArray数组复制方法性能测试2207300040

Raja Koduri澄清Arc GPU跳票传闻 AXG年底前新推四条产品线

【Kaggle比赛常用trick】K折交叉验证、TTA

OpenHarmony环境搭建报错: ImportError: cannot import name ‘VERSION‘ from ‘hb.__main__‘

Why is Prometheus a monitoring artifact sufficient to replace Zabbix?

学习笔记——七周成为数据分析师《第一周:数据分析思维》

一本通循环结构的程序设计第一章题解(1)
随机推荐
R语言向前或者向后移动时间序列数据(自定义滞后或者超前的期数):使用dplyr包中的lag函数将时间序列数据向后移动一天(设置参数n为负值)
每天学一点Scala之 伴生类和伴生对象
群晖系统安装相关文件分享
【自校正控制】自校正PID
R语言ggplot2可视化:使用ggpubr包的ggmaplot函数可视化MA图(MA-plot)、设置label.select参数自定义在图中显示标签的基因类型(自定义显示的标签列表)
Go 事,Gopher 要学的数字类型,变量,常量,运算符 ,第2篇
ModelCoder状态机:对柴油机工况判断策略进行建模
阿里 P7 到底是怎样的水平?
如何将EasyCVR平台RTSP接入的设备数据迁移到EasyNVR中?
05 | 后台登录:基于账号密码的登录方式(下)
域名抢注“卷”到了表情包?ENS逆势上涨的新推力
力扣——15. 三数之和
【23考研】408代码题参考模板——顺序表
Hand tearing read-write lock performance test
Raja Koduri澄清Arc GPU跳票传闻 AXG年底前新推四条产品线
dolphinscheduler添加hana支持
MySQL【排序与分页】
手撕读写锁性能测试
奇异值分解(SVD)原理与在降维中的应用(附带例题讲解)(纯理论)
第42讲:Scala中泛型类、泛型函数、泛型在Spark中的广泛应用