Ubuntu的shell脚本
关于shell脚本
• shell脚本是文本的一种。
• shell脚本是可以运行的文本。
• shell脚本的内容是由说辑和数据组成。
• shell 脚本是解释型语言。
shell脚本存在的意义
Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具
Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。
每一个合格的Linux运维工程师,都需要能够熟练地编写Shell脚本语言,并能够阅读系统及各类软件附带的Shell脚本内容。
一次编编写永久受益
注意:系统支持的shell类型可以查看/etc/shells
常见shell种类有:
Bourne Shell(/usr/bin/sh或/bin/sh):标识为sh,该Shell由Steve Bourne在贝尔实验室时编写。在许多Unix系统中,该Shell是root用户的默认的Shell。
Bourne Again Shell(/bin/bash):标识为bash,该Shell由Brian Fox在1987年编写,是绝大多数发行版的默认的Shell,当运行sh时其实调用的是bash。
C Shell(/usr/bin/csh):标识为csh,该Shell由Bill Joy在BSD系统上开发。由于其语法类似于C语言,因此称为C Shell。
K Shell(/usr/bin/ksh):标识为ksh,该Shell由贝尔实验室的David Korn在二十世纪八十年代早期编写。它完全向上兼容 Bourne Shell 并包含了C Shell 的很多特性。
shell脚本中的基本元素
建立脚本
# mkdir script
# cd script/
# vim timinglee
# file timinglee 运行结果:
脚本的基本结构
脚本幻数:即脚本解释器,脚本运行的最优先指令,负责对脚本中其他命令进行解释
程序主题:程序主体通常由命令,执行逻辑控制器和数据组成
注释:脚本中的说明文字,不参与脚本执行,只是对脚本中的代码进行说明
脚本中的注释方法
脚本中通常用 # 号注释单行内容
# vim lee.sh
# sh lee.sh 运行结果:
多行注释
# sh lee.sh 运行结果:
脚本的书写规范
书写规范注意事项
脚本文件名应见名知意,例如backup_mysql.sh
文件开头指定脚本解释器 #!/bin/sh 或 #!/bin/bash
脚本中尽量不要用中文注释,防止本机或切换系统环境后中文乱码的困扰
多使用内部命令,如:echo、eval、exec、export、read、shift、exit
尽量用少的命令完成动作
# cat /etc/passwd | grep root
# grep root /etc/passwd
运行结果相同:
开头加版本特权等信息
# Author:作者
# Date:创建日期
# Version:版本
# Mail:联系方式
# Info:对软件信息进行描述
# Function:功能
注意:利用缩进体现代码结构,更加利于后期阅读
vim用于书写脚本的设定
在编写一个脚本呢时我们需要书写一些主属性信息用来利与脚本阅读
如果每次都手写这些信息,很显然有做了很多重复动作
用vim的自动编写功能可以实现对于这些重复动作的简化
脚本书写设置
# vim ~/.vimrc 【设置家目录脚本书写格式】
set ts=4 sw=4 ai et
【ts=4表示一个Tab键是4个空格,sw=4缩进长度为4,ai表示自动缩进(这一行有Tab键,按回车键下一行会自动缩进,长度被Tab键固定),et表示把Tab键转换成空格
脚本执行方法
在当前环境下运行
# vim test.sh
# . test.sh 【当前环境作解释器调用脚本】
# ps f 运行结果:
# source test.sh
# ps f 运行结果:
在指定环境中运行
# sh test.sh 【脚本没有可执行权限时使用的方法("sh" ,". " ,"source")】
# ps f 运行结果:
# chmod +x test.sh 【为脚本添加可执行权限】
# ./ test.sh
# /root/script/test.sh
# ps f 运行结果:
. test.sh与./ test.sh区别:" . "点+空格不会开新环境,"./"在当前环境,不能在根目录运行。
脚本调试
脚本在执行过程中如果出现问题,单从脚本的执行报错中找问题困难比较大,如果在执行时显示执行过程这样就可以快速定位脚本的问题所在
# vim lee.sh
# sh lee.sh运行结果:
# sh -x lee.sh运行结果:
命令退出值
什么是退出值
在UNIX或者Linux中,每个命令都会返回一个退出状态码
退出状态码是一个整数,其有效范围为0~255
通常情况下,成功的命令返回0,而不成功的命令返回非0值。非0值通常都被解释成一个错误码行为良好的UNIX命令,程序和工具都会返回0作为退出码来表示成功。
查看退出值
# echo $? 【查看退出值,0表示没有错误】
没有目录查看退出值
有目录查看退出值
修改脚本退出值
# vim lee.sh
# sh lee.sh
# echo $?
练习:使用脚本查找指定网卡的IP地址
# sh test.sh ens160 【使用脚本查看网卡IP地址】
相关文章:

Ubuntu的shell脚本
关于shell脚本 • shell脚本是文本的一种。 • shell脚本是可以运行的文本。 • shell脚本的内容是由说辑和数据组成。 • shell 脚本是解释型语言。 shell脚本存在的意义 Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具 Linux/UNIX系统…...
微信小程序页面嵌套web-view点击系统导航返回时进行弹窗处理
实现效果:微信小程序页面嵌套web-view点击系统导航返回时进行弹窗处理 首先在web-view里是不可实现的(据我了解下来) 参考小程序文档:page-container 大致逻辑: 1、page-container可实现页面离开前拦截 2、由于web-vie…...

