shell脚本完成内容筛选并下载

  • (꒪ꇴ꒪ ),Hello我是祐言QAQ
  • 我的博客主页:C/C++语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍
  • 快上🚘,一起学习,让我们成为一个强大的攻城狮!
  • 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,请在评论区指正,感谢🙏


一、Shell 脚本简介

        Shell 是一种命令行解释器,提供了用户与操作系统内核之间的接口。Shell 脚本是一种文本文件,其中包含一系列 Shell 命令,它们按照脚本的顺序执行。Shell 脚本通常用于自动化任务、批处理和系统管理。

        一些基本的 Shell 脚本概念和元素包括:

  • 变量: 存储和引用数据的标识符。
  • 条件语句: 根据条件执行不同的命令。
  • 循环结构: 重复执行一组命令。
  • 函数: 将一组命令封装为可重复使用的代码块。
  • 管道和重定向: 通过管道传递输出,重定向输入/输出到文件。

        Shell 脚本可以使用不同的 Shell,如 Bash(Bourne Again SHell)、sh、zsh 等。它们有不同的语法和功能,但基本的概念在它们之间通常是相似的。 Shell 脚本是 Linux 和 Unix 系统中非常强大和灵活的自动化工具

二、内容筛选保存

        这个脚本的目标是从名为 download.lst 的文件中提取符合特定条件的行,然后保存到名为 output.txt 的文件中。脚本使用了 awk 来进行文本处理和筛选,并使用了一些基本的 Shell 命令来管理文件。

1.需求

        在类似download.lst这样的文件中,我们都会遇到一些需要把其中的重要部分来筛选出来并保存的问题,发现我们需要的工具包都是以XXX_TARBALL的形式出现,并且是在:=后边。

        因此我们的筛选方向就是不以#开头但包含‘ TARBALL ’的行中‘ := ’之后的部分就是我们先要的文件名,因此shell脚本如下:

#!/bin/bash

# 定义输入文件和输出文件
input_file="download.lst"
output_file="output.txt"

# 使用awk筛查并保存文件名
awk '!/^#/ && /TARBALL/ {   							# 不以#开头且包含TARBALL的行
    sub(/^[^:]+:=/, "", $0); 							# 移除:=之前的部分
    gsub(/^[[:space:]]+|[[:space:]]+$/, "", $0); 		# 去除行首和行尾的空白字符
    print $0                							# 输出处理过的行,即文件名
}' "$input_file" | tr -d ' ' > "$output_file" 			# 使用tr命令去除输出行中的空格

echo "筛查并保存完成,结果保存在$output_file中"

2.解释这个脚本

  1. 文件定义:

    input_file="download.lst" output_file="output.txt"

    定义了输入文件和输出文件的变量。

  2. awk命令:

    awk '!/^#/ && /TARBALL/ { sub(/^[^:]+:=/, "", $0); gsub(/^[[:space:]]+|[[:space:]]+$/, "", $0); print $0 }' "$input_file"
    !/^#/ && /TARBALL/:不以 # 开头且包含 TARBALL 的行。
    sub(/^[^:]+:=/, "", $0):移除行中 := 之前的部分。
    gsub(/^[[:space:]]+|[[:space:]]+$/, "", $0):去除行首和行尾的空白字符。
    print $0:输出处理过的行,即文件名。
  3. tr命令:

    | tr -d ' '

    使用管道将awk的输出传递给tr命令,tr -d ' ' 用于去除输出行中的空格。

  4. 输出信息:

    > "$output_file"

    将处理后的结果保存到输出文件中。

  5. 最后echo语句:

    echo "筛查并保存完成,结果保存在$output_file中。"

    输出一个提示消息。

        在筛查时遇到了有变量替换的地方,如下:

        这里呢提供一个极少目标用export定义变量然后sed命令替换的方法。

        脚本源码修改为:

#!/bin/bash
export CAIRO_VERSION_MICRO=0
export ETONYEK_VERSION_MICRO=9


