Linux-Shell脚本基础

一、前言:

1.程序编程风格:

面向过程语言:

开发的时候 需要 一步一步 执行

  • 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了情况B,做什么处理

  • 问题规模小,可以步骤化,按部就班处理

  • 以指令为中心,数据服务于指令

  • C,shell

面向对象语言 :

开发的 时候 将 任务 当成一个整体

  • 将编程看成是一个事物,对外界来说,事物是直接使用的,不用关心事物内部的情况。而编程就是设置事物能够完成功能。

  • 一种认识世界、分析世界的方法论。将万事万物抽象为各种对象

  • 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合

  • 对象是类的具象,是一个实体

  • 问题规模大,复杂系统

  • 以数据为中心,指令服务于数据

  • java,python,golang等 云 go k8个字母s 平台

2.编程的三种处理逻辑:

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

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

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

二、shell脚本基础:

1.shell的作用:

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

常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符 等方面会存在一些区别。通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类。

查看本机的shell信息:

linux中常见的shell

  • bash:基于gun的框架下发展的shell

  • csh:类似c语言的shell

  • tcsh:整合了csh提供了更多功能

  • sh:已经被bash替换

  • nologin:让用户无法登录

bash (/bin/bash)是目前大多数Linux 版本采用的默认shell

 shell脚本用途

  • 将简单的命令组合完成复杂的工作,自动化执行命令,提高工作效率

  • 减少手工命令的重复输入,一定程度上避免人为错误

  • 将软件或应用的安装及配置实现标准化

  • 用于实现日常性的,重复性的运维工作,如:文件打包压缩备份,监控系统运行状态并实现告警等.2

2.shell脚本的概念及构成:

2.1 shell脚本的概念:

  • 就是将命令按顺序一一列出,最后自动执行

  • 执行需要权限,也可以直接使用路径

  • 脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本

2.2 shell脚本的构成:

  1. 解释器  脚本是用什么语言写的
  2. 注释    解释语句的含义
  3. 执行语句   

具体介绍:

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

案例:

3.脚本执行逻辑及执行方式:

3.1 脚本执行逻辑:

  1. 顺序执行:程序按从上到下顺序执行

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

  3. 循环执行:程序执行过程中需要重复执行多次某段语句

3.2 脚本执行方式:

3.2.1 使用路径执行    需要加执行权限

3.2.2 直接使用解释器    不需要权限

3.2.3 source 和 .  执行   不需要执行权限

使用前两种方式执行脚本会开启子bash 环境去执行脚本

使用source 和 . 会影响当前的bash环境  不推荐使用

3.3脚本的命名要求:

区分大小写
不能使程序中的保留字和内置变量:如: if, for, hostname
只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线“-",和主机名相反
不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH
驼峰StudentFirstName
小驼峰studentFirstName·
下划线: student_name

3.4脚本错误调试:

命令错误:

命令出错不会影响接下来的命令继续

 2.语法错误

会影响接下来的命令继续

3.逻辑错误:

 只能自己去筛查

查代码的正确

bash -n 脚本名称 (不在当前目录下加绝对路径)     检查语法错误
bash -x 脚本名称 (不在当前目录下加绝对路径)     逻辑错误

总结:脚本错误常见的有三种区别

  1. 语法错误,会导致后续的命令不继续执行,可以用bash -n 检查错误,提示的出错行数不一定是准确的

  2. 命令错误,默认后续的命令还会继续执行,用bash -n 无法检查出来 ,可以使用 bash -x 进行观察

  3. 逻辑错误:只能使用 bash -x 进行

三、出错解决:

 1.set -e :

2.set  -u :

变量不存在就不让执行

四、重定向与管道符:

1.重定向:

不输出到默认设备上,输出到你指定的位置

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

交互式硬件设备:

  • 标准输入:从该设备接收用户输入的数据
  • 标准输出:通过该设备向用户输出数据
  • 标准错误:通过该设备报告执行出错信息

操作:

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

 

