Linux系统Shell脚本 ----- 编程规范和变量详细解读

一、Shell脚本概述

1、什么是Shell

  • Linux系统中运行的一种特殊程序
  • 在用户和内核之间充当“翻译官”
  • 用户登录Linux系统时,自动加载一个Shell程序
  • Bash是Linux系统中默认使用的Shell程序

2、Shell的作用

         Linux系统中的shell是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"翻译官"的角色,负责接收用户输入的操作指令命令并进行解释,将需要执行的操作传递给内核调动硬件执行,并输出执行结果。

3、Shell脚本的概念

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

4、Shell脚本的应用

  1. 重复性操作
  2. 交互性任务
  3. 批量事务处理
  4. 服务器运行状态监控
  5. 定时任务执行

5、Linux中常见的Shell

  • bash:基于gun的框架下发展的shell
  • csh:类似c语言的shell
  • tcsh:整合了csh提供了更多功能
  • sh:已经被bash替换
  • nologin:让用户无法登录
  • bash (/bin/bash)是目前大多数Linux 版本采用的默认shell

6、Shell脚本用途

  • 将简单的命令组合完成复杂的工作,自动化执行命令,提高工作效率
  • 减少手工命令的重复输入,一定程度上避免人为错误
  • 将软件或应用的安装及配置实现标准化
  • 用于实现日常性的,重复性的运维工作,如:文件打包压缩备份,监控系统运行状态并实现告警等

二、程序编程风格

面向过程语言  开发的时候 ,需要一步一步执行

  • 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了情况B,做什么处理。
  • 问题规模小,可以步骤化,按部就班处理
  • 以指令为中心,数据服务于指令
  • C,shell

面向对象语言   开发的时候任务当成一个整体

  • 将编程看成是一个事物,对外界来说,事物是直接使用的,不用关心事物内部的情况。而编程就是设置事物能够完成功能。
  • 一种认识世界、分析世界的方法论。将万事万物抽象为各种对象
  • 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合
  • 对象是类的具象,是一个实体
  • 问题规模大,复杂系统
  • 以数据为中心,指令服务于数据

三、编程语言

编程语言排名

https://www.tiobe.com/tiobe-index/      ###各种语言使用量排行榜

三种处理逻辑

顺数执行:程序按从上到下顺序执行

选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行

循环执行:程序执行过程中需要重复执行多次某段语句(已知次数 已知条件 死循环)

四、Shell编程规范

1、Shell编程脚本的及构成

  • 就是将命令按顺序一一列出,最后自动执行
  • 执行需要权限,也可以直接使用路径
  • 脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本

构成:

  1. 解释器(脚本申明):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #!/bin/expect(免交互)
  2. 注释信息:以#开头的语句表示为注释信息 # 注 释
  3. 可执行语句:比如echo命令用于输出“ ”之间的字符串

2、脚本的基本格式

#!/bin/bash       #脚本声明即解释器,表示此行以下的代码通过/bin/bash程序翻译执行#this is my frist  shell-Script      #注释信息,描述此脚本做什么工作或每条语句的含义echo " hello world! "   #可执行语句,脚本具体的内容

3、脚本执行的逻辑及执行方式

1.脚本执行的逻辑

  • 顺数执行:程序按从上到下顺序执行
  • 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
  • 循环执行:程序执行过程中需要重复执行多次某段语句(已知次数 已知条件 死循环)

2.执行方式(如何执行)

  • 指定路径的命令,要求文件必须有x(可执行)权限
  • 直接使用shell解释器,不要求文件有 x (可执行)权限,不需要权限
  • source 和  .    执行shell脚本,不需要权限

4、脚本错误调试

1.命令错误

        命令出错不会影响接下来的命令继续,默认的是后面的命令还会继续执行

用bash -n 无法检查出来 ,可以使用 bash -x 进行观察

[root@localhost data]# vim second.sh#!/bin/bash
cd /opt
touh kysw
ls /opt[root@localhost data]# bash adar.sh 
adar.sh:行3: touh: 未找到命令
kusw[root@localhost data]#  ls /opt
kysw

2.语法错误

        会影响接下来的命令继续,会导致后续的命令不继续执行

可以用bash -n 检查错误,提示的出错行数不一定是准确的

如果将后面fi去掉,那么就会报错

3.逻辑错误

        只能自己去筛查。

检查代码的正确与否

bash -n 脚本名称 (不在当前目录下加绝对路径)     检查语法错误bash -x 脚本名称 (不在当前目录下加绝对路径)     逻辑错误set   -e             在  脚本的前面输入  set -e   一旦出错立即停止set -u    变量不存在不让执行

  •   set   -e             在  脚本的前面输入  set -e   一旦出错立即停止