# 定义输入文件和输出文件
input_file="download.lst"
output_file="output.txt"

# 使用awk筛查并保存文件名
awk '!/^#/ && /TARBALL/ {   							# 不以#开头且包含TARBALL的行
    sub(/^[^:]+:=/, "", $0); 							# 移除:=之前的部分
    gsub(/^[[:space:]]+|[[:space:]]+$/, "", $0); 		# 去除行首和行尾的空白字符
    print $0                							# 输出处理过的行,即文件名
}' "$input_file" | tr -d ' ' | sed -e "s/\$(CAIRO_VERSION_MICRO)/$CAIRO_VERSION_MICRO/g" \
                                    -e "s/\$(ETONYEK_VERSION_MICRO)/$ETONYEK_VERSION_MICRO/g" > "$output_file"

echo "筛查并保存完成,结果保存在$output_file中"

三、文件下载

        这个脚本的目标是从一个名为 outputlist.txt 的文件中读取文件名,然后根据指定的 URL 前缀下载这些文件。脚本使用了 curl 命令来执行下载,并使用了 while 循环来逐行读取文件名。其中的网址或者具体命令还需自行修改。

#!/bin/bash

# 网址前缀
url_prefix="https://dev-www.libreoffice.org/src/"

# 从outputlist.txt逐行读取文件名
while IFS= read -r file_name; do
    # 删除文件名中的回车符
    file_name=$(echo "$file_name" | tr -d '\r')

    # URL编码文件名
    encoded_file_name=$(printf "%s" "$file_name" | jq -s -R -r @uri)

    # 拼接完整的下载链接
    download_url="$url_prefix$encoded_file_name"

    # 使用curl下载文件
    curl -k -L -O "$download_url"
done < outputlist.txt

# 输出下载完成的信息
echo "文件下载完成。"

        成功下载的界面:


四、扩展安装与错误分析

        在运行过程中呢,如果未安装一下三个中的任意一个都会报错,依次按提示安装即可。

sudo apt-get install dos2unix
  • install dos2unix: 安装名为 dos2unix 的软件包,该软件包提供了将文本文件从 DOS 格式(回车换行)转换为 Unix 格式(换行符)的工具。

        这个命令对于处理不同操作系统格式的文本文件很有用,例如在 Windows 上创建的文本文件,因为它们使用不同的换行符。

sudo apt install curl
  • install curl: 安装名为 curl 的软件包,curl 是一个用于在命令行中进行网络请求的工具,支持多种协议。

        这个命令安装了 curl 工具,使你能够方便地从命令行中下载文件或访问 Web 服务。

