当前位置:网站首页>Shell编程规范与变量
Shell编程规范与变量
2022-06-22 17:55:00 【成为最好的梅西】
目录
1、Shell脚本的概念
- 将要执行的命令按顺序保存到一个文本文件
- 给该文件可执行权限
- 可结合各种Shell控制语句以完成更复杂的操作
2、Shell脚本应用场景
- 重复性操作
- 交互性任务
- 批量事物处理
- 服务进行状态监控
- 定时任务执行
- .......
3、Shell的作用——命令翻译器,“翻译官”
- 介于系统内核与用户之间,负责解释命令行

二、用户的登录shell

三、shell脚本的构成
- 脚本申明(解释器):若第一行为“#!/bin/bash” ,表示此行一下的代码语句是通过/bin/bash程序来结实执行,#!/bin/bash为默认解释器,还有其他类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
- 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时将不被执行。
- 可执行语句:比如echo命令,用于输出“ ”之间的字符串。
四、shell脚本的执行
方法一:脚本文件路径(绝对路径与相对路径)

方法二:sh 脚本文件路径

方法三: source 脚本文件路径

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


六、Shell脚本变量
1、变量的作用
- 用来存放系统和用户需要使用的特定参数(值)
- 变量名:使用固定的名称,由系统预设或用户定义
- 变量值:能够根据用户设置、系统环境的变化而变化
2、变量的分类
- 自定义变量:由用户自己定义、修改和使用
- 环境变量:由系统维护,由于设置工作环境
- 只读变量:用于变量值不允许被修改的情况
- 位置变量:通过命令行给脚本程序传递参数
- 预定义变量:bash中内置的一类变量,不能直接修改
七、自定义变量
1、定义新变量:

- 命名规则:以字母或下划线开头,区分大小写(建议大写)
2、查看变量的值:

3、赋值时使用引号
| 双引号 | 允许通过$符号引用其他变量值 |
| 单引号 | 禁止引用其他变量值, $视为普通字符 |
| 反撇号 | 命令替换,提取命令执行后的输出结果,``和$(…)作用相同 |

4、read命令获取输入内容
- 方法一:
read -p "提示信息" 变量名 echo $"变量名"
- 方法二:
echo -n "提示信息" read 变量名 echo $变量名
5、变量作用范围
- 默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时,局部变量将无法再使用。
- 可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。
格式1:export 变量名
格式2:export 变量名=变量值
可以使用 pstree 命令查看Shell环境,输入 bash 命令进入子Shell环境,按Ctrl+D组合键或输入 exit 命令退出子Shell环境。
6、整数变量的运算
格式:expr 变量1 运算符 变量2 (运算符 变量3)
运算符: + 加法、- 减法、* 乘法、/ 除法、% 取余
常用的运算表达式:
i=$(expr 10 \* 3)
i=$((10 * 3))
i=$[10 * 3]
let i=10*3
i++ 相当于 i=$[$i+1]
i-- 相当于 i=$[$i-1]
i+=2 相当于 i=$[$i+2]
7、浮点运算(需借助bc,awk处理)
①、bc


②、awk


八、环境变量
- 使用 env 命令可以查看到当前工作环境下的环境变量
- 变量USER表示用户名称,HOME表示用户的宿主目录,LANG表示语言和字符集,PWD表示当前所在的工作目录,变量PATH表示可执行程序的默认搜索路径。

九、只读变量
- 用于变量不允许被修改的情况

十、位置变量
- 当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
- $n:n为数字,$0代表命令本身,1~9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}。


十一、预定义变量
$*、[email protected]:表示命令或脚本要处理的参数。
$*:把所有参数看成以空格分隔的一个字符串整体,代表"$1 $2 $3 $4"。
[email protected]:把各个参数加上双引号分隔成n份的参数列表,每个参数是独立 的,代表"$1" "$2" "$3" "$4"。
$0:表示当前执行的脚本或命令的名称。
$#:表示命令或脚本要处理的参数的个数。
$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。


边栏推荐
- Babbitt | yuancosmos daily must read: it is said that Tencent has established XR department, and yuancosmos sector has risen again. Many securities companies have issued reports to pay attention to th
- 牛客网:合并区间
- 2年狂赚178亿元,中国游戏正在“收割”老外
- chrome突然无法复制粘贴了
- Centeros install mangodb
- Complete the sqlsession interface and implementation classes
- PostgreSQL reconfigure from library
- 缓存3种方式及原理
- Golang 實現 Redis(10): 本地原子性事務
- 《被讨厌的勇气》读后感
猜你喜欢

IPLOOK作为O-RAN联盟会员,将共同促进5G产业发展

Some preliminary explorations of avoiding obstacles and finding paths by rays in unity

Interview MySQL

一款支持HomeKit的摄像头?智汀 IPC摄像头IC1开箱体验

运维、监控、AIOps的几个重要观点

AUTOCAD——五种标注快捷键

IPLOOK 5GC与亚信国际CHF(计费功能)对接成功

RobotFramework 安装教程
Notes on Combinatorics (V) chains in distributive lattice

加工制造业智慧采购系统解决方案:助力企业实现全流程采购一体化协同
随机推荐
IPLOOK作为O-RAN联盟会员,将共同促进5G产业发展
一些技术想法:
exness整理马斯克收购推特需要解决三个问题
有效的括号
std::enable_shared_from_this 错误:error: expected template-name before ‘<’ token
Getting started with database connection pooling (c3p0, Druid)
最长公共子序列
贪心之分配问题(1)
Some preliminary explorations of avoiding obstacles and finding paths by rays in unity
wpa_supplicant的状态机迁移
Pre training language model, Bert, roformer SIM, also known as simbertv2
实现领域驱动设计 - 使用ABP框架 - 解决方案概览
中国两颗风云气象“新星”数据产品向全球用户共享
如何更改Apple Watch上的表盘
jniLibs. Srcdirs = ['LIBS'] what's the use?
预训练语言模型,bert,RoFormer-Sim又称SimBERTv2
UE4_UE5制作3DUI-跟随相机朝向(附工程)
贪心之区间问题(3)
【建议收藏】消息队列常见的使用场景
postman学习

