学习大数据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是真的阴间。
愉快的双休又来喽!

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

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

相关文章

MyBatis-Plus自动生成代码

目录 前言一. 什么是 MyBatis-Plus1. Mybatis-Plus 的特点2. Mybatis-Plus 结构二. MyBatis-Plus 自动生成步骤1. 数据库准备2. 环境准备(1) 创建一个空的 Spring Boot 工程(2) 导入pom依赖(3) 编辑application.yml文件(4) 在启动类加入 @MapperScan 注解3. 配置代码4. 运行三.…

江科大/江协科技 STM32学习笔记P15

文章目录 TIM输出比较1、输出比较简介2、PWM简介3、输出比较通道&#xff08;高级&#xff09;4、输出比较通道&#xff08;通用&#xff09;5、输出比较模式6、PWM基本结构参数计算 7、舵机简介8、直流电机及驱动简介驱动芯片 TIM输出比较 1、输出比较简介 CNT计数器&#x…

VUE3——003、VUE 项目中的文件结构(index.html、main.ts、App.vue)

虽然是号称是小白初学&#xff0c;但本文只是对 VUE 小白&#xff0c;其它的基功还是有一丢丢的&#xff0c;不太懂的同学去看看一下详解&#xff0c;我这里记述的是自己的理解和观点。见谅&#xff01; index.html&#xff1a;入口文件&#xff08;以创建 vue3 项目的默认文件…

ElasticSearch(es)倒排索引

目录 一、ElasticSearch 二、倒排索引 1. 正向索引 2. 倒排索引 具体细节 1. 文档分析 2. 索引构建 3. 索引存储 4. 词条编码 5. 索引优化 6. 查询处理 示例 总结 3. 正向和倒排 三、总结 倒排索引的基本概念 为什么倒排索引快 一、ElasticSearch Elasticsear…

Vue 3 中使用 InMap 绘制热力图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Vue 3 中使用 InMap 绘制热力图 应用场景介绍 InMap 是一款强大的地图组件库&#xff0c;它提供了一系列丰富的可视化功能&#xff0c;包括热力图。热力图可以将数据点在地图上以颜色编码的方式可视化&#x…

论文阅读_字节的语音生成模型_Seed-TTS

英文名称: Seed-TTS: A Family of High-Quality Versatile Speech Generation Models 中文名称: Seed-TTS&#xff1a;高质量多功能语音生成模型系列 链接: http://arxiv.org/abs/2406.02430v1 代码: https://github.com/BytedanceSpeech/seed-tts-eval (评测工具) 演示网站&am…

找出所有点到一个点的距离的最小值

这个题的看一眼有点像树形dp&#xff0c;但是要怎么去优化我们转移方程呢 这是为什么呢&#xff0c;我们的树形dp很难考虑来之前的答案&#xff0c;那么d[y] 怎么办&#xff0c;我们可以先以1为根计算出以1为根的答案 #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.…

js 计算小数精度问题 ,引入decimal.js库 解决

安装 npm install --save decimal.js 引入 import Decimal from "decimal.js" 使用 new Decimal function adddDecimals (...decimals) { let sum new Decimal(0) decimals.forEach(decimal > { sum sum.plus(decimal) }) return sum.toNumber() } const res …

【刷题汇总 -- 笨小猴、 主持人调度(一)、分割等和子集】

C日常刷题积累 今日刷题汇总 - day0251、笨小猴1.1、题目1.2、思路1.3、程序实现 2、主持人调度&#xff08;一&#xff09;2.1、题目2.2、思路2.3、程序实现 3、分割等和子集3.1、题目3.2、思路3.3、程序实现 -- 0/1背包问题 4、题目链接 今日刷题汇总 - day025 1、笨小猴 1…

【MIT 6.5840(6.824)学习笔记】Raft

1 脑裂 许多容错系统使用一个单主节点来决定主副本。 MapReduce&#xff1a;由单主节点控制计算复制。GFS&#xff1a;主备复制数据&#xff0c;并由单主节点确定主拷贝的位置。VMware FT&#xff1a;主虚机和备份虚机之间复制指令&#xff0c;需要单点的Test-and-Set服务确认…

