目录

前言

一、认识 Shell

1.1 Shell 的定义与作用

1.2 Shell 解释器

二、Shell 脚本入门

2.1 编写 Shell 脚本

2.2 赋予执行权限与执行脚本

三、Shell 变量

3.1 变量定义与规则

3.2 变量使用与操作

3.3 变量类型

四、Shell 字符串

4.1 字符串定义方式

4.2 字符串常用操作

示例


前言

在 Linux 系统操作与自动化任务处理中,Shell 脚本是提升效率的实用工具。本文基于《Shell.pdf》内容,梳理 Shell 编程的核心知识,从基础概念到实际应用,用简洁的语言和清晰的表格呈现关键要点,帮助读者快速掌握 Shell 脚本的编写与使用方法。

一、认识 Shell

1.1 Shell 的定义与作用

Shell 是用 C 语言编写的程序,充当用户与操作系统内核之间的桥梁,用户通过 Shell 可访问内核服务。它既可以作为命令语言,接收并执行用户输入的命令;也能作为程序设计语言,编写脚本实现复杂操作,类似于 DOS 系统下的commandcmd.exe

1.2 Shell 解释器

Shell 编程需借助文本编辑器编写代码和脚本解释器执行代码。Linux 系统中 Shell 解释器种类多样,一个系统可存在多个 Shell,通过cat /etc/shells命令可查看系统已安装的 Shell。其中,bash因易用且免费,在日常工作中应用广泛,也是多数 Linux 系统的默认 Shell。

Shell 类型特点适用场景
/bin/bash易用、免费、功能丰富日常脚本开发、系统管理(默认选择)
/bin/sh轻量、兼容性强简单脚本执行、早期系统环境
/sbin/nologin禁止用户登录系统账号安全控制

二、Shell 脚本入门

2.1 编写 Shell 脚本

使用vi编辑器新建脚本文件,文件扩展名通常为.sh(不影响脚本执行)。脚本基本结构包含指定解释器、注释和可执行语句三部分。#!是约定标记,用于告知系统脚本所需的解释器,echo命令则用于向窗口输出文本。

示例:创建hello.sh脚本

#!/bin/bash  # 指定解释器为bash
# 第一个Shell脚本,输出Hello World
echo "Hello World!"  # 输出文本
[root@localhost ~]# mkdir shelldemo  #创建文件夹
[root@localhost ~]# cd shelldemo  
[root@localhost shelldemo]# ll
总用量 0
[root@localhost shelldemo]# vim hello.sh   #创建一个shell脚本程序
[root@localhost shelldemo]# cd
[root@localhost ~]# ls
anaconda-ks.cfg               lisa_cpu.sar                                  usr.tar.gz  图片  桌面
BaiduNetdisk_5.5.3.exe        mysql80-community-release-el7-3.noarch.rpm    公共        文档
CentOS-7-x86_64-DVD-2009.iso  mysql80-community-release-el7-3.noarch.rpm.1  模板        下载
initial-setup-ks.cfg          shelldemo                                     视频        音乐

2.2 赋予执行权限与执行脚本

新创建的脚本文件默认无执行权限,需通过chmod +x ./脚本文件名命令赋予执行权限。执行脚本有多种方式,不同方式在权限要求和执行环境上存在差异。

执行方式命令示例特点是否需要执行权限
相对路径执行./hello.sh在当前目录查找并执行脚本
绝对路径执行/root/shelldemo/hello.sh通过完整路径定位并执行脚本
解释器参数执行sh hello.sh直接调用解释器,脚本作为参数
[root@localhost shelldemo]# ll
总用量 4
-rw-r--r-- 1 root root 34 8月  28 09:38 hello.sh
[root@localhost shelldemo]# ls
hello.sh
[root@localhost shelldemo]# vi hello.sh 
[root@localhost shelldemo]# chmod +x ./hello.sh
[root@localhost shelldemo]# ll
总用量 4
-rwxr-xr-x 1 root root 34 8月  28 09:43 hello.sh
[root@localhost shelldemo]# ./hello.sh
hello world!

