[Linux] shell脚本相关知识

news2025/1/14 18:17:29

一、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.coloradmin.cn/o/1233600.html

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

相关文章

用向量数据库Milvus Cloud搭建GPT大模型+私有知识库的定制商业文案助手

随着智能助手的不断普及和发展,商业文案的创作也变得更加智能化和定制化。在这个信息爆炸的时代,商业文案的撰写已经不再是简单的文字表达,而是需要结合大数据分析和人工智能技术,以更好地满足目标客群的需求。在本文中,我们将介绍如何利用向量数据库Milvus Cloud搭建GPT大…

rabbit MQ的延迟队列处理模型示例(基于SpringBoot)

说明&#xff1a; 生产者P 往交换机X&#xff08;typedirect&#xff09;会发送两种消息&#xff1a;一、routingKeyXA的消息&#xff08;消息存活周期10s&#xff09;&#xff0c;被队列QA队列绑定入列&#xff1b;一、routingKeyXB的消息&#xff08;消息存活周期40s&#xf…

Appium移动自动化测试—如何安装Appium

前言 Appium 自动化测试是很早之前就想学习和研究的技术了&#xff0c;可是一直抽不出一块完整的时间来做这件事儿。现在终于有了。 反观各种互联网的招聘移动测试成了主流&#xff0c;如果再不去学习移动自动化测试技术将会被淘汰。 web自动化测试的路线是这样的&#xff1…

使用Mate 40 Harmony OS 4.0版本运行 codelabs ArkUI demo运行非常卡顿,换Mate 60没事

服务类型 DevEco Studio 概述 使用Mate 40 Harmony OS 4.0版本运行 codelabs ArkUI demo运行非常卡顿&#xff0c;换Mate 60没事 官方回复添加链接描述 客户支持工程师 2023-11-21 14:37:19 GMT08:00 尊敬的开发者&#xff0c;您好&#xff0c; 该机型卡顿黑屏为内部已知问题…

小程序隐私协议开发指南

微信为规范开发者的用户个人信息处理行为&#xff0c;保障用户合法权益&#xff0c;小程序、插件中涉及处理用户个人信息的开发者&#xff0c;均需补充相应用户隐私保护指引。&#xff08;微信又在搞事情 T_T &#xff09; 一、小程序用户隐私保护指引 填写现网版本用户隐私保…

【excel技巧】单元格内的公式如何隐藏?

Excel文件中最重要的除了数据还有就是一些公式了&#xff0c;但是只要点击单元格&#xff0c;公式就能显示出来&#xff0c;如果不想别人看到公式应该如何设置呢&#xff1f;今天分享隐藏excel单元格数据的方法。 选中单元格&#xff0c;点击右键打开【设置单元格格式】&#x…

Python学习(打基础版)

以前只是大致的了解&#xff0c;现在比较完整的整理一下笔记&#xff0c;以后工作可能会用到。 学习地址如下所示&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了_哔哩哔哩_bilibili 第一章 环境配置 1 初识Python 人…

SpringBoot :ch01 项目结构

前言 在本系列博客中&#xff0c;我们将深入探讨 Spring Boot 项目结构的各个方面&#xff0c;并探讨如何利用这些结构来构建健壮、可扩展的应用程序。通过深入了解 Spring Boot 项目结构&#xff0c;我们可以更好地利用 Spring Boot 的优势&#xff0c;提高开发效率&#xff…

解决gradle下载慢的问题

1、解决gradle不同版本下载慢的问题 慢的问题在于下载时链接的是官网,而官网下载速度太慢; 可以使用下面的连接进行下载: https://mirrors.cloud.tencent.com/gradle/ 有公司做的国内镜像站; 或者使用另一个镜像站 http://mirrors.aliyun.com/gradle 但是这个镜像站的版…

MySQL数据库入门到大牛_基础_10_创建和管理表(创建和管理数据库;创建表;修改表;重命名表;删除表;清空表,内容扩展)