如果出错又没有加set -e出现的后果:

  • set -u    变量不存在不让执行

如果大小写一样,那么就会删除

五、重定向与管道符

1、标准出入、标准输出和标准错误输出

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器

交互式硬件设备

  • 标准输入:从该设备接收用户输入的数据

  • 标准输出:通过该设备向用户输出数据

  • 标准错误:通过该设备报告执行出错信息

重定向的意思就是 ,不输出到默认设备上,输出到你指定的位置(文件 、或其他输出设备)

2、重定向

类型操作符用途
重定向输入<从指定的文件读取数据,而不是从键盘输入
重定向输出1>将输出结果保存到指定的文件(覆盖原有内容)
>>将输出结果追加到指定的文件尾部
标准错误输出2>将错误信息保存到指定的文件(覆盖原有内容)
2>>标准错误输出结果追加到指定的文件尾部
混合输出&>无论对错都可以重定向将标准输出、标准错误的内容保存到同一个文件中

选择题  
#不能将正确和错误一起显示出来 的是那个?          答案为E


A   [root@centos7 ~]#ls /data /xxx 1> /data/all.log 2>&1
B   [root@centos7 ~]#ls /data /xxx 2> /data/all.log 1>&2 
C   [root@centos7 ~]#ls /data /xxx &> /data/all.log  
D   [root@centos7 ~]#ls /data /xxx >& /data/all.log  

E   [root@centos7 ~]#ls /data /xxx   2>&1 1> /data/all.log

3、多行重定向

4、管道符   |

将左侧的命令输出结果,作为右侧命令的输入(处理对象)可以 叠加使用

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

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

相关文章

商城系统中30分钟未付款自动取消订单怎么实现(简单几种方法)

实现以上功能 方法1&#xff1a;定时任务批量执行 写一个定时任务&#xff0c;每隔 30分钟执行一次&#xff0c;列出所有超出时间范围得订单id的列表 AsyncScheduled(cron "20 20 1 * * ?")public void cancelOrder(){log.info("【取消订单任务开始】"…

HTTP/1.1、HTTP/2、HTTP/3 基本概述

参考链接 https://xiaolincoding.com/network/2_http/http_interview.html#http-1-1-%E7%9B%B8%E6%AF%94-http-1-0-%E6%8F%90%E9%AB%98%E4%BA%86%E4%BB%80%E4%B9%88%E6%80%A7%E8%83%BD HTTP/1.1 HTTP/1.1 相比 HTTP/1.0 性能上的改进&#xff1a; 使用长连接的方式改善了 HTT…

Leetcode—25.K 个一组翻转链表【困难】

2023每日刷题&#xff08;八十二&#xff09; Leetcode—25.K 个一组翻转链表 算法思想 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val…

Conda python管理packages一 从入门到精通

Conda系列&#xff1a; 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装Conda python运行的包和环境管理 入门Conda python管理环境environments 一 从入门到精通Conda python管理环境environments 二 从入门到精通Conda python管理环境environments 三 从入门到精通…

力扣每日一题 ---- 1970. 你能穿过矩阵的最后一天

这题对于没怎么做到过这题的朋友来说比较陌生&#xff0c;他给出的条件是两个都是动态的条件&#xff0c;一个条件随着另一个条件走&#xff0c;这个时候是很熟悉这题的朋友就会感觉比较麻烦&#xff0c;比较难&#xff0c;就不想写了&#xff0c;两个强相关条件的第一个是水每…

IT大侦“碳”:Concept Luna向循环设计持续演进

今天聊点轻松的话题。上个月&#xff0c;小编用来吃饭的家伙开始闹罢工&#xff0c;笔记本的触控和键盘突然没了反应&#xff0c;电脑虽然还能打开&#xff0c;但嗡嗡直叫的风扇让我意识到这件事并不简单。 你问我为什么电脑会出问题&#xff1f;好吧&#xff0c;那我得先搞清楚…

GBase 8s常见问题解析---追踪统计SQL执行情况 SQLTRACE

本文摘自GBASE南大通用社区&#xff0c;by&#xff1a;wty&#xff0c;原文请点击&#xff1a;GBase 8s常见问题 -- 追踪统计SQL执行情况 SQLTRACE|GBASE社区|天津南大通用数据技术股份有限公司|GBASE-致力于成为用户最信赖的数据库产品供应商 问题现象 某些SQL执行慢、有问题…

C# HSLCommunication与物联网技术结合的可能性及在智能制造中的应用

引言&#xff1a; 随着物联网&#xff08;IoT&#xff09;技术的迅速发展&#xff0c;智能制造和工业互联网等领域对高效、稳定的通信技术需求日益增长。C# HSLCommunication库作为一种高效的通信工具&#xff0c;与物联网技术的结合为这些领域带来了新的可能性。本文将详细介绍…

