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

news2024/11/26 23:21:31
  • (꒪ꇴ꒪ ),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.coloradmin.cn/o/1267242.html

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

相关文章

JS 倒计时方法(可改造)

起因&#xff1a; 写好备用。 代码&#xff1a; // 直接把方法写在了原型上&#xff0c;通过原型调用 /*** 倒计时* time_str String 到期时间(2023-11-28 16:50:00)* dom_obj Object 需要显示的倒计时的dom对象*/ Date.prototype.countdown function (time_str, dom_obj…

2021年2月24日 Go生态洞察:Contexts和Structs的深度解析

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

数字图像处理(实践篇)十三 数据增强之给图像添加噪声!

目录 一 涉及的函数 二 实践 一 涉及的函数 skimage.util.random_noise( ) skimage.util.random_noise(image, modegaussian, seedNone, clipTrue, **kwargs) 函数的功能&#xff1a;为浮点型图片添加各种随机噪声。 输入&#xff1a; ①image&#xff1a;输入图像&…

数据结构第五课 -----二叉树的代码实现

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

代码混淆的原理和方法详解

代码混淆的原理和方法详解摘要移动App的广泛使用带来了安全隐患&#xff0c;为了保护个人信息和数据安全&#xff0c;开发人员通常会采用代码混淆技术。本文将详细介绍代码混淆的原理和方法&#xff0c;并探讨其在移动应用开发中的重要性。 引言随着移动应用的普及&#xff0c;…

卷轴模式:金融领域的新趋势

卷轴模式在金融领域逐渐崭露头角&#xff0c;成为一种新型的投资策略。这种模式基于完成任务或达成特定目标来获取积分&#xff0c;利用这些积分进行投资或获取现实物品。它不同于传统的资金盘&#xff0c;而是以一种更稳健的方式运作&#xff0c;避免了资金盘的风险。 一、卷轴…

用BootLoader更新S32K144的固件

1、工具&#xff1a;MDK及S32K144的支持包 创芯科技的USB转CAN 及 驱动 Jlink烧写器及驱动 链接&#xff1a;https://pan.baidu.com/s/1jGRdGVEzrO86CpP5UQ2fYQ 提取码&#xff1a;nihd IAP固件升级上位机 2、BootLoader底层文件 a、用MDK打开BootLoader工程 b、更改配置…

《golang设计模式》第三部分·行为型模式-09-策略模式(Strategy)

文章目录 1. 概述1.1 作用1.1 角色1.2 类图 2. 代码示例2.1 设计2.2 代码2.3 类图 1. 概述 1.1 作用 策略&#xff08;Strategy&#xff09;是用于封装一组算法中单个算法的对象&#xff0c;这些策略可以相互替换&#xff0c;使得单个算法的变化不影响使用它的客户端。 1.1 …

C# API 文档自动生成器

文章目录 前言SandcastleDocFX 前言 最近要和别人交际&#xff0c;就要给API文档&#xff0c;但是感觉API文件手动写有点麻烦&#xff0c;想着怎么弄一个自动API文档生成 Sandcastle 折腾了两小时&#xff0c;好像不太好用 微软开源全新的文档生成工具DocFX DocFX 既然不好…

私域流量灵魂三问

私域流量灵魂三问: 1、是什么&#xff1f; 2、为什么做&#xff1f; 3、怎么做&#xff1f;

嵌入式LCD软件驱动流程与调试

前言 LCD屏在嵌入式中是应用比较广泛的&#xff0c;很多电子产品都是需要用到它来进行人机交互&#xff0c;那么工作中我们就少不了要对lcd进行软件驱动和调试。调试LCD需要掌握的学问有很多&#xff0c;没有一定的调试经验就很难对问题进行分析并解决。 博文推荐 LCD屏接口与…

网络协议系列:TCP三次握手,四次挥手的全过程,为什么需要三次握手,四次挥手

TCP三次握手&#xff0c;四次挥手的全过程&#xff0c;为什么需要三次握手&#xff0c;四次挥手 一. TCP三次握手&#xff0c;四次挥手的全过程&#xff0c;为什么需要三次握手&#xff0c;四次挥手前言TCP协议的介绍三次握手三次握手流程&#xff1a;1. A 的 TCP 向 B 发送 连…

LVS-NAT实验

实验前准备&#xff1a; LVS负载调度器&#xff1a;ens33&#xff1a;192.168.20.11 ens34&#xff1a;192.168.188.3 Web1节点服务器1&#xff1a;192.168.20.12 Web2节点服务器2&#xff1a;192.168.20.13 NFS服务器&#xff1a;192.168.20.14 客户端&#xff08;win11…

速速报名!请查收 2023 龙蜥操作系统大会超全指南

亲爱的小伙伴们&#xff0c;大家好&#xff01;我是大家的老朋友小龙&#xff01;自 2023 龙蜥操作系统大会宣布启动以来&#xff0c;小龙收到了来自四面八方的诸多期待和小心心。首届龙蜥大会正如火如荼地进行中&#xff0c;为表示对关注社区的每一位小伙伴由衷的感谢&#xf…

排序算法基本原理及实现1

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 &#x1f4d1;插入排序 &#x1f4…

人工智能即将彻底改变你使用计算机的方式

文章目录 每个人的私人助理“Clippy 是一个机器人&#xff0c;而不是特工。”卫生保健“一半需要心理健康护理的美国退伍军人没有得到治疗。”教育生产率娱乐和购物科技行业的冲击波技术挑战隐私和其他重大问题 今天我仍然像保罗艾伦和我创办微软时一样热爱软件。但是&#xff…

Linux系统之一次性计划任务at命令的基本使用

Linux系统之一次性计划任务at命令的基本使用 一、at命令介绍二、at命令的使用帮助2.1 at命令的help帮助信息2.2 at命令的语法解释 三、at命令的日常使用3.1 立即执行一次性任务3.2 指定时间执行一次性任务3.3 查询计划任务3.4 其他指定时间用法3.5 删除已经设置的计划任务3.6 显…

C语言——计算Fibonacci数列

方式一 for循环 (20位) #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int n;int a[20]{1,1};for ( n 1; n <20; n){a[n]a[n-2]a[n-1];}for ( n 0; n < 20; n){if(n%50)printf("\n");printf("%12d ",a[n]);}return 0; …

【每日一题】无限集中的最小数字

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;有限集合方法二&#xff1a;有序集合 写在最后 Tag 【有序集合】【2023-11-29】 题目来源 2336. 无限集中的最小数字 题目解读 设计一个类实现移除无限集中的最小整数以及向该无限集中增加一个原集合中不存在的整数。…

【JavaEE初阶】 HTTP响应报文

文章目录 &#x1f332;序言&#x1f38d;200 OK&#x1f340;404 Not Found&#x1f384;403 Forbidden&#x1f334;405 Method Not Allowed&#x1f38b;500 Internal Server Error&#x1f333;504 Gateway Timeout&#x1f332;302 Move temporarily&#x1f38d;301 Move…