学习大数据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://xiahunao.cn/news/3269177.html

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

相关文章

React Router-v6.25.1

以下例子是根据vitereactts构建的&#xff0c;使用路由前先安装好这些环境&#xff01;&#xff01;&#xff01;&#xff01; 1、路由的简单使用 首先要创建一个浏览器路由器并配置我们的第一个路由。这将为我们的 Web 应用启用客户端路由。 该main.jsx文件是入口点。打开它…

前端知识--前端访问后端技术Ajax及框架Axios

一、异步数据请求技术----Ajax Ajax是前端访问后端的技术&#xff0c;为异步请求&#xff08;不刷新页面&#xff0c;请求数据&#xff0c;只更新局部数据&#xff09;。 例如&#xff1a;在京东网站中搜索电脑&#xff0c;就会出现一些联想搜索&#xff0c;但此时页面并没有…

Pytorch深度学习实践(5)逻辑回归

逻辑回归 逻辑回归主要是解决分类问题 回归任务&#xff1a;结果是一个连续的实数分类任务&#xff1a;结果是一个离散的值 分类任务不能直接使用回归去预测&#xff0c;比如在手写识别中&#xff08;识别手写 0 − − 9 0 -- 9 0−−9&#xff09;&#xff0c;因为各个类别…

动态获取配置文件中的配置参数,当配置文件中的参数修改之后,不需要重启项目

这里写目录标题 一、本地开发环境二、nocas环境配置 一、本地开发环境 如果是在本地开发环境中&#xff0c;读取的配置文件是本地根目录下的application.properties文件&#xff1a; 路径为配置文件的绝对路径。 配置文件里面配置的参数需要和获取的参数名称相互对应 通过Au…

linux怎么创建python

第一步&#xff0c;创建一个test文件夹。 第二步&#xff0c;打开终端进入该文件。 第三步&#xff0c;vim test.py。 第四步&#xff0c;编写代码。 第五步&#xff0c;编辑好之后&#xff0c;按Esc键切换到命令模式&#xff0c;然后输入:wq&#xff0c;再按回车键即可自动保存…

Java突击复习小练习,附带讲解

练习&#xff1a; 1.下面的代码在主方法中可以正常执行吗&#xff0c;如果不能&#xff0c;为什么&#xff1f; 2.已知i的值为10&#xff0c;请问在情况一和情况二中j的值是否相同呢&#xff1f;如果不相同&#xff0c;它们的值分别是多少呢?为什么&#xff1f; 3.在主方法运…

3D打印:重塑模具制造业的创新引擎

在科技浪潮的推动下&#xff0c;3D打印技术正以前所未有的速度渗透到制造业的核心&#xff0c;尤其在模具制造领域&#xff0c;它正引领一场深刻的创新革命。该技术通过颠覆传统制造范式&#xff0c;显著优化了模具生产的复杂流程&#xff0c;实现了从设计到成品的一体化的高效…

系统架构设计师教程 第4章 信息安全技术基础知识-4.3 信息安全系统的组成框架4.4 信息加解密技术-解读

系统架构设计师教程 第4章 信息安全技术基础知识-4.3 信息安全系统的组成框架 4.3 信息安全系统的组成框架4.3.1 技术体系4.3.1.1 基础安全设备4.3.1.2 计算机网络安全4.3.1.3 操作系统安全4.3.1.4 数据库安全4.3.1.5 终端安全设备4.3.2 组织机构体系4.3.3 管理体系4.4 信息加…

【PostgreSQL 16】专栏日常

本专栏从 3 个月前开始着手准备&#xff0c;利用周末及节假日的时间来整理。 ldczzDESKTOP-HVJOUVN MINGW64 ~/mypostgres (dev) $ git lg |tee * 7a7f468 - (HEAD -> dev, origin/main, origin/dev, main) 完成服务端编程的初步整理 (6 minutes ago) <Laven Liu> * …

masscan 端口扫描——(Golang 简单使用总结)