重定向输出:

标准错误输出:

混合输出:

  • 1>&2 把标准输出重定向到标准错误

  • 2>&1 把标准错误重定向到标准输出

不加&符号,那么会将他当作一个文件,将错误信息重定向到1这个文件里面

覆盖:

添加内容会被覆盖

追加:

使用">>"可以实现追加

2.多行重定向:

可以帮助脚本开发人员不必使用临时文件来构建输入信息, 而是直接就地生产出一个文件并用作命令的标准输入。

使用 I/O 重定向的方式将命令列表提供给交互式程序或命令,比如 ftp、cat 或 read 命令

EOF 也可以用其它字母,只要求一样就可以

3.管道符:

管道符 |

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

五、shell脚本变量:

1.shell 变量的作用:

用来存放系统和用户需要使用的特定参数(值)

变量名:使用固定的名称,由系统预设或用户定义

变量值:能够根据用户设置、系统环境的变化而变化

2.Shell 变量的类型:

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

  • 特殊变量:环境变量,只读变量,位置变量,系统内置变量

环境变量:由系统维护,用于设置工作环境      当前目录  当前主机名啊   $PATH    

只读变量:只可以读取不可以更改              只能不能修改    常量    

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

系统内置变量:PATH,UID,HOSTNAME,USER

2.1自定义变量:

定义新的变量

格式:变量名=变量值

查看定义的变量:

格式:echo  $变量名

取消变量:

格式:echo  变量名

 

追加变量:

 格式:变量名+=追加值

 

2.2 特殊符号:

双引号  弱引用   可以识别变量
单引号 强引用   不能识别变量
{  }      定义变量名的范围
`` 反撇    调用命令的执行结果与 $() 功能一样

 

 2.3 变量的命名要求

区分大小写

不能使程序中的保留字和内置变量:如:if, for,hostname ,test

只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反

不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH

大驼峰 StudentFirstName

小驼峰 studentFirstName

下划线 student_name

 2.4 read -p:

从键盘输入的内容变成变量

2.5 export  变量作用范围:

默认情况下,新定义的变量只在当前的shell环境中有效,因此称为局部变量,当进入子程序或新的shell环境中,局部变量将无法再起作用。

可以通过内部命令export将指定的变量为全局变量,使用户定义的变量在所子shell环境中可以继续使用。

方法:

  1. 格式1:export 变量名

  2. 格式2:export 变量名=变量值

可以使用pstree 查看shell的环境

输入bash进入子shell

ctrl+D组合exit 退出子shell

通过 export ,将局部变量变成全局变量

 

2.6 整数的运算:

expr只能进行整数的运算

格式: expr 变量1 运算符 变量2 [运算符 变量3]

运算符:

加法 +

减法 -

乘法 \ *(*号要转移)

除法 /

取余 (取模)%

 

2.7 随机数生成器:

random 随机数  取值范围:0~32767

 制作点名器:

2.8 更改颜色:

随机生成颜色 

3.shell特殊变量:

3.1 环境变量:

特点:

  • 可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量

  • 一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程

  • 一般只在系统配置文件中使用,在脚本中较少使用

  1. 由系统提前创建,用来设置用户的工作环境

  2. 可以使用env查看环境变量

需要记住的常用环境变量:

$USER 表示用户名称

$HOME 表示用户的宿主目录

$LANG 表示语言和字符集

$PWD 表示当前所在工作目录

$PATH 表示可执行用户程序的默认路径

环境变量的全局配置文件:

/etc/profile(全局生效)作用于所有用户

~/.bash_profile(当前用户环境)用户独立的配置文件,修改这个文件只作用于当前用户,可以用来长期变更或设置环境变量

3.2 只读变量:

变量值不允许修改(重新赋值)的情况

无法使用 unset删除

readonly,命令用于定义只读shell变量和shell函数,readonly命令的选项-p可以输出显示系统中所有定义的只读变量。

