[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.rhkb.cn/news/201107.html

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

相关文章

竞赛选题 车道线检测(自动驾驶 机器视觉)

0 前言 无人驾驶技术是机器学习为主的一门前沿领域&#xff0c;在无人驾驶领域中机器学习的各种算法随处可见&#xff0c;今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂&#xff0c;看上去无从下手。那么面对这样极其…

计算机网络学习笔记(六):应用层(待更新)

目录​​​​​​​ 6.2 文件传送协议FTP(File Transfer Protocol) 6.2.1 FTP概述 6.2.2 FTP的基本工作原理 6.5 电子邮件&#xff1a;SMTP、POP3、IMAP 6.5.1 电子邮件概述 6.5.2 发邮件&#xff1a;简单邮件传送协议SMTP 6.5.3 电子邮件的信息格式、地址格式 6.5.4 收…

Linux编辑器-gcc/g++使用

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练使用gcc/g编译器 > 毒鸡汤&#xff1a;真正…

Leaflet结合Echarts实现迁徙图

效果图如下&#xff1a; <!DOCTYPE html> <html><head><title>Leaflet结合Echarts4实现迁徙图</title><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

2023年中国离心制冷机产量及产业链分析[图]

离心制冷机是一种常用的空调制冷设备&#xff0c;目前主要应用于酒店、写字楼、商场、学校等众多大型场所的集中制冷场景。离心制冷机由离心式制冷压缩机、蒸发器、冷凝器、主电动机、抽气回收装置、润滑系统、控制柜和起动柜等零部件组成。这些零部件的组成有的采用分散型组装…

Rust语言精讲:数据类型全解析

大家好&#xff01;我是lincyang。 今天&#xff0c;我们将深入探讨Rust语言中的数据类型&#xff0c;这是理解和掌握Rust的基础。 Rust语言数据类型概览 Rust是静态类型语言&#xff0c;所有变量类型在编译时确定。Rust的数据类型分为两类&#xff1a;标量类型和复合类型。…

内容输入.type

内容输入.type 查看完整说明 语法 .type(text) .type(text, options)正确用法 cy.get(input).type(Hello, World) // Type Hello, World into the input错误用法 cy.type(Welcome) // Errors, cannot be chained off cy cy.clock().type(www.cypress.io) // Errors, clock…

Windows安装MongoDB

1、下载MongoDB的zip&#xff0c;解压 2、创建目录 mkdir D:\JavaSoftware\Database\MongoDB\mongodb-win32-x86_64-windows-5.0.8\data\db mkdir D:\JavaSoftware\Database\MongoDB\mongodb-win32-x86_64-windows-5.0.8\data\log 3、创建一个配置文件mongod.cfg&#xff0c…

YOLOv8改进 | DAttention (DAT)注意力机制实现极限涨点

论文地址&#xff1a; DAT论文地址 官方地址&#xff1a;官方代码的地址 代码地址&#xff1a;文末有修改了官方代码BUG的代码块复制粘贴即可 一、本文介绍 本文给大家带来的是YOLOv8改进DAT(Vision Transformer with Deformable Attention)的教程&#xff0c;其发布于2022…

数字IC基础:有符号数和无符号数加、减法的Verilog设计

相关阅读 数字IC基础https://blog.csdn.net/weixin_45791458/category_12365795.html?spm1001.2014.3001.5482 本文是对数字IC基础&#xff1a;有符号数和无符号数的加减运算一文中的谈到的有符号数加减法的算法进行Verilog实现&#xff0c;有关算法细节请阅读原文&#xff0…

git merge 和 git rebase

一、是什么 在使用 git 进行版本管理的项目中&#xff0c;当完成一个特性的开发并将其合并到 master 分支时&#xff0c;会有两种方式&#xff1a; git merge git rebasegit rebase 与 git merge都有相同的作用&#xff0c;都是将一个分支的提交合并到另一分支上&#xff0c;…

大数据平台实践之CDH6.2.1+spark3.3.0+kyuubi-1.6.0

前言&#xff1a;关于kyuubi的原理和功能这里不做详细的介绍&#xff0c;感兴趣的同学可以直通官网&#xff1a;https://kyuubi.readthedocs.io/en/v1.7.1-rc0/index.html 下载软件版本 wget http://distfiles.macports.org/scala2.12/scala-2.12.16.tgz wget https://archi…

Java 开源重试类 guava-retrying 使用案例

使用背景 需要重复尝试执行某些动作&#xff0c;guava-retrying 提供了成型的重试框架 依赖 <dependency><groupId>com.github.rholder</groupId><artifactId>guava-retrying</artifactId><version>${retrying.version}</version>…

NLog配置文件详解

一、属性详解 1. 属性一览 <target xsi:type"File"name"String"layout"Layout"header"Layout"footer"Layout"encoding"Encoding"lineEnding"Enum"archiveAboveSize"Long"maxArchiveFile…

浅谈低压绝缘监测及定位系统在海上石油平台的研究与应用

安科瑞 华楠 摘要&#xff1a;海上石油平台低压系统与陆地电力系统有很大区别&#xff0c;其属于中性点绝缘系统&#xff0c;在出现单相接地故障时&#xff0c;系统允许带故障正常运行2 h&#xff0c;保证海上重要电气设备不会立即关停。现以渤海某海上平台为例&#xff0c;其…

多篇论文介绍-可变形卷积

01 具有双层路由注意力的 YOLOv8 道路场景目标检测方法 01 摘要: 随着机动车的数量不断增加&#xff0c;道路交通环境变得更复杂&#xff0c;尤其是光照变化以及复杂背景都会干扰目标检测算法的准确性和精度&#xff0c;同时道路场景下多变形态的目标也会给检测任务造成干扰&am…

redis的一些操作

文章目录 清空当前缓存和所有缓存配置内存大小&#xff0c;防止内存饱满设置内存淘汰策略键过期机制 清空当前缓存和所有缓存 Windows环境下使用命令行进行redis缓存清理 redis安装目录下输入cmdredis-cli -p 端口号flushdb 清除当前数据库缓存flushall 清除整个redis所有缓存…

window文件夹下python脚本实现批量删除无法预览的图片

你是否遇到过下载的图片会发现有些图片会无法预览情况&#xff1f; 有几种原因可能导致一些图片在预览时无法正常显示&#xff1a; 损坏的图片文件&#xff1a; 图片文件可能损坏或者部分损坏&#xff0c;导致无法被正常解析和预览。这种情况可能是因为文件在传输过程中损坏、…

模块化Common JS 和 ES Module

目录 历程 1.几个函数&#xff1a;全局变量的污染&#xff0c;模块间没有联系 2.对象&#xff1a;暴露成员&#xff0c;外部可修改 3.立即执行函数&#xff1a;闭包实现模块私有作用域 common JS module和Module 过程 模块依赖&#xff1a;深度优先遍历、父 -> 子 -…

我在Vscode学OpenCV 几何变换(缩放、翻转、仿射变换、透视、重映射)

几何变换指的是将一幅图像映射到另一幅图像内的操作。 cv2.warpAffine&#xff1a;使用仿射变换矩阵对图像进行变换&#xff0c;可以实现平移、缩放和旋转等操作。cv2.warpPerspective&#xff1a;使用透视变换矩阵对图像进行透视变换&#xff0c;可以实现镜头校正、图像纠偏等…