当前位置: 首页 > news >正文

学习大数据DAY25 Shell脚本的书写2与Shell工具的使用

目录

自定义函数

递归-自己调用自己

上机练习 12

Shell 工具

sort

sed

awk

上机练习 13


自定义函数

name(){
action;
}
function name
{
Action;
}
name
因为 shell 脚本是从上到下逐行运行,不会像其它语言一样先编译,所以函数必
须在调用
之前,先声明。
函数返回值,return 后只能跟数值 n(0-255)
接收返回值方法:在函数内部使用 echo 命令将结果输出,在函数外部使用$()
或者``捕获
结果。
# 无输入无返回
hello (){
echo "test"
}
hello
# 写一个自定义函数,计算两个输入参数的和
he (){
s=0
s=$(( $1 + $2 ))
echo " $s "
}
he 3 65
jieguo=`he 3 65`
echo " 和是: $jieguo "
可以输入参数
read -p " 请输入第一个数: " n1
read -p " 请输入第二个数: " n2
jieguo=`he $n1 $n2`
echo " 和是: $jieguo"
# 也可以使用 shell 位置参数传递到函数 可以互相调用
he(){
date
hello
s=0
s=$(($1 + $2))
echo "$s"
}

递归-自己调用自己

# 输入一个目录显示里面的所有目录
fun(){
for i in `ls $1`
do
if [ -d $1/$i ]
then
echo $i
fi
done
}
fun /root
# 输入一个目录显示里面的所有目录及其子目录
echo $i
fun $1/$i

上机练习 12

