Shell脚本编程入门--Day2

news2024/11/18 17:43:27

文章目录

    • 几个简单内置shell命令
    • shell字串的语法
    • 计算变量长度的各种玩法
    • 批量修改文件名
    • 特殊shell扩展变量
    • 实际应用
    • 父子shell
    • 创建进程列表(创建子shell)

几个简单内置shell命令

echo -n 不换行输出 -e 解析字符串中的特殊符号 (\n, \r, \t, \b), printf是直接识别特殊符号的
eval 执行多个命令 没什么太大作用
exec 不创建子进程执行后面的命令, 并且exit
export 设置环境变量
time 可以计算命令执行时间

shell字串的语法

${变量} 返回变量的值
${#变量} 返回变量的长度
${变量 : start} 返回下标start及以后的字符
${变量:start:lenght} 返回下标start后面的length个字符
${变量#word} ,删除变量开头最短匹配的字符word
${变量##word}, 删除变量开头最长匹配的字符word
${变量%word} ,删除变量结尾最短匹配的字符word
${变量%%word}, 删除变量结尾最长匹配的字符word
${变量/p/s} 用是s字符串替换最先匹配的字符串p
${变量//p/s} 用s字符串替代所以的p字符串

计算变量长度的各种玩法

echo $name | wc -l 统计的是行数
echo n a m e ∣ w c − L 统计的是最长的一行的长度 e x p r l e n g t h " name | wc -L 统计的是最长的一行的长度 expr length " namewcL统计的是最长的一行的长度exprlength"{name}"
echo “${name}” | awk ‘{print length($0)}’
echo KaTeX parse error: Expected '}', got 'EOF' at end of input: {name} //最快

批量修改文件名

-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_1_finished.jpg
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_1_finished.png
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_2_finished.jpg
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_2_finished.png
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_3_finished.jpg
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_3_finished.png
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_4_finished.jpg
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_4_finished.png
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_5_finished.jpg
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_5_finished.png
# 解析 : ``是将结果输出, mv是改名, ${file/_finished/}, 将finished改为空格
[chen@iZ0jl780lb0oio7v4b0chbZ sub_str]$ for file in `ls *.jpg *.png`; do mv $file `echo ${file/_finished/}`; done;  
[chen@iZ0jl780lb0oio7v4b0chbZ sub_str]$ ll
total 0
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_1.jpg
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_1.png
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_2.jpg
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_2.png
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_3.jpg
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_3.png
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_4.jpg
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_4.png
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_5.jpg
-rw-rw-r-- 1 chen chen 0 May 19 14:50 chenlang_5.png

特殊shell扩展变量


result=${str:-word}, 如果str为空,返回word字符串给result, 如果str不为空, 返回str

result=${str:=word} , 如果str为空,用word赋值给str,并且返回给result, 如果str不为空,直接返回str

${str:?word}  如果str为空,则word当作strerr输出, 否则输出str

${str:+word} ,如果str为空, 什么都不做, 否则word返回。

实际应用

数据备份, 删除过期的数据脚本
find --搜索 xargs --删除
find 需要搜索的目录 -name 搜索的文件名字 -type 文件类型 -mtime + 7 | xargs rm -f
#超过7天的

dir_path=/data/my_sql/dir
#下面其实不安全的,例如dir_path为空,上面的一行代码被注释掉了等
find ${dir_path} -name `*.tar.gz` -type f  -mtime + 7 | xargs rm -f

find ${dir_path:=/data/my_sql/dir} -name `*.tar.gz` -type f  -mtime + 7 | xargs rm -f

父子shell

source 和点,执行脚本,在当前shell进程执行生效
bash 和sh 和./script 会创建子shell进程去执行

pstree命令,看到如下情况,就是父shell进程环境

 ├─sshd───sshd───sshd───bash───pstree

ps -ef
-f 显示UID PID PPID
-e 列出所有进程的信息
– forest 可以显示父子进程的一个结构
ps -ef --forest

例如 : 输入操作 ps -ef --forest
在这里插入图片描述

创建进程列表(创建子shell)

(cd ~; pwd; ls; cd /tmp/; pwd; ls)
加上小括号,就是开启子shell去执行命令

创建子shell的意义? – 提高并发执行的能力
如果父shell 在ping www.baidu.com ,这个操作会一直运行, 会阻塞其他操作!!
那么子shell的意义就在于这里。

echo $BASH_SHELL
结果为0 , 当前shell环境
结果为其他,就是开辟了子shell去执行

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

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

相关文章

浏览器的进程和线程

浏览器是多进程多线程的应用程序 浏览器进程 主要负责界面显示、用户交互、子进程管理等。浏览器进程内部会启动多个线程处理不同的任务。 网络进程 负责加载网络资源。网络进程内部会启动多个线程来处理不同的网络任务。 渲染进程 渲染进程启动后,会开启一个染主线…

macOS 13.4正式版(22F66)With OpenCore 0.9.2开发版 and winPE双引导分区原版镜像

镜像特点 原文地址:http://www.imacosx.cn/113625.html 完全由黑果魏叔官方制作,针对各种机型进行默认配置,让黑苹果安装不再困难。系统镜像设置为双引导分区,全面去除clover引导分区(如有需要,可以自行直…

java boot项目基础配置之设置启动端口

因为 springboot 项目是一个内嵌的tomcat 那么 我们就来研究一下 怎么改它的启动端口 其实 它的配置 还是非常多的 我们基础部分讲一下 后面 到实用部分 再一边用 一边再看一些 首先 我们如果不设置 他就会占用 我们的 8080端口 那么 我们最好就直接用 80端口 就不用输入端口…

【滤波】卡尔曼滤波数学

本文主要翻译自rlabbe/Kalman-and-Bayesian-Filters-in-Python的第7章节07-Kalman-Filter-Math(卡尔曼滤波数学)。 %matplotlib inline#format the book import book_format book_format.set_style()简介 如果你已经学习到了这一步,我希望你…

vue基础知识一:说说你对vue的理解?

一、从历史说起 Web是World Wide Web的简称,中文译为万维网 我们可以将它规划成如下的几个时代来进行理解 石器时代 文明时代 工业革命时代 百花齐放时代 石器时代 石器时代指的就是我们的静态网页,可以欣赏一下1997的Apple官网 最早的网页是没有数据库…

day1 IO 模型

目录 基本概念 同步和异步 阻塞和非阻塞 线程在运行过程中,可能由于以下几种原因进入阻塞状态: 可能阻塞套接字的Linux Sockets API调用分为以下四种 五种 I/O 模型 阻塞I/O 非阻塞I/O ​编辑 I/O多路复用模型 信号驱动式I/O模型 异步I/O 模型 …

网络模块封装

网络模块封装 library-network模块配置依赖一.自定义LiveDataCallAdapterFactory1.定义ApiResponse返回的数据类型2.LiveDataCallAdapter.kt3.LiveDataCallAdapter.kt 二.自定义CustomGsonConverterFactory三.拦截器1.HeaderInterceptor请求头拦截器2.BasicParamsInterceptor参…

Android - 内容提供者(Content Provider) 使用

Android - 内容提供者(Content Provider) 内容提供者组件通过请求从一个应用程序向其他的应用程序提供数据。这些请求由类 ContentResolver 的方法来处理。内容提供者可以使用不同的方式来存储数据。数据可以被存放在数据库,文件,甚至是网络。 有时候需…

Python如何进行性能测试?(Locust对接口进行压测)

python如何进行性能测试呢?其实原理就是对于接口进行加线程,打个比方就是当你有一个电梯,你同时可以搭载多少个人坐电梯那这个人数就是这部电梯的其中一个性能指标,那么对于接口来说每秒钟能有多少人成功发起请求后得到成功的响应…

QT 学习笔记2 信号与槽

上次做的界面,并没有逻辑。你点击按钮,并不会执行什么 要想其能作出反映,就不得不提到一个很重要的机制---信号与槽 当我们点击确定的时候,按钮会发出一个信号 点击确定的时候,会执行一段代码,这段程序就…

Ada 语言学习(3)复合类型数据——Array

文章目录 Array数据类型声明数组索引数组范围数组复制数组初始化直接赋值通过拷贝赋值不同索引范围但长度相等非指定类型边界收缩 多维数组数组遍历数组切片访问和动态检查直接访问动态检查 数组字面量 Array literal数组拼接两个数组拼接数组和单个值拼接 Array Equality&…

机器学习平台 PAI 支持抢占型实例,模型服务最高降本 90%

助力模型推理服务降本增效,适用于推理成本敏感场景,如:AIGC 内容生成异步推理、批量图像处理、批量音视频处理等。 在 AI 开发及服务不断追求效率的背景下,阿里云机器学习平台 PAI 宣布支持抢占型实例(Spot Instance&a…

2023逆向分析代码渗透测试flag0072解析(超详细)

一、竞赛时间 180分钟 共计3小时 1.从靶机服务器的FTP上下载flag0072,分析该文件,请提交代码保护技术的类型。提交格式:XXXX。 2.提交被保护的代码所在地址。提交格式: 0xXXXX。 3.提交代码解密的密钥。提交格式: 0xXX。 4.请提交输入正确flag时的输出。提交格式: XXXX。…

Python入门(十二)while循环(二)

while循环(二) 1.使用while循环处理列表和字典2.在列表之间移动元素3.删除为特定值的所有列表元素4.使用用户输入来填充字典 作者:xiou 1.使用while循环处理列表和字典 到目前为止,我们每次都只处理了一项用户信息:获…

建站教程:腾讯云轻量服务器安装宝塔面板搭建网站流程

腾讯云轻量应用服务器镜像选择宝塔Linux面板,然后在宝塔面板上安装LNMP网站所需的Web环境,在宝塔面板上新建站点,上床网站程序安装包到根目录,并安装网站全流程。腾讯云百科来详细说下腾讯云轻量应用服务器搭建网站全流程&#xf…

百果园ESG:围绕“好吃”二字,勾勒水果行业未来蓝图

当一场可持续绿色变革开始,ESG(环境、社会与治理)已经成为企业发展战略的重要组成部分。 然而,如何实现ESG和企业发展的协同却是一大问题。根据毕马威《2022年中国首席执行官展望》,一些企业家也表示ESG投资对提升财务…

SpringBoot配置文件3种格式、配置文件读取方式、多环境配置、配置文件优先级分类

文章目录 1 配置文件格式1.1 环境准备1.2 不同配置文件演示1.3 三种配合文件的优先级 2 yaml格式2.1 语法规则 3 yaml配置文件数据读取3.1 环境准备3.2 读取配置数据方式1 使用 Value注解方式2 Environment对象方式3 自定义对象 4 多环境配置4.1 yaml文件4.2 properties文件4.3…

H.265/HEVC编码原理及其处理流程的分析

H.265/HEVC编码原理及其处理流程的分析 H.265/HEVC编码的框架图,查了很多资料都没搞明白,各个模块的处理的分析网上有很多,很少有把这个流程串起来的。本文的主要目的是讲清楚H.265/HEVC视频编码的处理流程,不涉及复杂的计算过程。…

自定义线程池 ThreadPoolExecutor

ThreadPoolExecutor 自定义线程池 public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runnable> workQueue) {this(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue,Executors.defaultT…

Arduino ESP8266+RC522+阿里云 物联网入户控制RFID门禁系统

前言 根据项目结课报告改编而成&#xff0c;可能更适合作为一份文档而不是一篇记录类型的博客&#xff0c;没有留存接线图和运行图片&#xff0c;感到抱歉。 使用的板子是YwRobot的ESP8266板子&#xff0c;使用Arduino IDE开发&#xff0c;用到了舵机、按钮、人体感应传感器、…