3.3 位置变量:

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

  • 当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。

  • $n:n为数字,$0代表命令本身,1~9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}

#!/bin/bash
echo "$1"            位置1
echo "$2"            位置2
echo "${10}"         位置10
echo "$10"           位置1和0
echo "$*"            将所有项当成一个值
echo "$@"            所有项
echo "$0"            脚本自身
echo "$#"            后面参数的个数

3.4 预定义变量:

$*表示所有位置参数的内容看成一个整体返回 返回所有
$@表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有
$?表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
$#表示命令行中位置参数的总个数
$0表示当前执行的脚本或程序的名称 当前脚本的名字
$$当前bash的进程id
$!后台任务最后一个id

$?:0表示前一条命令运行正确,非零表示错误

 $0:表示当前执行的脚本或程序的名称 当前脚本的名字

$$:当前bash的进程id

$#:表示命令行中位置参数的总个数 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DC-9靶机做题记录

靶机下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1LR44-oFnO6NU6bTNs7VNrw?pwdhzke 提取码&#xff1a;hzke 参考&#xff1a; 【DC系列靶机DC9通关讲解】 https://www.bilibili.com/video/BV1p24y1s78C/?share_sourcecopy_web&vd_source12088c392…

Fluent Bit配置与使用——基于版本V2.2.2

Fluent Bit日志采集终端 文档适用版本&#xff1a;V2.2 1、日志文件处理流程 数据源是一个普通文件&#xff0c;其中包含 JSON 内容&#xff0c;使用tail插件记录日志&#xff0c;通过parsers进行格式化匹配&#xff08;图里没写&#xff09;&#xff0c;通过两个筛选器&…

白酒:发酵过程中的化学反应与香气形成

云仓酒庄的豪迈白酒在发酵过程中经历了多种化学反应&#xff0c;这些反应对于酒的香气和口感的形成起到了至关重要的作用。 首先&#xff0c;我们要了解发酵的定义。发酵是一个生物化学过程&#xff0c;通过特定微生物的作用&#xff0c;将原料中的糖类物质转化为酒精和二氧化碳…

爬虫正则+bs4+xpath+综合实战详解

Day3 - 1.数据解析概述_哔哩哔哩_bilibili 聚焦爬虫&#xff1a;爬取页面中指定的页面内容 编码流程&#xff1a;指定url -> 发起请求 -> 获取响应数据 -> 数据解析 -> 持久化存储 数据解析分类&#xff1a;正则、bs4、xpath(本教程的重点) 数据解析原理概述&am…

JQuery下载和一些语法

最近学了六种jQuery选择器&#xff0c;我想把学过案例和知识结合起来&#xff0c;给大家分享下&#xff01; 那么既然学jQuery选择器&#xff0c;肯定要先了解下jQuery是什么吧&#xff01;jQuery是一个快速、简洁的JavaScript框架&#xff0c;相当于用jQuery能更加高效的创建…

男主角展现炸裂演技,演绎方式独具匠心,令人叹为观止

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 在漫长的等待之后&#xff0c;《要久久爱》这部都市情感剧终…

Redis的主从复制

目录 一、主从复制 1.主从复制是什么 2. 主从复制能干嘛 3 主从复制 3.1创建一主二仆 3.2创建伪主从 3.3编写配置文件 3.4启动三台redis服器 3.5配置注册关系 4.复制原理 5.薪火相传 6.反客为主 7.哨兵模式(sentinel) 一、主从复制 1.主从复制是什么 主机数据更新…

服务器运维小技巧(二)——如何进行监控告警

服务器运维难度高的原因&#xff0c;很大程度是因为服务器一旦出现问题&#xff0c;生产环境的业务就会受到严重影响&#xff0c;极有可能带来难以承担的后果。因此这份工作要求工程师保持高要求的服务质量&#xff0c;能够快速响应问题&#xff0c;及时解决问题。 但是“及时…

EasyExcel实现导出图片到excel