从抄表到节能,电费管理系统如何重构公寓运营场景——仙盟创梦IDE
租房公寓电费管理系统是集智能计量、自动化计费、线上缴费、数据管理于一体的综合性解决方案,旨在解决传统电费管理中人工抄表误差大、收费效率低、纠纷频发等痛点。系统通过部署智能电表实时采集用电数据,结合云计算与大数据分析技术,实现电…...
Rust 学习笔记:关于闭包的练习题
Rust 学习笔记:关于闭包的练习题 Rust 学习笔记:关于闭包的练习题问题 1问题 2以下程序能否通过编译?若能,输出是?以下程序能否通过编译?若能,输出是?考虑该 API,空白处填…...

记一次前端逻辑绕过登录到内网挖掘
前言 在测试一个学校网站的时候,发现一个未授权访问内网系统,但是这个未授权并不是接口啥的,而是对前端 js 的审计和调试发现的漏洞,这里给大家分享一下这次的漏洞的过程。 进入内网的过程 可以看到是一个图书馆的网站ÿ…...
有什么excel.js支持IE11,可以显示EXCEL单元格数据,支持单元格合并,边框线,单元格背景
有什么excel.js支持IE11,可以显示EXCEL单元格数据,支持单元格合并,边框线,单元格背景 在 IE11 环境下操作 Excel 且需要支持单元格合并、边框、背景等格式时,需考虑兼容性较强的库。以下是符合需求的工具及对比分析: 1. SheetJS(js-xlsx&am…...
x86 与 ARM 汇编深度对比:聚焦 x86 汇编的独特魅力
一、引言 汇编语言是硬件与软件的桥梁,x86 和 ARM 作为两大主流架构,其汇编语言在设计理念、指令集、编程风格上差异显著。本文以 x86 汇编为核心,结合与 ARM 的对比,解析 x86 汇编的技术细节与应用场景,助力开发者深…...

Springboot 整合 WebSocket 实现聊天室功能
目录 前言一、WebSocket原理二、Spring Boot集成WebSocket2.1. 引入依赖2.2 配置类WebSocketConfig2.3 WebSocketServer 类2.4 前端代码 index.html2.5 Controller访问首页 前言 WebSocket概述: 在日常的web应用开发中,常见的是前端向后端发起请求&…...

用 Trae IDE 打造一个桌面小爬虫:从 PyQt5 开始,轻松采集掘金首页内容
很多程序员都有这样的经历:刷掘金、看文章、找灵感、追热点。但你有没有想过,有一天让“爬虫”代替你去浏览这些内容?自动提取标题、作者、点赞数、评论数,一键生成你的专属“技术热点日报”。 今天我们就用 Trae IDE PyQt5 来完…...

python和风api获取天气(JSON Web Token)
下载安装openssl 默认安装目录,添加C:\Program Files\OpenSSL-Win64\bin到用户Path环境变量 打开cmd,执行命令,会生成两个文件ed25519-private.pem,ed25519-public.pem openssl genpkey -algorithm ED25519 -out ed25519-privat…...
模板应用更新同步到所有开发中的应用
需求是为多个 Vue 3 应用方便地同步模板更新,并且模板自身也可能演进,采用 Git 上游仓库 (Upstream) 策略。这种方法在操作上相对直观,更贴近常规的 Git 工作流,并且能较好地处理模板更新中可能涉及到的配置文件、依赖项以及 Vue …...
git和gitee的常用语句命令
Git 和 Gitee 常用命令及语法规则 一、Git 基础配置与初始化 在使用 Git 进行版本控制之前,需要进行用户签名的配置。此操作只需执行一次即可生效。 git config --global user.name "用户名" # 设置用户名 git config --global user.email "邮箱…...

52、C# 泛型 (Generics)
泛型是 C# 2.0 引入的一项强大功能,它允许你编写可以处理多种数据类型的代码,而无需为每种类型重复编写相同的逻辑。泛型提高了代码的重用性、类型安全性和性能。 基本概念 泛型类 public class GenericClass<T> {private T _value;public Gene…...
理解 Vue 2 的响应式原理:数据劫持与依赖收集的背后
在Vue2中,响应式系统是一切魔法的源头,无论是模板中的数据绑定,还是computed,watch的精准监听,都离不开Vue背后的响应式机制,本文将从源码角度出发,结合实例,深入剖析vue2是如何通过数据劫持(Object.defineProperty)和依赖收集实现响应式的 一.Vue2响应式系统基本原理 vue2中…...
深入理解 Pinia:Vue 状态管理的革新与实践
深入理解 Pinia:Vue 状态管理的革新与实践 一、引言 在 Vue.js 应用开发中,状态管理是构建复杂应用的关键环节。Pinia 作为新一代 Vue 状态管理库,凭借其简洁的 API 设计、强大的开发体验和良好的性能表现,逐渐成为 Vue 开发者的…...
Dubbo高频面试题
引言 作为分布式服务框架的标杆,Dubbo凭借其高性能RPC通信、灵活的服务治理能力和丰富的容错机制,成为Java技术栈中微服务领域的核心考点。本文系统梳理Dubbo高频面试核心知识点,涵盖容错策略、负载均衡、注册中心原理、服务上下线感知等关键…...

Allegro X PCB设计小诀窍--05.如何在Allegro X中实现隐藏电源飞线效果
背景介绍:在PCB设计过程中,布线初期印制板上的飞线错综复杂,信号线和电源线混合交错,但是实际上对于多层板来说,电源的网络一般是通过电源层铺铜连接的,很少需要走线,这样混乱的情况会严重影响设…...

一篇文章教会你ESP8266串口WIFI无线模块实现物联网无线收发,附STM32代码示例
目录 一、ESP-01S无线模块: (1)特点: (2)管脚定义: (3)启动模式: 二、ESP-01S出厂固件烧录: (1)引脚接线: ࿰…...

算法-基础算法
一、枚举算法 也称为穷举算法,指的是按照问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,将它们逐一与目标状态进行比较以得出满足问题要求的解。在列举的过程中,既不能遗漏也不能重复 1. 问题 …...
特种设备作业人员-G3锅炉水处理如何备考学习?
备考特种设备作业人员 - G3 锅炉水处理可以从了解考试信息、掌握基础知识、选择学习资料、制定学习计划等多个方面入手,以下是具体的建议: 1.了解考试信息 *明确考试大纲:详细了解 G3 锅炉水处理考试大纲的要求,明确考试的…...

Reactor模式详解:高并发场景下的事件驱动架构
文章目录 前言一、Reactor模式核心思想二、工作流程详解2.1 服务初始化阶段2.2 主事件循环2.3 子Reactor注册流程2.4 IO事件处理时序2.5 关键设计要点 三、关键实现技术四、实际应用案例总结 前言 在现代高性能服务器开发中,如何高效处理成千上万的并发连接是一个关…...
UniApp 生产批次管理模块技术文档
UniApp 生产批次管理模块技术文档 1. 运行卡入站页面 (RunCardIn) 1.1 页面结构 <template><!-- 页面容器 --><view class"runCardIn" :style"{ paddingTop: padding }"><!-- 页头组件 --><pageHeader :title"$t(MENU:…...

项目日记 -Qt音乐播放器 -设置任务栏图标与托盘图标
博客主页:【夜泉_ly】 本文专栏:【Qt音乐播放器】 欢迎点赞👍收藏⭐关注❤️ 代码仓库:MusicPlayer v1.0版视频展示:Qt -音乐播放器(仿网易云)V1.0 前言 本文的目标: 一是设置任务栏的图标, 二…...

国产 BIM 软件万翼斗拱的技术突破与现实差距 —— 在创新与迭代中寻找破局之路
万翼斗拱在国产BIM领域迈出重要一步,凭借二三维一体化、参数化建模及AI辅助设计等功能形成差异化竞争力,在住宅设计场景中展现效率优势,但与国际主流软件相比,在功能完整性、性能稳定性和生态成熟度上仍有显著差距,需通…...
记录算法笔记(2025.5.29)最小栈
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int get…...
Android SurfaceFlinger核心工作机制
SurfaceFlinger 核心工作机制解析 1. 启动入口与初始化流程 (1) 进程启动入口 二进制文件:/system/bin/surfaceflinger 源码路径:frameworks/native/services/surfaceflinger/main_surfaceflinger.cppint main(int, char**) {// 1. 初始化进程配置sig…...

Golang|etcd服务注册与发现 策略模式
etcd 是一个开源的 分布式键值存储系统(Key-Value Store),主要用于配置共享和服务发现。 ETCD是一个键值(KV)数据库,类似于Redis,支持分布式集群。ETCD也可以看作是一个分布式文件系统ÿ…...
深度解析UniApp盲盒系统开发:从源码架构到多端部署全流程
一、正版盲盒系统的技术选型与源码设计 跨平台开发框架的核心配置 UniApp多端适配方案 环境搭建:全局安装vue/cli与npm install -g dcloudio/uni-cli,通过uni -V验证版本(需≥3.0)。多端编译命令: # 编译微…...
STM32的OLED显示程序亲测可用:适用于多种场景的稳定显示解决方案
STM32的OLED显示程序亲测可用:适用于多种场景的稳定显示解决方案 【下载地址】STM32的OLED显示程序亲测可用 这是一套专为STM32设计的OLED显示程序,经过实际测试,运行稳定可靠。支持多种OLED屏幕尺寸和类型,提供丰富的显示效果&am…...

【AI News | 20250529】每日AI进展
AI Repos 1、WebAgent 阿里巴巴通义实验室近日发布了WebDancer,一款旨在实现自主信息搜索的原生智能体搜索推理模型。WebDancer采用ReAct框架,通过分阶段训练范式,包括浏览数据构建、轨迹采样、监督微调和强化学习,赋予智能体自主…...