shell编程规范与变量

news2024/12/28 20:11:55

shell脚本编程规范

shell脚本概述

  • 将要执行的命令按顺序保存到一个文本文件
  • 给该文件可执行权限
  • 可结合各种Shell控制语句以完成更复杂的操作

Shell脚本应用场景

  • 重复性操作
  • 交互性任务
  • 批量事务处理
  • 服务运行状态监控
  • 定时任务执行

在这里插入图片描述

  • 什么是Shell
    就是与内核沟通的界面、应用程序等等。比如你要播放音乐,你的计算机通过你在shell输入的打开音乐的命令,Shell在告诉操作系统的内核用户希望打开音乐,内核在通过cpu调度、内存管理、磁盘输入输出等工作,将硬件调动,这时硬件声卡才会工作,硬件才是实际的工作者.

  • Shell(壳程序)
    是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器"的角色,负责接收用户输入的操作指令(命今) 并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

  • Linux中有哪些shell
    检查一下/etc/shells这个文件,里面就是Linux所包含的shell。
    最常用的就是bash、tcsh、csh、sh、nologin这些shell。这些shell都是依据Linux发展者的不同所创造出的不同版本
    1 bash: 基准于GNU的框架下发展出的shell。
    2 csh: 语法有点类似于c语言的shell。
    3 tcsh: 整合了csh,提供更多的功能。
    4 sh: 已经被bash所替换
    5 nologin: 奇怪的shell,这个shell可以让用户无法登录主机
    : bash (/bin/bash) 是目前大多数 Linux 版本采用的默认 Shell。
    在这里插入图片描述

  • 拓展知识:
    1 为什么系统上合法的shell要写入/etc/shells这个文件呢?
    这是因为系统某些服务运行过程中,会去检查用户能够使用的Shell,而这些shell的查询就是借由/etc/shells这个文件
    2 用户什么时候可以取得shell来工作?用户默认会取得哪一个shell?
    当用户登录的时候,系统就会给我一个shell让我来用,而这个登录取得的Shell就记录在/etc/passwd这个文件内

shell脚本的作用

  • 自动化运维
  • 批量化重复操作可以编写脚本结合计划任务自动周期运行
  • 减轻管理员工作量
  • 提高处理文本文件的速度
  • 避免配置出错

shell是一个面向字符串的编程语言,可以跟python之类的其他语言配合起来,比如某个复杂的功能使用一个Python脚本来实现,然后在shell中调用这个脚本实现较复杂的功能;或者反过来,在Python脚本中调用外部的Shell脚本来提高自动化的效率,也是可以的。

计算机编程语言
面向对象java ,python,C++,C#,Go
面向过程C语言,shell
强类型语言JAVA , C ,C++ ,C# , GO
弱类型语言python, Shell , PHP
编译型语言,执行前需要先编译,运行速度快JAVA , C ,C++ ,C# , GO
解释性语言,不需要编译即可直接执行,常用于作脚本python, Shell , PHP

编写shell脚本的规范

  • 1)脚本声明 若第一行为"#!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect
  • 2)注释信息 行首以#号开头定义注释信息,被注释的行内容将不会被执行
  • 3)可执行语句 编写要执行的脚本代码;比如echo命令,用于输出""之间的字符串

在这里插入图片描述

运行shell脚本

  • 1)用绝对路径或者相对路径指定脚本文件运行,需要执行用户拥有执行权限x,脚本会在子shell环境中运行(不会影响当前所在目录、变量的值 等因素)
  • 2)用 bash或者sh 程序指定脚本文件运行,不需要执行权限,脚本会在子shell环境中运行(不会影响当前所在目录、变量的值 等因素)
  • 3)用 source或者. 号指定脚本文件运行,脚本会在当前shell环境中运行(会影响当前所在目录、变量的值 等因素)
    在这里插入图片描述

在这里插入图片描述

重定向与管道操作

交互式硬件设备

  • 标准输入: 从该设备接收用户输入的数据
  • 标准输出: 通过该设备向用户输出数据
  • 标准错误: 通过该设备报告执行出错信息
类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器

重定向操作