【JavaEE】通过Linux部署Web项目到云服务器上

一.配置部署所需的环境. 1.1 什么是部署? 要想知道什么是部署, 就要先了解我们在日常开发的过程中所设计到的几种环境: 开发环境: 软件开发环境指的是开发人员在创建、测试和部署软件应用程序时所需的一系列硬件、软件、工具和流程的集合。它是为了支持软件开发过程而构建的…

[算法]归并排序(C语言实现)

一、归并排序的定义 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法。该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。 二、归并排序的算法原理 归并排序的算法可以用递归法和非递归法来实现…

Git基本原理讲解、常见命令、Git版本回退、Git抛弃本地分支拉取仓库最新分支、如何将本地文件推送至github、.gitignore文件的使用

借此机会写篇博客汇总一下自己去公司实习之后遇到的一些常见关于Git的操作。 Git基本认识 Git把数据看作是对小型文件系统的一组快照&#xff0c;每次提交更新&#xff0c;或在Git中保存项目状态时&#xff0c;Git主要对当时的全部文件制作一个快照并保存这个快照的索引。同时…

【ROS 最简单教程 002/300】ROS 环境安装 (虚拟机版): Noetic

&#x1f497; 有遇到安装问题可以留言呀 ~ 当时踩了挺多坑&#xff0c;能帮忙解决的我会尽力 &#xff01; 1. 安装操作系统环境 Linux ❄️ VM / VirtualBox Ubuntu20.04 &#x1f449; 保姆级图文安装教程指路&#xff0c;有经验的话 可以用如下资源自行安装 ITEMREFERENCE…

vue3实战(通用后台管理系统)问题总结

npm install less vue-router element-plus -s elementplus 路由引入组件第二种写法&#xff1a; 使用动态的import( )语法(推荐使用)&#xff08;路由懒加载&#xff09; component:()>import(路径)component:()>import(/views/Main.vue)打包之后的文件将会异常的大&a…

《昇思25天学习打卡营第25天|第28天》

今天是打卡的第二十八天&#xff0c;实践应用篇中的计算机视觉中Vision Transformer图像分类。 从Vision Transformer&#xff08;ViT&#xff09;简介开始了解&#xff0c;模型结构&#xff0c;模型特点&#xff0c;实验的环境准备和数据读取&#xff0c;模型解析&#xff08…

深入探索PHP框架:Symfony框架全面解析

1. 引言 在现代Web开发领域&#xff0c;PHP作为一种广泛使用的服务器端脚本语言&#xff0c;其框架的选择对于项目的成功至关重要。PHP框架不仅能够提高开发效率&#xff0c;还能确保代码的质量和可维护性。本文将深入探讨Symfony框架&#xff0c;这是一个功能强大且灵活的PHP…

Teamcenter RAC开发,创建Item的两种方式

1、如果描述不必填&#xff0c;采用胖客户端的创建方式 newItem itemType.create(newItemId, "", targetTypeComp.getTypeName(), item_name, // "test1", null, null2、如果描述必填&#xff0c;则需要采用SOA的创…

C++11中的右值引用以及移动构造等

目录 一、右值引用 1.左值引用和右值引用 2.左值引用与右值引用比较 3.右值引用使用场景和意义 1️⃣ 传返回值 2️⃣ STL中的应用 4.完美转发 模板中的&& 万能引用&#xff08;引用折叠&#xff09; 二、 新的类功能 1.默认成员函数 2.类成员变量初始化 3.…

线程池学习(一)

1.线程池有什么作用 降低资源消耗&#xff1a;通过池化技术重复利⽤已创建的线程&#xff0c;降低线程创建和销毁造成的损耗。 提⾼响应速度&#xff1a;任务到达时&#xff0c;⽆需等待线程创建即可⽴即执⾏。 提⾼线程的可管理性&#xff1a;线程是稀缺资源&#xff0c;如果…