[Linux] shell脚本相关知识

一、shell脚本基础

1.1 shell脚本的作用

shell将人类使用的高级语言翻译成二进制,再将二进制翻译成高级语言。换句话就是人类写了一个命令集合,然后用bash去翻译给硬件执行。

linux中常见的shell:

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

        csh:类似c语言的shell

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

        sh:已经被bash替换

        nologin:让用户无法登录

shell的用途:

1. 简化操作,提高工作效率

2.避免重复劳动导致的出错

3.实现标准化

1.2 shell脚本是什么以及构成

把命令集合在一起然后一一执行

组成:

1.声明解释器(#!/bin/bash)

2.注释信息

3.可执行命令

1.3 脚本执行

执行逻辑:

脚本执行逻辑

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

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

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

执行方式:

1.指定路径执行(需要执行权限)

2.指定shell解释器执行(不需要权限)

1.4脚本错误如何解决

第一种:命令错误,不会影响接下来命令执行可用bash -n检查错误

第二种:语法错误,直接影响脚本,无法正常运行可用bash -x执行检查

第三种:逻辑错误,没有适合的的方法解决

补充:set -e 放在脚本前面,一旦出错立即停止执行

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

二、重定向和管道符

2.1 重定向

重定向:改变电脑数据的输出方向,默认电脑数据的输出方向是屏幕

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

标准输出:你发了一条指令给电脑,电脑回复给你,结果一定会显示在屏幕上

标准输入:我们通过键盘、鼠标等设备输入给电脑的指令

错误输出:电脑没有给出正确答复

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

 正确输出

错误输出 

 2.2 多行重定向

#####将内容写入文件
[root CXK /opt]#cat >test.txt <<error
> 123
> 345
> 567
> error

2.3 管道符

|

作用:将第一个命令的结果当作后一个命令的处理对象

三、变量

含义:变量源于数学,是计算机语言中的一个抽象概念,可以存储计算结果或表示一个值。 变量可以通过变量名访问。在命令式语言中,变量通常是可变的。

只能不能修改是常量   

3.1 变量类型

1.自定义变量:由用户自己定义修改和使用

2.预定义变量:bash中内置的一类变量,不能修改规定

3.环境变量:env看到所有环境标量

4.只读变量只可以读取不能修改的变量,相当于常量,用处较少

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

4.只读变量:只可以读取不可以更改 
5.位置变量:通过命令行给脚本传递参数

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

3.2 命名要求

1. 区分大小写

2. 不能使用内置变量

3. 只能使用数字字母下划线,不能以数字开头,不支持“-”

4. 大驼峰 StudentFirstName

5. 小驼峰 studentFirstName

 

 

1.赋值时使用双引号(" ")可以直接调用变量

2.赋值时使用单引号(' ')变量$只会被认为是字符$ 不会调用变量

3.赋值时使用(``反撇在tab上面)命令替换,提取命令执行后的输出结 果 和$( ) 用法相同

4.{}可以分隔变量值

单引号不识别 变量

双引号可以识别变量

{} 可以确定变量的范围

`` $() 调用命令执行的结果

  变量追加值

格式:

title=cto

title+=ylc

变量名+=追加名

修改变量环境
[root CXK /opt] PATH+=:/opt

3.3 从键盘输入的内容变成变量(read -p)

3.4 变量作用范围

 默认情况下,新定义的变量被称为局部变量,因为它们只在当前 shell 环境中有效。一旦进入子程序或新的 shell 环境,局部变量就不再起作用了。

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

解决办法:格式1:export 变量名

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

定义全局变量 

 3.5 整数运算

expr只能进行整数的运算

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

运算符:

加法 +

减法 -

乘法 \ *

除法 /

取余 (取模)%

(1) let var=算术表达式
let sum=2*3

(2) $((var=算术表达式)) 和上面等价
((sum=1+9))
echo $sum

(3) var= $[算术表达式]

(4) var=$(expr arg1 arg2 arg3 ...)

(5) var= `expr arg1 arg2 arg3 ...`

(6) echo '算术表达式' | bc

 3.6 环境变量

env可以看到所有变量

$USER 表示用户名称$HOME 表示用户的宿主目录$LANG 表示语言和字符集$PWD 表示当前所在工作目录$PATH 表示可执行用户程序的默认路径

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

只用于单个用户:~/.bash_profile

vim /etc/profile
source /etc/profile
//使用source立即生效

3.7 位置变量

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

vim 1.sh
bash 1.sh

echo "$0"代表本身 

 

 3.8 预定义变量

        $*:表示所有位置参数的内容看成一个整体返回 返回所有

        $@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回 返回所有

        $?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常

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

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

        $$:当前bash的进程id

        $!: 后台任务最后一个id

vim 1.sh

vim 2.sh

vim 3.sh

 总结:

Shell 脚本描述规范:

(1) 脚本声明:#!/bin/bash。

(2) 注释信息:第一行以 # 号开头,定义了注释信息;注释行的内容不执行;

(3) 执行语句:描述要执行的脚本代码;

执行 Shell 脚本:

(1) 使用绝对路径/相对路径指定要执行的脚本文件。 脚本在子外壳环境中执行;

(2) 使用 bash/sh 程序指定要执行的脚本文件。 这不需要执行权限,脚本会在子壳环境中执行; (3) source/。 指定要运行的脚本文件,脚本将在当前 shell 环境中执行(影响当前目录、变量值等);

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

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

相关文章

同为科技(TOWE)智能机柜PDU助力上海华为数据中心完善机房末端配电

智能时代加速而来&#xff0c;最大的需求是算力&#xff0c;最关键的基础设施是数据中心。作为一家在信息通信领域拥有多年经验和技术积累的公司&#xff0c;华为在全国多个地区都设有数据中心&#xff0c;如知名的贵州贵安华为云全球总部、内蒙古乌兰察布华为数据中心等&#…

pnpm 管理依赖包是如何节省磁盘空间的?

npm 存在的问题 我们经常使用 npm 来管理 node 项目中的包&#xff0c;从 package.json 中读取配置将依赖下载到本地&#xff0c;以保障项目的正常运行。 当项目数量多时&#xff0c;这样的包管理方式会非常的占用电脑内存。由于每个项目都有属于自己的依赖&#xff0c;每个项…

什么是多域名证书?

多域名证书是指同一个证书中包含多个域名&#xff0c;能够在多个站点之间共享一份证书&#xff0c;实现一个站点对应多个域名的情况。多域名证书非常适合需要跨多个站点部署的应用&#xff0c;例如企业的子站点、博客等。 特点 多域名证书的优点包括以下几个方面&#xff1a;…

【原创】为MybatisPlus增加一个逻辑删除插件,让XML中的SQL也能自动增加逻辑删除功能

前言 看到这个标题有人就要说了&#xff0c;D哥啊&#xff0c;MybatisPlus不是本来就有逻辑删除的配置吗&#xff0c;比如TableLogic注解&#xff0c;配置文件里也能添加如下配置设置逻辑删除。 mybatis-plus:mapper-locations: classpath*:mapper/*.xmlconfiguration:mapUnd…

品牌挑选控价服务商的标准参考

控价是一项需要投入时间精力的工作&#xff0c;品牌可以自主团队去做&#xff0c;但如果涉及数据量太大的时候&#xff0c;还需要开发系统&#xff0c;这样显然会增加非常多的成本&#xff0c;系统开发费用和运维费用都是一笔不小的开支&#xff0c;所以现在很多的品牌会选择找…

澳洲猫罐头到底怎么样呢?我自己亲自喂养过的优质猫罐头分享

猫罐头要符合三点&#xff1a;营养配方完整均衡、原料新鲜优质、生产工艺科学可靠。只有具备这些特点&#xff0c;才是品质上乘的猫罐头。 这三个要点缺一不可&#xff0c;配方不够均衡营养&#xff0c;便无法给猫提供充足的营养、会导致营养不良&#xff1b;原料不够新鲜、优质…

77基于matlab的蚁群优化路径算法,二维路径和三维路径优化

基于matlab的蚁群优化路径算法&#xff0c;二维路径和三维路径优化。输出可视化最优路径和距离迭代曲线。数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。 77三维和二维路径可视化 (xiaohongshu.com)

Python二级 每周练习题27

如果你感觉有收获&#xff0c;欢迎给我微信扫打赏码 ———— 以激励我输出更多优质内容 练习一: 用户输入一个半径r&#xff0c;求该半径下的圆的面积s与周长c。要求如下&#xff1a; &#xff08;1&#xff09;输出的面积与周长都保留俩位小数&#xff1b; &#xff08;2&a…

Active Directory 和域名系统(DNS)的相互关系

什么是域名系统&#xff08;DNS&#xff09; 域名系统&#xff08;DNS&#xff09;&#xff0c;从一般意义上讲是一种将主机名或域名解析为相应IP地址的手段。 在 AD 的中&#xff0c;DNS 服务维护 DNS 域和子域的工作命名空间&#xff0c;这些域和子域主要有助于查找过程&am…

人工智能基础_机器学习045_逻辑回归的梯度下降公式推导_更新公式---人工智能工作笔记0085

然后我们上面有了逻辑回归的损失函数,以后,我们再来看 逻辑回归的梯度下降公式 可以看到上面是逻辑回归的梯度下降公式,这里的阿尔法是学习率,这里的 后面的部分是梯度也就是步长,这个阿尔法是,通过调节这个来控制梯度下降的快和慢对吧 然后我们再来看逻辑回归 可以看到这里…

第十六章总结

反射JAVA反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性&#xff1b;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 通…

windows11系统如何设置锁屏壁纸

1. 在开始页面里面找到设置 2. 在设置里面找到个性化 3. 按照红色圈出部分操作 个性化锁屏界面 选择 图片 浏览照片 选择一张你觉得好看的图片作为锁屏壁纸 注&#xff1a;如果需要在锁屏后的登录页面显示壁纸 请勾选第三个红圈部分

使用vant list实现订单列表,支持下拉加载更多

在公司项目开发时&#xff0c;有一个需求是实现可以分页的订单列表&#xff0c;由于是移动端项目&#xff0c;所以最好的解决方法是做下拉加载更多。 1.在页面中使用vant组件 <van-listv-model"loading":finished"finished"finished-text"没有更…

盘点35个Python书籍Python爱好者不容错过

盘点35个Python书籍Python爱好者不容错过 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1uf-MXZc9aC7y3Qju6VnCYw?pwd8888 提取码&#xff1a;8888 书籍名称&#xff1a; Django教…

若依前后端分离版,快速上手

哈喽~大家好&#xff0c;这篇来看看若依前后端分离版&#xff0c;快速上手&#xff08;肝了挺久的&#xff09;。 &#x1f947;个人主页&#xff1a;个人主页​​​​​ &#x1f948; 系列专栏&#xff1a;【Springboot和Vue全栈开发】…

在ITSM中,实施变更管理的重要因素!

在ITSM管理中&#xff0c;变更管理是不可或缺的一步。在当今快速变革的商业环境中&#xff0c;组织需要不断地进行变更以适应市场的需求和竞争的压力。 然而&#xff0c;引入变更并成功地实施变更并不容易。变更管理是一种系统化和结构化的方法&#xff0c;旨在确保变更顺利进…

六要素超声波微气象仪一款气象监测设备

WX-WQX6 随着科技的发展&#xff0c;人们对天气的预测和掌控能力越来越强。在这个领域&#xff0c;六要素超声波微气象仪以其精准、实时的气象监测能力&#xff0c;赢得了众多关注。这款仪器不仅可以实时监测温度、湿度、风速、风向、气压和雨量六个气象要素&#xff0c;还可以…

逐字节讲解 Redis 持久化(RDB 和 AOF)的文件格式(一)

前言 相信各位对 Redis 的这两种持久化机制都不陌生&#xff0c;简单来说&#xff0c;RDB 就是对数据的全量备份&#xff0c;AOF 则是增量备份&#xff0c;而从 4.0 版本开始引入了混合方式&#xff0c;以 7.2.3 版本为例&#xff0c;会生成三类文件&#xff1a;RDB、AOF 和记…

算法——双指针

一、背景知识 双指针&#xff08;Two Pointers&#xff09;&#xff1a;指的是在遍历元素的过程中&#xff0c;不是使用单个指针进行访问&#xff0c;而是使用两个指针进行访问&#xff0c;从而达到相应的目的。对撞时针&#xff1a; 两个指针方向相反对撞指针一般用来解决有序…

SecureCRT -- 使用说明

【概念解释】什么是SSH&#xff1f; SSH的英文全称是Secure Shell 传统的网络服务程序&#xff0c;如&#xff1a;ftp和telnet在本质上都是不安全的&#xff0c;因为它们在网络上用明文传送口令和数据&#xff0c;别有用心的人非常容易就可以截获这些口令和数据。而通过使用SS…