三、Shell 变量

3.1 变量定义与规则

变量通过变量名=值的格式定义,等号两边不能有空格。变量名命名需遵循特定规则,确保脚本可正常识别和使用变量。

命名规则说明
首字符必须为字母(a-z, A-Z)
字符组成可包含字母、数字和下划线,不能有空格
特殊字符不能使用标点符号
关键字不能使用 bash 中的关键字(可通过 help 命令查看)

示例:

your_name="bigdata.com"  # 正确定义变量
student_age=20  # 多单词用下划线分隔,符合命名规则

3.2 变量使用与操作

使用变量时,在变量名前加$即可,也可通过${变量名}明确变量边界,避免歧义。已定义的普通变量可重新赋值,通过readonly命令可将变量定义为只读变量,只读变量的值不能修改;unset命令可删除普通变量,但无法删除只读变量。

操作类型命令示例说明
引用变量echo $your_name 、echo ${your_name}两种方式均可引用变量,${} 可明确边界
修改变量your_name="new_value"仅普通变量可修改
定义只读变量readonly var="test"变量赋值后不可修改
删除变量unset your_name仅能删除普通变量

3.3 变量类型

Shell 变量主要分为局部变量和全局变量(环境变量),二者在作用范围上存在明显区别。

变量类型作用范围示例
局部变量仅在当前 Shell 实例中有效,其他 Shell 启动的程序无法访问在当前终端定义 name="hadoop",新终端中 echo $name 无输出
全局变量所有程序(包括 Shell 启动的程序)均可访问通过 export 命令导出的变量,在子 Shell 中可使用

ps. set可以查看当前环境变量

四、Shell 字符串

4.1 字符串定义方式

字符串可使用单引号、双引号或不加引号定义,不同定义方式在变量识别和特殊字符处理上存在差异。

定义方式特点示例输出结果
单引号不识别变量和特殊字符,原样输出str='I am good at $skill'(skill="linux")I am good at $skill
双引号可识别变量和转义字符str="I am good at $skill"(skill="linux")I am good at linux
无引号不能包含空格,可识别变量str=Iamgoodat$skill(skill="linux")Iamgoodatlinux

4.2 字符串常用操作

字符串支持获取长度、提取子字符串和查找子字符串等操作,通过特定语法可实现这些功能。