sudo apt-get install jq
  • install jq: 安装名为 jq 的软件包,jq 是一个轻量级的命令行 JSON 处理工具。

        这个命令安装了 jq,它对于处理和解析 JSON 数据非常方便,是在 Shell 脚本中进行 JSON 处理的有用工具。

        这个错误提示表明 curl 在执行HTTPS请求时遇到了证书验证的问题。有几种可能的解决方案:

  1. 信任证书: 确保你的系统上的证书是最新的。你可以尝试更新证书:

    • 在 Ubuntu 上,可以运行 sudo apt-get install --reinstall ca-certificates
    • 在 CentOS 上,可以运行 sudo yum reinstall ca-certificates.
  2. 使用 -k 选项curl 命令中添加 -k--insecure 选项,以跳过对证书的验证。请注意,这会降低安全性,因为它将禁用对服务器证书的验证,只有在你确信目标网站是可信任的情况下才使用。(推荐直接-k

    curl -k -L -O "$download_url"
  3. 指定证书文件: 使用 --cacert 选项指定一个证书文件:

    curl --cacert /path/to/ca-certificates.crt -L -O "$download_url"

        更多C/C++语言Linux系统数据结构ARM板实战相关文章,关注专栏:

   手撕C语言

            玩转linux

                    脚踢数据结构

                            系统、网络编程

                                     探索C++

                                             6818(ARM)开发板实战

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉🎉🎉感谢关注🎉🎉🎉

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最新AIGC创作系统ChatGPT系统源码+DALL-E3文生图+图片上传对话识图/支持OpenAI-GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

打造独特封面:封面设计的关键要素与技巧解析!

书籍作品的封面设计非常精致。就像商品的包装一样&#xff0c;有助于提高书籍的销量。书封的设计表现主要从图像、文字、材质等方面进行设计。基本上所有的书都需要有文字&#xff0c;所以特别考验设计师的文字排版能力。今天就和大家分享一些书籍封面设计的小知识&#xff0c;…

【23真题】官方出错题,复试不算分!信号学不好,就考它!

今天分享的是23年广西民族大学861的信号与系统试题及解析。广西民族我之前做择校分析的时候说过&#xff0c;考生进入复试之后&#xff0c;专业课会扣掉&#xff01;不算分&#xff0c;只对公共课排名&#xff01;而且专业课简单&#xff0c;但是官方今年出了好几道错题&#x…

数据治理技术:研究现状与数据规范

随着信息技术的迅速发展,数据规模逐渐扩大&#xff0c;与此同时&#xff0c;劣质数据也随之而来&#xff0c;极大地降低了数据挖掘的质量&#xff0c;对信息社会造成了严重的困扰&#xff0c;劣质数据大量存在于很多领域和机构&#xff0c;国外权威机构的统计表明&#xff1a;美…

3 测试驱动的Spring Boot应用程序开发数据层示例

文章目录 用户故事数据模型选择数据库SQL与NoSQLH2、Hibernate和JPA Spring Boot Data JPA依赖关系和自动配置Spring Data JPA技术栈数据源&#xff08;自动&#xff09;配置 实体存储库存储User和ChallengeAttempt显示最近的ChallengeAttempt服务层控制器层用户界面 小结 文章…

LeetCode [简单](非递归)二叉树的中序遍历

遍历左孩子&#xff0c;将他们放进栈中&#xff0c;左边走到尽头&#xff0c;出栈&#xff0c;root变为栈顶元素&#xff0c;存值&#xff0c;向右边走一个 再次遍历左孩子&#xff0c;将他们放入栈中&#xff0c;如果没有左孩子了&#xff0c;就出栈&#xff0c;root变为栈顶…

Html网页threejs显示obj,ply三维图像实例

程序示例精选 Html网页threejs显示obj,ply三维图像实例 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Html网页threejs显示obj,ply三维图像实例》编写代码&#xff0c;代码整洁&#xff0…

Linux:可视化管理工具Webmin的安装

一、下载 地址&#xff1a;Webmin官网 我这里下载的是1.700-1版本 二、安装 1、在虚拟机上新建目录并安装软件 mkdir /opt/webmin rpm -ivh webmin-1.700-1.noarch.rpm2、修改webmin的root密码 /usr/libexec/webmin/changepass.pl /etc/webmin root 1234563、修改端口(可…

手写VUE后台管理系统5 - 整合状态管理组件pinia

整合状态管理组件 安装整合创建实例挂载使用 pinia 是一个拥有组合式 API 的 Vue 状态管理库。 pinia 官方文档&#xff1a;https://pinia.vuejs.org/zh/introduction.html 安装 yarn add pinia整合 所有与状态相关的文件都放置于项目 src/store 目录下&#xff0c;方便管理 在…

linux磁盘已满,查看哪个文件占用多

使用df -h查看磁盘空间占用情况 使用sudo du -s -h /* | sort -nr命令查看那个目录占用空间大 然后那个目录占用多 再通过sudo du -s -h /var/* | sort -nr 一层层排查&#xff0c;找到占用文件多的地方 如果通过以上方法没有找到问题所在&#xff0c;那么可以使用 lsof |…

win10下安装 Anaconda + Cuda + Cudnn + Pycharm + Pytorch

1.安装Anaconda &#xff08;1-1&#xff09;下载Ananconda, Anaconda官网 选择windows版本&#xff1b; &#xff08;1-2&#xff09;安装Anaconda,一般选择【Just Me】 &#xff08;1-3&#xff09;建议不要装在C盘&#xff0c;后期多环境的python环境和各种库文件会占用很多…

报表生成器FastReport .Net用户指南:报告继承

我们经常会有许多数据相同的报告&#xff0c;例如&#xff0c;带有公司徽标和一些数据&#xff08;电子邮件、地址等&#xff09;的页眉/页脚。现在设想一下&#xff0c;您需要更改一些公司数据&#xff0c;例如电子邮件。您必须在每个报告中都这样做&#xff01;为了避免这种情…

服务器修复

服务器修复 主要服务器漏洞展示未禁用sync、shutdown、halt默认账户。未创建系统管理员、审计管理员、安全管理员账户设置系统管理员设置安全管理员 设置审计管理员配置PASS_MAX_DAYS 99999、PASS_MIN_LEN 5未配置TMOUT值配置HISTSIZE0未配置登录失败/密码复杂度策略umask值022…

高效的将两个文件夹中多余的文件删除

高效的将两个文件夹中多余的文件删除 解决方案 之前使用的是这个方法&#xff0c;但是图像太多&#xff0c;需要删除的有70W张&#xff0c;得删10多天。。 将两个文件夹中重复的图象删除 解决方案 先将image图像复制一份&#xff0c;然后改名为txt import osdef change_file…

智慧环保:视频监控平台EasyCVR与AI智能分析在环保领域的应用

人工智能&#xff08;AI&#xff09;视频分析技术在环保领域有着广泛的应用&#xff0c;通过智能识别和跟踪技术&#xff0c;AI视频分析可以实时监测空气质量、水质和噪音等环境指标&#xff0c;帮助环保部门及时发现污染源并进行有效治理&#xff0c;提高监测、管理和保护环境…

【古月居《ros入门21讲》学习笔记】10_话题消息的定义与使用

目录 说明&#xff1a; 1. 话题模型 2. 实现过程&#xff08;C&#xff09; 自定义话题消息 Person.msg文件内容 Person.msg文件内容说明 编译配置 在package.xml文件中添加功能包依赖 在CMakeLists.txt中添加编译选项 编译生成语言相关文件 创建发布者代码&#xff…

wifi8 Multi-AP介绍

作为一种结构&#xff0c;multi-AP最早在wifi7的草案中被提出。 但是wifi7估计不会加入。 现在变成了wifi8的路线。 比如下面是一种设想。总体是以若干BSS为单位。 每个BSS的信息都可以在CC处得到。这样就是一种基于CC的总控的MAP。 总控分为两个TDMA&#xff0c; 第一个TD…

数据结构算法-分支定界算法

引言 应该记得这一张图片&#xff0c;在A星算法里面说过 那么现在说的是换一种方式实现 如何实现&#xff1f; 之前不撞南墙不回头的方法-深度优先搜索 的方式 广度优先搜索方式 广度优先搜索&#xff1a;就是说按照顺序入队 并且搜索扩展节点 探测四面八方&#xff0c;如此循环…

Redis面试题:分片集群相关问题

目录 面试官&#xff1a;redis的分片集群有什么作用 面试官&#xff1a;Redis分片集群中数据是怎么存储和读取的&#xff1f; 面试官&#xff1a;redis的分片集群有什么作用 候选人&#xff1a;分片集群主要解决的是&#xff0c;海量数据存储的问题&#xff0c;集群中有多个m…

java第20章节

一.线程简介 二.创建线程 1.继承Thread类 Thread类中常用的两个构造方法如下&#xff1a; public Thread():创建一个新的线程对象。 public Thread(String threadName):创建一个名称为threadName的线程对象。 继承Thread类创建一个新的线程的语法如下&#xff1a; public c…