【Java万花筒】缓存与存储:Java应用中的数据处理利器

激发性能之源&#xff1a;深度剖析Java开发中的五大数据缓存与存储方案 前言 在现代软件开发中&#xff0c;高效地处理和存储数据是至关重要的任务。本文将介绍一系列在Java应用中广泛使用的数据缓存与存储库&#xff0c;涵盖了Ehcache、Redisson、Apache Cassandra、Hazelca…

js触发input的打开文件选择器,将本地图片回显以及上传

js触发input的打开文件选择器&#xff0c;将本地图片回显以及上传 你可以通过以下 JavaScript 代码触发文件选择器&#xff1a;这里的场景不是通过input标签来触达的文件选择器&#xff0c;这样对于样式较为复杂的上传可以在html结构上保持清爽愉快&#xff0c;不用多添加一个i…

java web mvc-08-Grails 入门介绍

拓展阅读 Spring Web MVC-00-重学 mvc mvc-01-Model-View-Controller 概览 web mvc-03-JFinal web mvc-04-Apache Wicket web mvc-05-JSF JavaServer Faces web mvc-06-play framework intro web mvc-07-Vaadin web mvc-08-Grails 开源 The jdbc pool for java.(java …

R语言【taxa】——is_*():检查对象是否为某个类

is_classification(x) 检查对象是否为 classification 类。 is_internode(x) 检查每个分类单元是否为节间。节间是指一个分类单元恰好有一个上级分类单元和 一个下级分类单元。这些分类群可以在不丢失它们之间的关系信息的情况下被移除。 x <- taxonomy(c(Carnivora, Felid…

设置Django中的静态文件

在Django中&#xff0c;静态文件&#xff08;如CSS、JavaScript、图片等&#xff09;是网站开发中不可或缺的一部分。为了让网站能够正确加载这些静态文件&#xff0c;我们需要在Django中进行相应的设置。 首先&#xff0c;我们需要在settings.py文件中设置STATIC_URL&#xf…

Unity通用渲染管线升级URP、HDRP

Unity通用渲染管线升级URP、HDRP 一、Build-in Pipline升级到 URP 一、Build-in Pipline升级到 URP 安装URP包 升级所有材质&#xff08;升级完成后材质会变成紫红色&#xff0c;Shader丢失&#xff0c;此为正常现象&#xff09; 创建 UniversalRenderPipelineAsset 配置文…

Pillow图像处理:从零开始的奇妙之旅

图像处理&#xff0c;就像是一场神奇的冒险&#xff0c;让我们的照片变得更有趣、更生动。而在这个冒险的旅途中&#xff0c;Pillow就如同一位魔法师&#xff0c;为我们开启了无尽的可能性。无论你是刚刚踏入图像处理领域的小白&#xff0c;还是已经略有基础的程序员&#xff0…

深入Kafka broker

一、协议设计 颗粒度, PRODUCE和FETCH中支持topic,partion等层级的颗粒度;测试友好, 基于session_id和epoch确定一条拉取链路的fetch session;全量增量结合, FetchRequest中的全量拉取和增量拉取;基本结构: headerbody。 常见header: api_key, api_version, corelation_id, cl…

opencv中的几个重要函数

对于我们经常使用python的同学&#xff0c;尤其还习惯使用numpy库&#xff0c;突然上手opencv c时&#xff0c;就会感觉想要一个结果&#xff0c;python一行代码搞定&#xff0c;但是c却无处下手&#xff0c;因此特总结遇到的几个重要opencv函数&#xff0c;方便能够快速获取跟…

8.前端--CSS-显示模式

元素的显示模式 元素显示模式就是元素&#xff08;标签&#xff09;以什么方式进行显示&#xff0c;比如<div>自己占一行&#xff0c;比如一行可以放多个<span>。 1.块元素 常见的块元素 常见的块元素&#xff1a;<h1>~<h6>、<p>、<div>、…

SQLyog的使用

快捷键功能备注对象浏览器窗口及查询执行快捷键  F5刷新对象浏览器窗口 CtrlB 切换鼠标光标焦点至对象浏览器窗口&#xff1b; F8执行当前行SQL&#xff0c;并允许编辑查询结果 F9执行查询/执行当前行的SQL 连接  CtrlM创建新连接 CtrlN以当前连接属性创建新连接 Ctr…

如何预防服务器IP被劫持,危害有什么?

服务器IP被劫持是一种严重的网络安全问题&#xff0c;攻击者通过篡改服务器的IP地址&#xff0c;将网络流量重定向到恶意服务器或网站&#xff0c;导致用户无法正常访问目标服务器&#xff0c;并可能面临数据泄露、恶意软件感染等安全风险。了解服务器IP被劫持的危害和预防措施…