操作类型语法示例说明
获取长度${# 字符串变量}如 ${#skill}(skill="hadoop"),输出 6
提取子字符串字符串索引、{字符串:索引:长度}索引从 0 开始,如 ${str:2}(str="I am..."),从第 2 个字符开始提取
查找子字符串expr index "$str" 子字符串位置从 1 开始计算,如expr index "$str" am(str="I am..."),输出 3

示例

1.获取字符串长度:

2.提取子字符串:

3.查找字符串:(从1开始计数)

    4.   参数传递

补充:

  • $@:表示传递给脚本或函数的所有参数列表,每个参数都是独立的。

例如,当执行 ./script.sh a b c 时,在脚本中 $@ 会展开为 "a" "b" "c"(保留每个参数的独立性)

通常与循环结合使用,遍历所有参数:

for arg in "$@"; doecho "参数: $arg"
done
  • $?:表示上一条命令执行后的退出状态码。

状态码为 0 表示命令执行成功

非 0 表示命令执行失败(不同的非零值可能代表不同的错误类型)

示例:

ls non_existent_file
echo "退出码: $?"  # 会输出非0值,表示ls命令执行失败

5.运算符的基本使用

总结

1、shell 简介绍:shell 是一个命令解释器 ,它将用户输入命令将转化为计算机可以执行的命令,并且结果反馈给用户
2、shell 的作用:shell 是linxu系统中的命令解释器 ,负责接受用户的指令并将其传递给内核执行,最终输出结果
3、shell 能干什么:自动化安装部署,比如说搭建论坛;自动化完成 系统批量添加用户 比如说  500用户;数据库备份  自动化完成;探测服务器负载 ;访问网站  每天  访问次数; 
4、shell 场景
大量重复工作  大量批量操作  主要是为了提高效率  节约时间
5、shell 脚本的构成5.1 第一行  # !/bin/bash   默认的解释器(脚本申明) 程序 执行 我们的脚本5.2 # 开头是注释脚本  就是不会执行里面的内容5.3 创建程序(脚本)的步骤① 创建一个包含命令语句  后期 在加上  控制结构② 修改你创建的文件权限    chmod + x 0805.shell③ 运行 检查脚本语法是否错误④ 执行 脚本   ./0805.sh5.4 shell脚本执行① ./0805.sh 执行  必须要给他执行权限② /opt/0805.sh    必须要给他执行权限③ 程序执行  sh 0805.sh bash 0805.sh    可以没有执行权限注意:执行 可以  当前路径 或者  绝对路径④ source 0805.sh  可以没有执行权限    ⑤ sh <  0805.sh    
6、shell 变量6.1 变量的语法  变量名=值  变量名   临时存放数据的位置值       临时存放可变化的数据 A=/etc/yum.repo.d/注:格式 等号两边不能有空格 并且变量名称需要以字母或下划线开头,各种特殊字符不能包含(如+、,、。?*&等) 6.2 变量的使用: $变量名  或   ${变量名}   6.3 修改变量中的值:   变量名=新的值  针对普通变量 6.4 只读变量:  readonly 变量名=初始值 只读变量在初始化后不能修改初始值,只读变量不能被删除6.5 删除变量(只能删除普通变量):    unset 变量名6.6 变量类型: 全局变量(整个用户或者环境都可以使用变量(环境变量))  局部变量(本地变量 只能在当下使用) 
7、字符串7.1 单引号 不识别变量7.2 双引号  可以识别变量可以直接调用变量7.3 ${#字符串}    #字符串的长度   包括空格7.4 提取字符串 ${字符串:索引}  # 索引从开始计算this is zjl012345678910${字符串:索引:长度}7.5 查找字符串 `expr index 字符串 子字符串`  从1开始计算位置   注意:expr 是以单个字符查找 如果中间有重复字母会显示前面字符的索引
8、shell 传递参数8.1 shell传递参数  ./demo04.sh(shell程序)  参数1   参数2  参数3   参数n8.2  shell 中接受的参数    $n     n 代表一个数   $1 第一个参数  $2 第二个参数$* 输出:  作为一个完整的字符串$@ 输出:  参数的列表$#         参数的个数$?         查看上一个命令是否正确$$          当前脚本运行的进程ID$!          后台运行的最后一个进程ID
9、运算符 在shell 中 使用一款计算工具 ,他能完成表达式的求值操作 (算术、关系、逻辑、字符串)加(+) 减(-) 乘(*) 除(/) 取余(%)   注: * 在系统中是代表所有  ,所以这边需要转义符(\)进行转成普通字符逻辑运算:&&:逻辑与,表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值  才为 0(结果成立)。使用 test命令测试时,“&&”可改为“-a”。||:逻辑或,表示“或者”,只要前后两个条件中有一个成立,整个测试命令的返回值即为 0(结果成立)。使用 test 命令测试时,“||”可改为“-o”。!:逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为 0(结果成立)。

今日份科普先到这里啦,明天继续~~

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

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

相关文章

Python自动化测试完整教程:pytest + selenium实战

目录 前言环境搭建pytest基础教程selenium基础教程pytest selenium实战项目页面对象模式(POM)测试报告生成持续集成配置最佳实践和进阶技巧总结 前言 自动化测试是现代软件开发中不可或缺的一环。Python作为一门简洁优雅的编程语言&#xff0c;配合pytest测试框架和seleniu…

APM 系列(一):Skywalking 与 Easyearch 集成

概述 SkyWalking 是一个开源的可观测性平台&#xff0c;用于收集、分析、聚合和可视化服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法&#xff0c;即使在云之间也能保持对分布式系统的清晰视图。它是一个现代的 APM&#xff0c;专门为云原生、基于容器的分布式…

使用 AD 帐户从 ASP.NET 8 容器登录 SQL Server 的 Kerberos Sidecar

我最近在做一个项目,需要将一个 ASP.NET 8 Web API 应用程序容器化,该应用程序需要与本地运行的 SQL Server 数据库进行通信。我们决定将 ASP.NET 8 容器定位到 Linux 系统,因此必须与运行在 Windows AD 域中的数据库进行通信。 问题 我们之前的设置是使用 IIS 在 Windows …

More Effective C++ 条款11:禁止异常流出析构函数之外

More Effective C 条款11&#xff1a;禁止异常流出析构函数之外核心思想 在C中&#xff0c;析构函数绝对不允许抛出异常。如果异常从析构函数中传播出去&#xff0c;可能会导致程序立即终止或未定义行为&#xff0c;特别是在栈展开过程中处理已有异常时。通过捕获并处理所有析构…

商超高峰客流统计误差↓75%!陌讯多模态融合算法在智慧零售的实战解析

原创声明&#xff1a;本文为原创技术解析&#xff0c;核心技术参数、架构设计及实战数据引用自 “陌讯技术白皮书”&#xff0c;技术方案与落地案例结合aishop.mosisson.com智慧零售数据联动场景展开&#xff0c;禁止未经授权的转载与商用。 一、行业痛点&#xff1a;智慧零售…

PyTorch实战(2)——使用PyTorch构建神经网络

PyTorch实战&#xff08;2&#xff09;——使用PyTorch构建神经网络0. 前言1. PyTorch 构建神经网络初体验1.1 使用 PyTorch 构建神经网络1.2 神经网络数据加载1.3 模型测试1.4 获取中间层的值2. 使用 Sequential 类构建神经网络3. PyTorch 模型的保存和加载3.1 模型保存所需组…

关于git的安装(windows)

1.git的介绍 Git 是一个分布式版本控制系统&#xff0c;由 Linus Torvalds 在 2005 年为 Linux 内核开发而创建。它能够高效地处理从小型到超大型项目的版本管理&#xff0c;具有以下特点&#xff1a; 分布式架构&#xff1a;每个开发者本地都有完整的仓库副本高效性能&#…

Java后端开发?接口封装器!

开发接口确实是Java后端开发中最核心、最可见的产出工作。“对入参校验、处理业务逻辑、返回格式处理”——精准地描述了一个API接口的核心处理流程。 但这只是冰山之上最直观的部分。一个专业、稳健、可扩展的后端系统&#xff0c;其复杂性和价值绝大部分隐藏在冰山之下。结合…

【沉浸式解决问题】NVIDIA 显示设置不可用。 您当前未使用连接到NVIDIA GPU 的显示器。

目录一、问题描述二、环境版本三、原因分析四、解决方案一、问题描述 在看一篇cuda安装的教程时&#xff0c;第一步是打开NVIDIA 控制面板&#xff0c;但是我打不开&#xff1a; NVIDIA 显示设置不可用。 您当前未使用连接到NVIDIA GPU 的显示器。 二、环境版本 设备&#xf…

牛客周赛 Round 106(小苯的方格覆盖/小苯的数字折叠/ 小苯的波浪加密器/小苯的数字变换/小苯的洞数组构造/ 小苯的数组计数)

A 小苯的方格覆盖思路&#xff1a;怎么摆第三行都是横放的2*1&#xff1b;故若n为奇数&#xff0c;总格子数3n为奇数&#xff0c;无法被2整除&#xff0c;直接排除。#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<iostream> #include<bits/stdc…

高并发内存池(16)-三层缓存的回收过程

高并发内存池&#xff08;16&#xff09;-三层缓存的回收过程 内存池的回收过程是内存管理系统的关键环节&#xff0c;它通过分层协作和智能合并机制&#xff0c;确保内存高效重复利用。以下是完整的回收流程解析&#xff1a;一、回收触发场景 ThreadCache回收&#xff1a;线程…

深入解析MyBatis Mapper接口工作原理

在Java持久层框架中&#xff0c;MyBatis以其灵活性和易用性赢得了广大开发者的青睐。作为MyBatis的核心概念之一&#xff0c;Mapper接口机制极大地简化了数据库操作代码的编写。本文将深入剖析MyBatis Mapper接口的工作原理&#xff0c;从基础概念到底层实现&#xff0c;帮助开…

疯狂星期四文案网第49天运营日记

网站运营第49天&#xff0c;点击观站&#xff1a; 疯狂星期四 crazy-thursday.com 全网最全的疯狂星期四文案网站 运营报告 今日访问量 常州苏州那些ip锲而不舍的扫了很多php的页面 今日搜索引擎收录情况 k页面比较严重了&#xff0c;哎。 我感觉不该做其他类型文案的 网…

从GPT-5发布来分析LLM大模型幻觉收敛(一)

GPT-5 号称在任何领域都有博士级别能力。在医疗健康领域&#xff0c;能够对专业的癌症诊断报告做通俗易懂的解读。对复杂的放射治疗方案决策&#xff0c;也能提供详细的分析报告&#xff0c;帮助病人权衡利弊。一位癌症患者的家属在发布会上表示&#xff0c;“ 真正鼓舞人心的是…

大模型安全概述、LlamaFirewall

资料搜集整理自网络。 概述 大模型爆火之后&#xff0c;衍生出大模型安全这一个比较新的领域。和之前的文章一样&#xff0c;本文有不少新颖的名词、概念、理论。 信通院、清华大学等多个单位联合发布的《大模型安全实践&#xff08;2024&#xff09;》&#xff0c;提出LLM安…

【目标检测】论文阅读3

Lightweight tomato ripeness detection algorithm based on the improved RT-DETR 论文地址 摘要 番茄具有很高的营养价值&#xff0c;需要对成熟果实进行准确的成熟度鉴定和选择性采收&#xff0c;以显著提高番茄收获管理的效率和经济效益。以往对番茄智能收获的研究往往只以…

Python音频分析与线性回归:探索声音中的数学之美

摘要&#xff1a;通过Python实现WAV音频信号处理与线性回归建模&#xff0c;揭示双声道音频的数学关联性&#xff0c;为声音特征分析提供新视角。1. 音频数据处理流程 1.1 WAV文件读取与预处理 使用scipy.io.wavfile读取音频文件&#xff0c;获取采样率与时域信号数据&#xff…

Linux shell脚本数值计算与条件执行

变量的数值计算实践 1 算术运算符 如果要执行算术运算&#xff0c;就会离不开各种运算符号&#xff0c;和其他编程语言类似&#xff0c;Shell 也有很多算术运算符。 下面就给大家介绍一下常见的 Shell 算术运算符&#xff1a; 、-&#xff0c;一元正号和负号。、-&#xff0c;加…

C#实战:基于iTextSharp实现PDF加密小工具

目录 1、技术框架 2、代码实战 2.1 创建窗体 2.2 后台代码逻辑 2.3 PDF加密用户类型 2.4 PDF加密权限列表 3、运行效果 4、总结 大家日常办公中有时候为了文档资料的安全需要对文档进行加密,尤其是针对PDF文档这个场景还是非常广泛的。今天给大家分享使用C#来实现PDF…

基于Labview的旋转机械AI智能诊断系统

1.摘要本文基于 CWRU 公开轴承数据集提出了一套“AI 轻量级模型 LabVIEW 智能诊断系统”。首先&#xff0c;LabVIEW 端构建了可视化、可交互的智能诊断平台。系统能够加载本地振动信号数据&#xff0c;调用训练好的深度学习模型进行故障识别与状态判断。界面集成信号时域监测、…