pom依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version> </dependency> 实体类&#xff1a; package com.aicut.monitor.vo;import com.aicut.monit…

springboot优雅停机

import org.springframework.context.annotation.Configuration;import javax.annotation.PreDestroy;Configuration public class DataBackupConfig {PreDestroypublic void backData(){System.out.println("开始备份..."System.currentTimeMillis());System.out.pr…

【机器学习300问】18、正则化是如何解决过拟合问题的?

当我初次看见“正则化”三个字的时候&#xff0c;我简直头疼。在我的理解里“正则”还是Python中用在字符串处理的re正则库呢&#xff01;怎么加一个“化”字就看不懂了&#xff01;听我给你慢慢道来。 一、正则化中的“正则”是个啥玩意儿&#xff1f; 正则化&#xff08;Reg…

Docker安装多个nginx容器时,要注意端口设置:

Docker安装多个nginx容器时&#xff0c;要注意端口设置&#xff1a; docker run -id --namemynginx4 -p 8089:80 nginx 安装多个nginx容器时&#xff0c;要注意端口设置&#xff1a;宿主机80端口已经被暂用&#xff0c;所以宿主机端口一定不能设置位80&#xff0c;但是容器上80…

三篇论文联合复现:高比例新能源下考虑需求侧响应和智能软开关的配电网重构程序代码!

适用平台&#xff1a;MatlabYalmipCplex 程序在高比例新能源接入的情况下提出了考虑需求响应&#xff08;DR&#xff09;和智能软开关&#xff08;SOP&#xff09;的多时段主动配电网重构策略&#xff0c;进一步降低配电系统重构费用&#xff0c;减少弃风率和弃光率&#xff1…

鼠标移入/点击子组件,获取选中子组件事件

不管是移入&#xff0c;或者是点击事件 都要知道是触发的哪个组件 这里子组件是个通用小标题title 所以&#xff0c;通过标题内容&#xff0c;获取触发的哪个子组件子组件 <template><div mouseover"tMouseover" mouseleave"tMouseLeave" class&…

五、flowable操作、查询相关

1、依赖 <dependency><groupId>com.ikaiyong.score</groupId><artifactId>score-spring-boot-starter-flowable</artifactId></dependency> 2、流程部署相关 如下建立对应文件和文件夹 2.1 流程部署 /*** 部署流程* param name*/GetMapp…

3d导模型赋予材质方法---模大狮模型网

给3D模型赋予材质的方法可以根据您使用的软件和工作流程而有所不同。以下是一般的步骤&#xff0c;您可以根据自己的情况进行调整&#xff1a; 准备模型&#xff1a;首先&#xff0c;确保您的模型已经完全建模并进行了UV映射。UV映射是将2D纹理坐标应用到3D模型表面的过程&…

17 位社区大咖寄语,Seata 进入 Apache 孵化器

北京时间 2023 年 10 月 29 日&#xff0c;分布式事务开源项目 Seata 正式通过 Apache 基金会的投票决议&#xff0c;以全票通过的优秀表现正式成为 Apache 孵化器项目&#xff01; 根据 Apache 基金会邮件列表显示&#xff0c;在包含 13 个约束性投票 (binding votes) 和 6 个…

MVC模式

Model-View-Controller : 模型-视图-控制器模式&#xff0c;用于应用程序的分层开发。 Model(模型)&#xff1a;代表一个存取数据的对象。也可以带有逻辑&#xff0c;在数据变化时更新控制器。 View(视图)&#xff1a;代表模型包含的数据的可视化。 Controller(控制器)&#xf…

提取视频中的某一帧画面,留住视频中的美好瞬间

你是否曾经被视频中的某一帧画面深深吸引&#xff0c;却又惋惜于无法将其永久保存&#xff1f;现在&#xff0c;有了我们【媒体梦工厂】&#xff0c;这一遗憾将成为过去&#xff0c;这个软件可以提取视频中的某一帧保存为图片&#xff0c;为你留住那些稍纵即逝的美好。 所需工…