# 1. 编写函数 , 函数传入三个参数 , 输出积
# product()
# {
#
p=$(($1*$2*$3))
#
echo $p
# }
# product 2 4 5
# 2. 编写函数,传递一个数字参数 5 ,实现 1 5 的累加,返回和,输出 " 和是:
15"
# sum()
# {
#
sum=0
#
for i in `seq 1 $1`
#
do
#
sum=$(($sum+$i))
#
done
#
echo " 和是 $sum" # }
# sum 5
# sum 6
# sum 10
# 3. 编写函数 , 当该函数没有参数或参数多于 2 , 输出 -1, 只有一个参数时 , 输出
1, 有两个参数
# , 输出 2
# 提示:使用 $# 判断参数的个数
# nnumber()
# {
#
if [ $# -gt 2 -o $# -eq 0 ]
#
then
#
echo -1
#
else
#
echo $#
#
fi
# }
# nnumber
# nnumber 1
# nnumber 1 2
# nnumber 1 2 3
# 4. 编写函数,实现传入一个目录参数,将该目录下(递归)所有的文件都打印
出来(遇
# 到文件则打印,遇到目录则继续调函数递归)
# PrintFile()
# {
#
if [ -d $1 ]
#
then
#
for i in `ls $1`
#
do
#
if [ -f $i ]
#
then
#
echo "$1/$i"
#
else
#
PrintFile $i
#
fi
#
done
#
else
#
echo $1
#
fi
# }
# PrintFile /root
# PrintFile age.txt
# 5. 编写函数,传入一个数字 n ,实现 n 的阶乘 , 效果如下: # factorial()
# {
#
echo " 请输入数字 :$1"
#
echo -n " 根据数字 ${1} 得到的阶乘表达式是: $1!="
#
f=1
#
for i in `seq $1 -1 1`
#
do
#
echo -n $i
#
if [ $i -eq 1 ]
#
then
#
echo -n "="
#
else
#
echo -n "*"
#
fi
#
f=$(($f*$i))
#
done
#
echo $f
# }
# factorial 4
# factorial 5
# factorial 6

Shell 工具

sort

sort 命令是在 Linux 里非常有用,它将文件进行排序,并将排序结果标准输出。
参数:指定待排序的文件列表
shell 下面建立如下文件 sort.txt bb:40:5.4
bd:20:4.2
xz:50:2.3
cls:10:3.5
ss:30:1.6
按照“:”分割后的第三列倒序排序。
sort -t ":" -nrk 3 /root/shell/sort.txt
bb:40:5.4
bd:20:4.2
cls:10:3.5
xz:50:2.3
ss:30:1.6
grep sed awk 被称为 linux 中的 " 三剑客 "
我们总结一下这三个 " 剑客 " 的特长。
grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理

sed

sed: stream editor (流编辑器)的简称。
它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中( 模式空
),
接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
接着处理
下一行,这样不断重复,直到文件末尾。
p 打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
i 插入, i 的后面可以接字串,而这些字串会在新的一行出现 ( 目前的上一行 )
a 新增, a 的后面可以接字串,而这些字串会在新的一行出现 ( 目前的下一行 )
s 取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!
1. 显示文件的第 2 行的内容:
sed -n '2 p' /root/shell/sort.txt
2. 显示文件的第 2 行到第 4 行的内容:
sed -n '2,4 p' /root/shell/sort.txt
3. 将文件中的 bb 全部替换为 BB
sed 's/bb/BB/g' /root/shell/sort.txt
4. 以文件 bb 开头的上一行添加
sed '/^bb/i hello' /root/shell/sort.txt
5. 将文件中的 d 全部删除
sed 's/d//g' /root/shell/sort.txt
注:可以使用管道符连续处理 , 接着重定向保存,使用 \ 拼接换行

awk

一个完整的 awk 命令形式如下:
awk [options] 'BEGIN{ commands } { commands } END{ commands }' file
-v 指定 FS OFS 字段分隔符和输出字段分隔符
内置参数:
NF 分割完字段的数量
$1 代表文本行中的第 1 个数据字段;
$2 代表文本行中的第 2 个数据字段;
输出指定列: {print $1,$2}
分隔符相同的情况输出一整行: {print}
1. : 为分隔符,打印第 2 列和第 1
awk -v FS=":" '{print $2,$1}' /root/shell/sort.txt
2. : 为分隔符,打印第 2 列和第 1 列,列之间用 , 分割
awk -v FS=":" -v OFS="," '{print $2,$1}' /root/shell/sort.txt
3. 添加列保存为 csv ,下载,使用 excel 查看
awk -v FS=":" -v OFS="," 'BEGIN{print "one,two,three"}{print $2,$1,$3}'
/root/shell/sort.txt > /root/shell/sort.csv
4. 第二列大于 30
awk -v FS=":" '{ if($2>30){print $2}}' /root/shell/sort.txt
5. 行列总数量
awk -v FS=":" 'BEGIN{n=0}{for(i=1;i<=NF;i++){n++} }END{print n}'
/root/shell/sort.txt
注:可以使用管道符连续处理 , 接着重定向保存,使用 \ 拼接换行

上机练习 13

# 创建 shell 脚本来完成
# 1.复制网卡文件/etc/sysconfig/network-scripts/ifcfg-ens33 到家目录,
并且改名为
# wangka.txt
# cp /etc/sysconfig/network-scripts/ifcfg-ens33 /home/
# mv /home/ifcfg-ens33 /home/wangka.txt
# 2.找到含有 IP 的行输出
# cat -sb /home/wangka.txt | grep "IP"
# 3.显示文件的第 3 行到第 5 行的内容
# sed -n "3,5 p" /home/wangka.txt
# 4.将文件中的 255 全部替换为 250
# sed 's/255/250/g' /home/wangka.txt
# 5.以文件 IPADDR 开头的上一行添加 hello
# sed '/^IPADDR/i hello' /home/wangka.txt
# 6.找到所有 DNS,并且删掉
# sed 's/DNS//g' /home/wangka.txt
# 7.使用管道符连续处理 4. 5. 6. 题,并且重定向结果保存为 wangka.csv # sed 's/255/250/g' /home/wangka.txt | sed '/^IPADDR/i hello' | sed
's/DNS//g' > /home/wangka.csv
# 8. 根据 wangka.csv 文件自己灵活处理重定向为 ip.txt,内容如下:
# 192.168.145.151
# 250.250.250.0
# 192.168.145.2
# 8.8.8.8
# 114.114.114.114
# sed -n '19,23 p' /home/wangka.csv | awk -v FS="\"" '{print $2}' >
/home/ip.txt
# 9. ip.txt 中以.分割,按照第一列进行降序排序
# sort -t "." -nrk 1 /home/ip.txt
# 10. ip.txt 中以.为分隔符,打印第 1 列和第 2 列
# awk -v FS="." '{print $1,$2}' /home/ip.txt
# 11. ip.txt 中以.为分隔符,打印第 3 列和第 4 列,列之间用,分割
# awk -v FS="." -v OFS="," '{print $3,$4}' /home/ip.txt
# 12. ip.txt 中以.为分隔符,列之间用,分割,且加一行,保存为 ip.csv,格式
如下:
# one,two,three,four
# 192,168,145,151
# 250,250,250,0
# 192,168,145,2
# 8,8,8,8
# 114,114,114,114
# awk -v FS="." -v OFS="," 'BEGIN{print "one,two,three,four"}{print}'
/home/ip.txt > /home/ip.csv
# 13. 在家目录下创建一个 names.txt 的文件,写入班级的所有同学的姓名,每
个一行,每
# 次随机产生一个姓名
# 终端执行
# touch /home/names.txt
# vim /home/names.txt
# i 编辑模式
# 输入
# ESC
# :wq!
# shell 执行
# sed -n "$(($RANDOM%12+1)) p" /home/names.txt
# 14. 批量修改家目录下的文件扩展名,使用位置参数传递两种扩展名,例如
txt 文件为 csv
# 文件。(注:碰到特殊符号使用\进行转义)
# UpdateType()
# {
# ls /home > /root/updatefile.txt # sed "s/.$1/.$2/g" /root/updatefile.txt > /root/updatefile1.txt
# count=1
# for i in `ls /home`
# do
#
f=$(sed -n "$count p" /root/updatefile1.txt)
#
echo $f
#
if [ /home/$i != /home/$f ]
#
then
#
mv /home/$i /home/$f
#
fi
#
count=$(($count+1))
# done
# echo "重命名扩展名成功"
# }
# UpdateType csv txt
最后一题想了好久,终于写出来了,shell是真的阴间。
愉快的双休又来喽!

相关文章:

学习大数据DAY25 Shell脚本的书写2与Shell工具的使用

目录 自定义函数 递归-自己调用自己 上机练习 12 Shell 工具 sort sed awk 上机练习 13 自定义函数 name(){ action; } function name { Action; } name 因为 shell 脚本是从上到下逐行运行&#xff0c;不会像其它语言一样先编译&#xff0c;所以函数必 须在调…...

Java学习Day19:基础篇9

包 final 权限修饰符 空着不写是default&#xff01; 代码块 1.静态代码块 1.静态代码块优于空参构造方法 2.静态调用只被加载一次&#xff1b; 静态代码块在Java中是一个重要的特性&#xff0c;它主要用于类的初始化操作&#xff0c;并且随着类的加载而执行&#xff0c;且只…...

如何撤销git add ,git commit 的提交记录

一、撤销git commit ,但是没有push到远程的记录 git reset --hard HEAD~1 销最近的一次提交&#xff0c;并且丢弃所有未提交的更改 二、撤销git add ,但是没有提交到本地仓库的记录 git reset 三、原理 Git 工作流程的简要说明&#xff1a; 工作目录&#xff08;Working …...

Postman环境变量的高级应用:复杂条件逻辑的实现

Postman环境变量的高级应用&#xff1a;复杂条件逻辑的实现 在Postman中&#xff0c;环境变量是管理和定制API请求的强大工具。通过使用环境变量&#xff0c;可以轻松地在不同环境之间切换&#xff0c;如开发、测试和生产环境。然而&#xff0c;环境变量的真正威力在于它们能够…...

AI问答-供应链管理:理解医疗耗材供应链SPD板块

医疗耗材供应链SPD板块是一个专注于医用耗材供应链管理的关键领域&#xff0c;它融合了供应链管理理论、物流信息技术以及环节专业化管理手段&#xff0c;旨在保证院内医用耗材的质量安全、满足临床需求&#xff0c;并提升医院的整体运营效率。以下是对医疗耗材供应链SPD板块的…...

科普文:分布式数据一致性协议Paxos

1 什么是Paxos Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算 法&#xff0c;是目前公认的解决分布式一致性问题最有效的算法之一。 Paxos由 莱斯利兰伯特(Leslie Lamport)于1998年在《The Part-Time Parliament》论文中首次公 开&…...

Vue3 + js-echarts 实现前端大屏可视化

1、前言 此文章作为本人大屏可视化项目的入门学习笔记&#xff0c;以此作为记录&#xff0c;记录一下我的大屏适配解决方案&#xff0c;本项目是基于vite Vue3 js less 实现的&#xff0c;首先看ui&#xff0c;ui是网上随便找的&#xff0c;代码是自己实现的&#xff0c;后面…...

知乎信息流广告怎么投?一文读懂知乎广告开户及投放!

作为中国领先的问答社区&#xff0c;知乎以其高质量的内容和活跃的用户群体成为了众多品牌青睐的营销阵地。为了帮助企业更高效地利用知乎平台进行品牌推广&#xff0c;云衔科技提供了全方位的知乎广告开户及代运营服务&#xff0c;助力您的品牌在知乎上实现快速增长。 一、知…...

TikTok达人合作:AI与大数据如何提升跨境电商营销效果

在当今数字时代&#xff0c;跨境电商与TikTok达人的合作已成为推动品牌增长和市场拓展的重要力量。随着AI、大数据等先进技术的不断发展和应用&#xff0c;这种合作模式正变得更加高效和精准。本文Nox聚星将和大家探讨在TikTok达人合作中&#xff0c;AI、大数据等技术的具体运用…...

win11管理员账户为啥不能改?win11怎么更改管理员账户名称?

文章目录 亲测有效&#xff01;&#xff01;&#xff01;&#xff01;...

Spring Security学习笔记(三)Spring Security+JWT认证授权流程代码实例

前言&#xff1a;本系列博客基于Spring Boot 2.6.x依赖的Spring Security5.6.x版本 上两篇文章介绍了Spring Security的整体架构以及认证和鉴权模块原理。本篇文章就是基于Spring Security和JWT的一个demo 一、JWT简介 JWT&#xff08;JSON Web Token&#xff09;&#xff0c…...

精装房、旧房改造智能家居,单火线也有“救”了单火模块 零线发生器

精装房、旧房改造智能家居&#xff0c;单火线也有“救”了单火模块 零线发生器 史新华 以前写过关于智能家居没有预留零线&#xff0c;导致无法安装零火开关&#xff0c;也没办法装触控屏&#xff0c;主要原因还是无法通过零火线给设备供电。今年最火的一款思万奇零线发生器救…...

使用URLSearchParams获取url地址后面的参数(window.location.href)

function getUrlParams(url) {const urlStr url.split(?)[1];const urlSearchParams new URLSearchParams(urlStr);return Object.fromEntries(urlSearchParams.entries()); }const info getUrlParams(window.location.href); // info是一个对象&#xff0c;包含url携带参数…...

计算机网络03

文章目录 重传机制超时重传快速重传SACK 方法Duplicate SACK 滑动窗口流量控制操作系统缓冲区与滑动窗口的关系窗口关闭糊涂窗口综合症 拥塞控制慢启动拥塞避免算法拥塞发生快速恢复 如何理解是 TCP 面向字节流协议&#xff1f;如何理解字节流&#xff1f;如何解决粘包&#xf…...

linux每个目录都是干啥的???linux目录说明

很全&#xff0c;没事看看&#xff0c;记住 / 虚拟目录的根目录。通常不会在这里存储文件 /bin 二进制目录,存放许多用户级的GNU工具启动目录,存放启动文件 /etc 系统配置目录 /dev 设备目录,Linux在这里创建设备节点系统配置文件目录 /home 主目录,Linux在…...

DB2-Db2StreamingChangeEventSource

提示&#xff1a;Db2StreamingChangeEventSource 类主要用于从 IBM Db2 数据库中读取变更数据捕获 (CDC, Change Data Capture) 信息。CDC 是一种技术&#xff0c;允许系统跟踪数据库表中数据的更改&#xff0c;这些更改可以是插入、更新或删除操作。在大数据和实时数据处理场景…...

在当前的数字化时代,Cobol 语言如何与新兴技术(如云计算、大数据、人工智能)进行融合和交互?

Cobol语言作为一种古老的编程语言&#xff0c;与新兴技术的融合和交互需要一些额外的工作和技术支持。以下是一些将Cobol与新兴技术结合的方法&#xff1a; 云计算&#xff1a;Cobol程序可以迁移到云平台上运行&#xff0c;通过云提供的弹性和可扩展性&#xff0c;为Cobol应用程…...

使用SDL库以及C++实现的简单的贪吃蛇:AI Fitten生成

简单使用AI代码生成器做了一个贪吃蛇游戏 设计的基本逻辑都是正确的&#xff0c;能流畅运行 免费准确率高&#xff0c;非常不错&#xff01;支持Visual Studio系列 Fitten&#xff1a;https://codewebchat.fittenlab.cn/ SDL 入门指南&#xff1a;安装配置https://blog.csdn.n…...

【C++标准库】模拟实现string类

模拟实现string类 一.命名空间与类成员变量二.构造函数1.无参&#xff08;默认&#xff09;构造2.有参构造3.兼容无参和有参构造4.拷贝构造1.传统写法2.现代写法 三.析构函数四.string类对象的容量操作1.size2.capacity3.clear4.empty5.reserve6.resize 五.string类对象的访问及…...

ArcGIS for js 标记(vue代码)

一、引入依赖 import Graphic from "arcgis/core/Graphic"; import GraphicsLayer from "arcgis/core/layers/GraphicsLayer"; import Color from "arcgis/core/Color"; import TextSymbol from "arcgis/core/symbols/TextSymbol.js"…...

全网最全最新100道C++面试题:40-60

前述&#xff1a;本文初衷是为了总结本人在各大平台看到的C面经&#xff0c;我会在本文持续更新我所遇到的一些C面试问题&#xff0c;如有错误请一定指正我。新建立了一个收集问答的仓库&#xff0c;欢迎各位小伙伴来更新鸭interview_experience: 本仓库初衷是想为大家提供一个…...

RAG+内容推荐,应该如何实践?

最近业务有需求&#xff1a;结合RAG内容推荐&#xff0c;针对实践部分&#xff0c;做一点探究。 话不多说&#xff0c;直接开冲&#xff01; 背景 首先回顾一下 RAG 技术定义&#xff0c;它可以结合信息检索和生成模型的混合。简单来说&#xff0c;RAG 预训练的语言模型 信…...

SFTTrainer loss多少合适

在机器学习和深度学习中&#xff0c;“loss”&#xff08;损失函数&#xff09;的合理值并没有一个固定的标准&#xff0c;因为它依赖于多种因素&#xff0c;包括模型的类型、任务的性质、数据的规模和特性等。然而&#xff0c;我们可以从一些通用的原则和经验值来讨论损失函数…...

HTTP协议详解(一)

协议 为了使数据在网络上从源头到达目的&#xff0c;网络通信的参与方必须遵循相同的规则&#xff0c;这套规则称为协议&#xff0c;它最终体现为在网络上传输的数据包的格式。 一、HTTP 协议介绍 HTTP&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff1a; 全…...

RK3568平台(触摸篇)串口触摸屏

一.什么是串口屏 串口屏&#xff0c;可组态方式二次开发的智能串口控制显示屏&#xff0c;是指带有串口通信的TFT彩色液晶屏显示控制模组。利用显示屏显示相关数据&#xff0c;通过触摸屏、按键、鼠标等输入单元写入参数或者输入操作指令&#xff0c;进而实现用户与机器进行信…...

MySQL数据库-事务

一、什么是事务 1.概念 事务&#xff08;Transaction&#xff09;&#xff1a;一个最小的不可再分的工作单元&#xff0c;一个事务对应一个完整的业务&#xff0c;一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成&#xff0c;事务只针对DML语句。 数据…...

qt事件类型列表

t提供了一系列丰富的事件类型&#xff0c;这些事件允许应用程序响应各种用户输入、系统通知以及其他类型的交互。以下是一些常见的Qt事件类型及其用途概述&#xff1a; QEvent::None (0): 无事件&#xff0c;用于初始化或作为默认值。 QEvent::Timer (1): 定时器事件&#xff…...

ElasticSearch父子索引实战

关于父子索引 ES底层是Lucene,由于Lucene实际上是不支持嵌套类型的,所有文档都是以扁平的结构存储在Lucene中,ES对父子文档的支持,实际上也是采取了一种投机取巧的方式实现的. 父子文档均以独立的文档存入,然后添加关联关系,且父子文档必须在同一分片,由于父子类型文档并没有…...

二百四十九、Linux——在Linux中创建新用户、赋予新用户root权限并对文件夹赋予新用户的权限

一、目的 安装国产化数据库OceanBase的时候&#xff0c;需要创建新用户、赋予新用户root权限并对文件夹赋予新用户的权限 二、创建新用户 #创建账户 oceanadmin [roothurys22 ~]#useradd -U oceanadmin -d /home/oceanadmin -s /bin/bash [roothurys22 ~]#mkdir -p /home/oc…...

com.mysql.cj.jdbc.Driver 爆红

出现这样的问题就是pom.xml文件中没有添加数据库依赖坐标 添加上这个依赖即可&#xff0c;添加完后重新加载一下Maven即可。 如果感觉对你有用就点个赞&#xff01;&#xff01;&#xff01;...