前面我们完成了查询结构的介绍&#xff0c;本章介绍DDL和DCL中的COMMIT和ROLL BACK。 文章目录 1. 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型 2. 创建和管理数据库2.1 创建数据库2.2 使用数据库2.3 修改数据库2.4 删除数据库 3. 创建表3.1 创建…

【ARM AMBA AXI 入门 13 -- AXI 协议中 RRESP 信号详细介绍】

请阅读【ARM AMBA AXI 总线 文章专栏导读】 文章目录 AXI 协议中 RRESP 信号RRESP 使用举例RRESP 3bit 使用AXI 协议中 RRESP 信号 在 AXI (Advanced eXtensible Interface) 协议中,RRESP 信号用来表示读取事务的响应状态,它由从设备(Slave)发往主设备(Master)来通知读…

Linux安装Mysql详细教程(两种安装方法)

Linux之Mysql安装配置 第一种&#xff1a;Linux离线安装Mysql&#xff08;提前手动下载好tar.gz包&#xff09;第二种&#xff1a;通过yum安装配置Mysql&#xff08;服务器有网络&#xff09; 第一种&#xff1a;tar.gz包安装 1、 查看是否已经安装 Mysql rpm -qa | grep m…

硬件驱动为什么要有WHQL数字签名

硬件驱动要有WHQL数字签名才能实现正常安装、启动、运行&#xff0c;并实现驱动静默安装。 目前的桌面操作系统中&#xff0c;Windows系统市场占有率处于优势&#xff0c;Windows 的各个版本的系统加起来几乎占领了大部分市场。所以很多工业和行业的硬件设备都要考虑兼容在Win…

干货|数据资产评估的基本方法和选择方法

作为一项资产&#xff0c;数据应当拥有可计量的实际价值。所谓数据价值评估&#xff0c;即是指通过专业化的数据质量评价和价值评估&#xff0c;对数据进行客观评估&#xff0c;使其成为可计量的资产&#xff0c;并确定其具体的价值。这可以借助各种评估方法和指标&#xff0c;…

jmeter接口自动化部署jenkins教程详解

首先&#xff0c;保证本地安装并部署了jenkins&#xff0c;jmeter&#xff0c;xslproc 我搭建的自动化测试框架是jmeterjenkinsxslproc 注意&#xff1a;原理是&#xff0c;jmeter自生成的报告jtl文件&#xff0c;通过xslproc工具&#xff0c;再结合jmeter自带的模板修改&…

vue el-form表单嵌套组件时正则校验不生效

vue el-form表单嵌套组件时正则校验不生效 上图 组件选中数据&#xff0c;但是正则校验未检测到并且红字提示不会消失。直接上代码 <template><div class"created_report"><el-form :model"formData" :rules"isRules" ref"…

KT142C语音芯片音乐前要空白音才行,声音会被截掉,实际语音是你好,播放变成好

KT142C语音芯片播放音乐前必须有一段空白音才行&#xff0c;不然声音会被截掉一部分&#xff0c;播放 温度1超高&#xff0c;如果前面没有空白音&#xff0c;就会变成 度1超高 出现这个问题&#xff0c;核心的原理在于功放芯片是受控了 这个问题只存在于&#xff0c;配置为DAC…

六要素一体微型气象站介绍

WX-WQX6 随着科技的发展&#xff0c;气象监测已经进入了一个全新的时代。传统的气象站已经无法满足现代社会对气象预测的需求。因此&#xff0c;一款新型的气象站——六要素一体微型气象站应运而生。这款气象站集成了温度、湿度、风速、风向、气压和雨量六个气象要素&#xff0…

【微信小程序】2023年11月版本 关于小程序隐私保护指引设置的公告 | 修改微信小程序隐私保护 |小程序无法获取用户昵称 头像 性别 等问题

一、登录小程序后台 《关于小程序隐私保护指引设置的公告》 https://mp.weixin.qq.com/cgi-bin/announce?actiongetannouncement&announce_id11691660367cfUvX&version&langzh_CN&token 上面是官方的文档&#xff0c;但是由于比较陈旧&#xff0c;和现在的页面…