类型操作符用途
重定向输入<从指定的文件读取数据,而不是键盘输入
重定向输出>将输出结果保存到指定的文件 (覆盖原有内容)
重定向输出>>将输出结果追加到指定的文件尾部
标准错误输出2>将错误信息保存到指定的文件 (覆盖原有内容
标准错误输出2>>将错误信息追加到指定的文件中
混合输出&>将标准输出、标准错误的内容保存到同一个文件中
混合输出2>&1将标准错误输出重定向到标准输出
  • 重定向输入和重定向输出
    在这里插入图片描述
    在这里插入图片描述- 标准错误输出

在这里插入图片描述

  • 混合输出
    在这里插入图片描述
    ls -lh xlog.txt 2>&1等同于ls -lh &> log.txt
    本来1–>屏幕(1指向屏幕)
    执行>log.txt后,1–>log.txt (1指向loq.txt)
    执行2>&1后,2–>1 (2指向1,而1指向log.txt,因此2也指向了log.txt)

管道符号“|”

将左侧命令输出的结果,作为右侧命令的处理对象
注意,有的右侧命令不能处理左侧的输出结果,这里要在“|”后面加上xargs
示例:find /opt -name “*.txt” | xargs ls -lh
在这里插入图片描述

shell脚本变量

  • 变量的作用
    用来存放系统和用户需要使用的特定参数(值)
    变量名:使用固定的名称,由系统预设或用户定义
    变量值: 能够根据用户设置、系统环境的变化而变化
  • 变量的类型
    自定义变量:由用户自己定义、修改和使用
    特殊变量: 环境变量,只读变量,位置变量,预定义变量

定义一个新的变量

  • 定义一个新的变量
    变量名必须以字母下划线开头,区分大小写,建议全大写
变量名=变量值
  • 查看变量的值
echo $变量名

在这里插入图片描述
通常来说,建议平时就一直加上“”号,省的到时候报错
在这里插入图片描述

赋值时使用引号

  • 双引号": 允许通过$符号引用其他变量值
  • 单引号 ': 禁止引用其他变量值,$视为普通字符
  • 反撇号`: 命令替换,提取命令执行后的输出结果(反撇号在键盘左上位置,在tab键上面)相当于$()

在这里插入图片描述在这里插入图片描述

  • 从键盘输入内容为变量赋值
    read [-p“提示信息”] 变量名
    vim second.sh
    在这里插入图片描述
    在这里插入图片描述

设置变量的作用范围

export 变量名-----临时有效,重启失效

在这里插入图片描述

  • 永久生效
vim /etc/profile

在这里插入图片描述

整数变量的运算

  • 1 expr 变量1 运算符 变量2 [运算符] [变量3]

常用运算符

常用运算符
加法运算+
减法运算-
乘法运算\ *
除法运算/
求模 (取余) 运算%

在这里插入图片描述
在这里插入图片描述

  • 2 echo $(( ))-----括号里面可以加空格也可不加

在这里插入图片描述

  • 3 echo $[ ] -----中括号里面可以加空格也可不加

在这里插入图片描述

  • 4 let 设置一个变量,然后echo输出
let i=10*3
echo  $i

在这里插入图片描述
拓展

在这里插入图片描述

特殊的ShelI变量

  • 环境变量
    由系统提前创建,用来设置用户的工作环境
    配置文件: /etc/profile、~/.bash_profile
  • 常见的环境变量
    PWD、PATH
    USER 、SHELL、HOME

在这里插入图片描述

如何把命令加入到环境变量中

  • 方法一:复制命令文件内容到环境变量的配置文件目录中
  • 方法二:将命令文件所在的目录加入到环境变量配置目录
vim /etc/profile

在这里插入图片描述
在这里插入图片描述

设置只读变量(用于变量值不允许被修改的情况,包括删除或取消,想删除重启)

readonly 变量名

在这里插入图片描述

位置变量

表示为$n,

vim /root/third.sh

在这里插入图片描述
在这里插入图片描述

预定义变量

$ * 、$ @: 表示命令或脚本要处理的参数。
$ * :把所有参数着成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4。
$ @: 把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表"$1”“$2””“$3"”$4”。

在这里插入图片描述
在这里插入图片描述

$0: 表示当前执行的脚本或命令的名称。
$#: 表示命今或脚本要处理的参数的个数。
$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。也常被用于Shell脚本中return退出函数并返回的退出值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/461540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[JAVA数据结构]顺序表ArrayList

目录 1.线性表 2.顺序表 3.ArrayList简介 4.ArrayList的使用 4.1ArrayList的构造方法 4.2ArrayList的常用操作 4.3ArrayList的遍历方法 4.4ArrayList的扩容机制 5.ArrayList的具体运用 ArrayList是一种基于数组的数据结构&#xff0c;是线性表的一种&#xff0c;也是…

[NLP]如何训练自己的大型语言模型

简介 大型语言模型&#xff0c;如OpenAI的GPT-4或谷歌的PaLM&#xff0c;已经在人工智能领域掀起了一场风暴。然而&#xff0c;大多数公司目前没有能力训练这些模型&#xff0c;而且完全依赖少数几家大型科技公司作为技术提供者。 在Replit&#xff0c;我们已经大量投资于所需…

linux-01-基础回顾-虚拟机安装linux(centos7)、linux常用命令

文章目录 Linux-Day01课程内容1. 前言1.1 什么是Linux1.2 为什么要学Linux1.3 学完Linux能干什么 2. Linux简介2.1 主流操作系统2.2 Linux发展历史2.3 Linux系统版本 3. Linux安装3.1 安装方式介绍3.2 安装VMware3.3 安装Linux3.4 网卡设置3.5 安装SSH连接工具3.5.1 SSH连接工具…

Neural ODE 神经常微分方程

Neural ODE ODE常微分方程 欧拉法求解&#xff1a;欧拉法求解过程是一个递归的过程&#xff0c;这个思想和牛顿法、梯度下降法是相似的。并且它将函数离散化&#xff0c;分割成一个个小段来求解。欧拉法求解的常微分方程的形式通常为 图片来自知乎Neural ODE&#xff0c;这个…

EventBus源码解析

文章目录 前言一、EventBus使用二、EventBus事件流程分析1.注册订阅者2.发布事件Event3.接收事件Event4.取消注册订阅者 三、发送粘性事件问答EventBus 以及它的优点EventBus原理 EventBus中设计模式为什么要使用 EventBus 来替代广播呢&#xff1f;说下 5 种线程模式的区别Eve…

进程、进程组、会话期

进程 在内核中&#xff0c;每个进程都使用一个不同的大于零的正整数来标识&#xff0c;称为进程号pid&#xff08;process ID&#xff09;。 进程组 一个进程可以通过 fork() 调用创建一个或多个子进程&#xff0c;这些进程就可以构成一个进程组。例如&#xff0c; liyongj…

UE4架构初识(四)

目录 UE4仿真引擎学习 一、架构基础 1. GameMode 2. GameState 3. GameSession UE4仿真引擎学习 一、架构基础 1. GameMode 即使最开放的游戏也拥有基础规则&#xff0c;而这些规则构成了 Game Mode。在最基础的层面上&#xff0c;这些规则包括&#xff1a; 出现的玩家和…

深度赋能产业数字化转型,蚂蚁集团数字化三件套亮相中国国际金融展

“十四五”规划纲要指出&#xff1a;加快推动数字产业化&#xff0c;推进产业数字化转型&#xff0c;实施“上云用数赋智”行动&#xff0c;推动数据赋能全产业链协同转型。明确提出了通过科技创新&#xff0c;加快产业数字化转型的要求。 4月25日&#xff0c;以“荟萃金融科技…

Flowable打印调用原生API查询接口的SQL日志

一.简介 建议在 Spring Boot 的 application.properties 中添加如下配置&#xff0c;开启 flowable 日志&#xff1a; logging.level.org.flowabledebug这个配置表示开启 flowable 的日志&#xff0c;开启日志的好处是可以看到底层的 SQL语句。 二.查询部署信息 例如查询流…

【python中的魔法方法有哪些?】

__init__(self, ...): 类的构造函数&#xff0c;用于创建一个类的实例并初始化它的属性。__str__(self): 返回对象的字符串表示形式&#xff0c;可以用于打印对象或者转化成字符串。__repr__(self): 返回对象的字符串表示形式&#xff0c;通常是用于开发者调试和查看对象信息。…

4.24~25(总结)

第一周任务 - Virtual Judge 分析&#xff1a;这道题开始想错了&#xff0c;所以错了一次。后来又仔细读了一遍题&#xff0c;才发现&#xff0c;要是最长的那个排序子数组&#xff0c;所以第二次就做出来了&#xff0c;它其实应该分为两大块&#xff0c;第一块找左边的起点&a…

HTTPS (HTTP+SSL) 对称/非对称加密 中间人攻击 证书加密

&#x1f496; 欢迎来阅读子豪的博客&#xff08;JavaEE篇 &#x1f934;&#xff09; &#x1f449; 有宝贵的意见或建议可以在留言区留言 &#x1f4bb; 欢迎 素质三连 点赞 关注 收藏 &#x1f9d1;‍&#x1f680;码云仓库&#xff1a;补集王子的代码仓库 不要偷走我小火…

“源擎”云原生分布式核心业务系统有什么产品优势?

“源擎”核心系统利用云原生、分布式、微服务技术&#xff0c;基于企业架构设计思想&#xff0c;构建了基础服务、业务服务、交易中心以及系列支撑组件&#xff0c;包含业务架构和多个微服务应用。 业务架构中&#xff0c;交易中心为银行提供了更灵活的选择&#xff0c;支持产…

出现Invalid bound statement (not found)问题的解决办法(已解决)

前言&#xff1a; 今天在写项目时出现了Invalid bound statement (not found):xxxx这个问题&#xff0c;网上找了很多博客都不行&#xff0c;最后修改了配置文件解决了问题&#xff0c;借此将此类问题常见的解决办法汇总一下。 话不多说&#xff0c;直接列出解决办法如下&…

linux-0.11 研究

前言 多阅读优秀代码&#xff0c;才能提高快速、深刻理解代码的能力。linux 内核源码无疑是最好的选择&#xff0c;不过当前 linux 内核版本为 6.3&#xff0c;代码量是相当庞大了&#xff0c;别说看完整个代码了&#xff0c;就算是看完一个子系统&#xff0c;都是不太现实的。…

PostgreSQL的安装与配置(Windows版本)

下载windows安装包 官网地址 安装 官网下载安装包 安装 测试 默认信息直接回车&#xff0c;最后密码输入设置的超级用户密码即可

【Python游戏】在这款程序员游戏新作《现代空战—战机游戏》里,你可以体验一把紧张的空战感觉、刺激鸭~打飞机游戏都能有那么多骚操作……

导语 不知道大家有没有幻想过遨游在广阔蓝天进行惊险的空战吗? 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区或文末公众hao即可免费。 虽然这样的画面常常只会出现在电影之中&#xff0c;但小编今天给大家编写的一款…

【数据结构】顺序表和链表基本实现(含全代码)

文章目录 一、什么是线性表1. 什么是顺序表动态开辟空间和数组的问题解释LeetCode-exercise 2. 什么是链表2.1链表的分类2.2常用的链表结构及区别2.3无头单向非循环链表的实现2.4带头双向循环链表的实现2.5循序表和链表的区别LeetCode-exercise 3. 快慢指针LeetCode-exercise 一…

【牛客刷题专栏】0x24:JZ23 链表中环的入口结点(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转)&#xff0c;它登陆后会保存刷题记录进度&#xff0c;重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏&#xff1a;个人CSDN牛客刷题专栏。 题目来自&#xff1a;牛客/题库 / 在线编程 / 剑指offer&#xff1a; 目录 前言问…

【GPT】文本生成任务(生成摘要、文本纠错、机器翻译等的模型微调)

note 文章目录 note一、NLG任务二、NLG之文本摘要2.1 基于mT5的文本摘要2.2 基于openai接口测试2.3 基于chatGPT接口 三、根据自己的数据集进行模型微调四、文本纠错任务五、机器翻译任务Reference 一、NLG任务 NLG&#xff1a;自然语言生成任务&#xff0c;很多NLP任务可以被…