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)开发板实战

📢写在最后

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

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

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

相关文章

Linux:虚拟机安装Ubuntu系统

一、下载Ubuntu 地址&#xff1a;https://cn.ubuntu.com/download/desktop 二、安装 以上配置完成后&#xff0c;点击完成按钮&#xff0c;接下来就是一段较长时间的等待安装过程。 安装完成后&#xff0c;还有一些系统性配置。 系统配置非常简单&#xff0c;全部next即可。…

使用Typecho搭建个人博客网站,并内网穿透实现公网访问

使用Typecho搭建个人博客网站&#xff0c;并内网穿透实现公网访问 文章目录 使用Typecho搭建个人博客网站&#xff0c;并内网穿透实现公网访问前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 …

DHCP协议讲解(含DHCP状态机)

加个目录 一、概述 大家都知道&#xff0c;为了使用TCP/IP协议族&#xff0c;每台主机和路由器需要一定的配置信息。 下面是一个简单的例子&#xff1a; 某学校的教学办公区域将要布置数百台计算机&#xff0c;每台都需要分配IP&#xff0c;如何实现对这些数量巨大的主机进…

哈希_快乐数

//编写一个算法来判断一个数 n 是不是快乐数。 // // 「快乐数」 定义为&#xff1a; // // // 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。 // 然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。 // 如果…

Seata简介与常用模式解决方案概述

Seata 是什么? Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。 Seata事务管理中有三个重要的角色&#xff1a; TC (Transaction Coordinator) - 事务协调者&#xff1a;维护全局和分支事务的状态&#xff0c;协调全局事务提…

挑战传统IT:RPA以更低的成本和更高的效率领跑数字化转型

在企业数字化进程中&#xff0c;传统的IT解决方案往往带来高成本和低效率的问题。因此&#xff0c;如何顺利地、平稳地进行数字化转型对企业来说是核心考虑。 为此&#xff0c;本文将深入探讨RPA&#xff08;Robotic Process Automation&#xff09;如何以其独特的优势&#xf…

牛客 算法题 golang语言实现

题目 HJ101 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序 描述 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序数据范围&#xff1a; 1 ≤ &#xfffd; ≤ 10001≤n≤1000 &#xff0c;元素大小满足 0 ≤ &#xfffd; &#…

CONTROLLING VISION-LANGUAGE MODELS FOR MULTI-TASK IMAGE RESTORATION

CONTROLLING VISION-LANGUAGE MODELS FOR MULTI-TASK IMAGE RESTORATION (Paper reading) Ziwei Luo, Uppsala University, ICLR under review(6663), Cited:None, Stars: 350, Code, Paper. 1. 前言 像CLIP这样的视觉语言模型已经显示出对零样本或无标签预测的各种下游任务…

AutoDIR: Automatic All-in-One Image Restoration with Latent Diffusion

AutoDIR: Automatic All-in-One Image Restoration with Latent Diffusion (Paper reading) Yitong Jiang, The Chinese University of Hong Kong, arXiv23, Code, Paper 1. 前言 我们提出了一种具有潜在扩散的一体化图像恢复系统&#xff0c;名为AutoDIR&#xff0c;它可以…

西南科技大学信号与系统A实验三(线性连续时间系统的分析)

一、实验目的 1.掌握用 matlab 分析系统时间响应的方法 2.掌握用 matlab 分析系统频率响应的方法 3.掌握系统零、极点分布与系统稳定性关系 二、实验原理 1. 系统函数 H(s) 系统函数:系统零状态响应的拉氏变换与激励的拉氏变换之比. H(s)=R(s)/E(s) 在 matlab 中可采用…

图片伪装,将RAR文件隐藏到图片里

下载链接 效果图&#xff1a; 代码&#xff1a; ECHO OFF TITLE PtoR MODE con COLS55 LINES25 color 0A:main cls echo.当前时间&#xff1a;%date% %time% echo.欢迎使用图片伪装&#xff0c;本脚本可以将RAR文件隐藏到图片里. echo.set /p "imagefile①请拖入图像文件…

数据仓库数据管理模型

数据仓库分为贴源层、数据仓库层、数据服务层&#xff0c;有人叫做数仓数据模型&#xff0c;或者叫"数据管理模型”。 我们为什么要进行数据分层管理&#xff0c;下图的优点介绍已经说得比较明确&#xff0c;再补充几点&#xff1a; 保障数据一致性&#xff1a;上层的数…

最简单的Python程序员编辑器——学习Python的第二篇

第二章 基础 安装python 按照上一期的教程安装&#xff0c;如果有什么问题可以提出阿莱 安装完之后&#xff0c;在电脑的程序中查找SHELL 这里是Win10&#xff0c;win11你也是到程序菜单查找。 你可以把把它点击右键&#xff0c;保存到桌面上&#xff0c;或者固定到开始菜单…

数组元素积的符号

数组元素积的符号 描述 : 已知函数 signFunc(x) 将会根据 x 的正负返回特定值&#xff1a; 如果 x 是正数&#xff0c;返回 1 。如果 x 是负数&#xff0c;返回 -1 。如果 x 是等于 0 &#xff0c;返回 0 。 给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的…

leetcode 283. 移动零

代码&#xff1a; class Solution {public void swap(int[] nums,int m,int n){int tmpnums[m];nums[m]nums[n];nums[n]tmp;}public void moveZeroes(int[] nums) {int cur0;int dest-1;int nnums.length;for(;cur<n;cur){if(nums[cur]!0){dest;swap(nums,cur,dest);}}} } …

数字系列——数字经济(2)​

上次呢&#xff0c;已经为大家捋了什么是数字经济&#xff1f;、数字经济的特点有哪些&#xff1f;和数字经济的构成&#xff0c;对于数字经济有了基础性的了解&#xff0c;今天继续为大家捋一捋。 数字经济的发展 1.互联网的普及 互联网作为数字经济的坚实基础&#xff0c;其…

香港身份、香港永居身份、香港护照区别,三种证件之间是什么关系?

香港身份、香港永居身份、香港护照区别&#xff0c;三种证件之间是什么关系&#xff1f; 在港“通常性”住满7年之后&#xff0c;可以申请永居身份&#xff01; 香港身份&#xff1a;也可以称之为临时身份&#xff0c;无论通过香港优才计划、高才通计划、专才计划或者留学拿身份…

基于QT的俄罗斯方块游戏设计与实现

基于QT的俄罗斯方块游戏设计与实现 摘要&#xff1a;信息时代正处于高速发展中&#xff0c;而电子游戏已经成为人生活中或不可少的消磨工具之一。科技时代在不断地高速发展中&#xff0c;游戏相关编程设计也随着发展变得越来越重要&#xff0c; 俄罗斯方块游戏是一款古老传遍世…

引领Serverless构建之路,亚马逊云科技re:Invent 2023首日主题演讲重磅发布

在每年的亚马逊云科技re:lnvent大会&#xff0c;由Peter DeSantis带来的《周一晚间直播》是re:lnvent大会的第一个并让人值得期待的主题演讲。作为亚马逊云科技高级副总裁&#xff0c;Peter发布了数据库和应用领域的三项Serverless创新&#xff0c;使客户能够更快、更轻松地扩展…

Java最难的语法<泛型>

时间过得很快&#xff0c;我们马上就进入了&#xff0c;Java最难语法的学习&#xff0c;加油吧&#xff01; 1.包装类 想要学好泛型就要了解包装类。 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个…