1. 前言 最近要做一个扫描 ip 端口的功能 扫描的工具有很多&#xff0c;但是如何做到短时间扫描大量的 ip 是个相对困难的事情。 市场上比较出名的工具有 masscan和nmap masscan 支持异步扫描&#xff0c;对多线程的利用很好&#xff0c;同时仅仅支持 syn 半开扫描&#xff…

GraphHopper-map-navi_路径规划、导航(web前端页面版)

文章目录 一、项目地址二、踩坑环境三、问题记录3.1、graphhopper中地图问题3.1.1. getOpacity不存在的问题3.1.2. dispatchEvent不存在的问题3.1.3. vectorLayer.set(background-maplibre-layer, true)不存在set方法3.1.4. maplibre-gl.js.map不存在的问题3.1.5. Uncaught Ref…

聊聊基于Alink库的特征工程方法

独热编码 OneHotEncoder 是用于将类别型特征转换为独热编码的类。独热编码是一种常用的特征编码方式&#xff0c;特别适用于处理类别型特征&#xff0c;将其转换为数值型特征。 对于每个类别型特征&#xff0c;OneHotEncoder 将其编码成一个长度为类别数量的向量。 每个类别对…

在线教育数仓项目(数据采集部分1)

文章目录 数据仓库概念项目需求及架构设计项目需求分析系统数据流程设计框架版本选型集群规模估算集群资源规划设计 数据生成模块目标数据页面事件曝光启动播放错误 数据埋点主流埋点方式&#xff08;了解&#xff09;埋点数据上报时机埋点数据日志结构 服务器和JDK准备服务器准…

JMeter接口测试:测试中奖概率!

介绍 Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具&#xff0c;用于对软件做压力测试。JMeter 最初被设计用于 Web 应用测试&#xff0c;但后来扩展到了其他测试领域&#xff0c;可用于测试静态和动态资源&#xff0c;如静态文件、Java 小服务程序、CGI 脚本、J…

【机器学习】解开反向传播算法的奥秘

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 解开反向传播算法的奥秘反向传播算法的概述反向传播算法的数学推导1. 前向传播2…

【计算机网络】WireShark和简单http抓包实验

一&#xff1a;实验目的 1&#xff1a;熟悉WireShark的安装流程和界面操作流程。 2&#xff1a;学会简单http的抓取和过滤&#xff0c;并分析导出结果。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a; Windows 2019操作系统的计算机等。 软件&#xff1a;WireShark、…

草图也能秒变完整画稿?三星 Galaxy Z Fold6 、Flip6硬件升级

在科技的不断进步中&#xff0c;智能手机行业的竞争愈发激烈&#xff0c;各大厂商纷纷推出创新产品以吸引消费者。 最近&#xff0c;三星在 Galaxy Unpacked 发布会上就带来了 Galaxy Z Fold6 和 Flip6 两款手机新品&#xff0c;这两款设备不仅在硬件上有所突破&#xff0c;更…

docker dotnet-dump离线部署

1.下载指定dotnet版本的dotnet-dump 示例地址&#xff1a; https://www.nuget.org/packages/dotnet-dump/3.1.141901#dependencies-body-tab 我本地测试的是netcore 3.1 2. 在本地解压 将文件解压出来。看到any目录,能看到我们要用的dotnet-dump文件 3. 将tools/netcoreapp2.…

C++文件系统操作6 - 跨平台实现查找指定文件夹下的特定文件

1. 关键词 C 文件系统操作 查找指定文件夹下的特定文件 跨平台 2. fileutil.h #pragma once#include <string> #include <cstdio> #include <cstdint> #include "filetype.h" #include "filepath.h"namespace cutl {/*** brief The fi…

【吊打面试官系列-Dubbo面试题】服务调用是阻塞的吗?

大家好&#xff0c;我是锋哥。今天分享关于 【服务调用是阻塞的吗&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 服务调用是阻塞的吗&#xff1f; 默认是阻塞的&#xff0c;可以异步调用&#xff0c;没有返回值的可以这么做。 Dubbo 是基于 NIO 的非阻塞实现…