SHELL 脚本练习 一

news2024/11/20 9:31:52

习题一在当前主机编写脚本文件history_max.sh显示主机中执行频率最高的前5个命令

习题二 : 判断主机是否存在rhel用户,如果存在则设置密码为redhat,如果不存在则创建用户

                并设置密码

习题三通过设置变量HISTTIMEFORMAT,使得当执行history命令时,输出格式如下:

               [2022-12-25  16:10:05][root]history

习题一 :在当前主机编写脚本文件history_max.sh显示主机中执行频率最高的前5个命令

思路分析   

  #   拿到本题,以做过这道题,又回过头来讲,本题其实在知识量方面考察了好些基础命令

            命令包括 

            ===>>>

history   tr  cut  sort  uniq  head 

            对上示命令进行了灵活运用,包括对其 选项 的运用~!! 

       

          命令选项   

            ===>>>

tr -s " "             表示 删除所有重复出现字符序列,即删除 " " -- 空格 

cut -d " " -f 3-       -d:分隔符,按照指定分隔符分割列。与 -f 一起使用

                       -f:依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思                
                        
                       -f 3- : 表示从第三列开始都取 
                            

uniq -c               表示删除连续的重复行并在每列旁边显示该行连续重复出现的次数

sort -t " " -k 1 -nr  表示指定第一列为排序依据并以数值型倒序排序

head -5               表示只显示文件前五行 

     题目解答

        #   创建 history_max.sh  脚本文件 

[root@fsw Day1]# vim history_max.sh

           ===>>>

           

          脚本编写完毕,保存脚本文件 

          保存脚本文件完毕后,运行脚本即可~!!

          但运行脚本时,就会发现问题~!!

        

          :  脚本文件运行需强调注意事项,下示即是~!!!

      注意事项  :

           #      本题还需要强调的一点就是,当整个脚本编写完成后,准备运行时所出现的问题~!

                    ===>>>

                    当你运行该脚本文件时,你发现,运行脚本文件的四种方式,

                    只有 source history_max.sh 和 . history_max.sh 能够正常运行,另外两种种执行

                    脚本方式都不能正常运行,运行后发现 都不显示运行的结果。

           #      出现这样问题的原因是,子进程的关系,就是 执行脚本文件的两种方式,bash 和 脚

                   本文件绝对路径这两种方式都是产生子进程,而问题是,产生子进程后,子进程里并

                   没有 编写的脚本文件里的 history 命令~!!

                   所以,就会发现,脚本文件执行后,就没显示什么内容,搞得跟没执行一样~!!

                   

                   为什么 source history_max.sh 和 . history_max.sh 能够正常运行呢??

                   ===>>>

                   因为 source 和 . 都是在当前环境里执行的,而当前环境就有 history 命令了,也就能

                   执行我们编写的脚本文件了~!!!!!

                   

                    运行的结果是 :

                    source 执行的脚本文件

                    ===>>>

                   

                    .   执行的脚本文件

                    ===>>>

                    

                    

          #       那现在我们想 使得 四种执行脚本文件的方式 都能够正常执行,怎么办??

                   首先,要清楚一个文件 / root / .bash_history 

                   这个文件是干嘛的呢 ?

                   ===>>>

                   我们 默认 命令历史 就是存储在 这个文件里的~!!

                   所以,我们对这个 / root / .bash_history  文件进行处理就行~!!!

                   我们对脚本 history_max.sh  里的内容处理一下 

                   ===>>>

                  

                   注意,此时脚本的内容发生变化了,脚本命令改变了~!!

                   

                   处理后,四个执行脚本方式,都可以完成本题需求

                  ===>>>

                  

                

                

               

习题二 : 判断主机是否存在rhel用户,如果存在则设置密码为redhat,如果不存在则创建用户

                并设置密码

                   

      思路分析  

                #  根据题意分析知,不管 rhel 用户是否存在,都得设置密码

                    也就是说设置密码 这条命令都得执行; 并且这条命令是在后面执行的,最起码是在

                    前面已经有 rhel 用户存在~!!

                    ===>>>                   

echo redhat | passwd --stdin rhel

                  现在就只剩下,判断 rhel 用户是否存在了 ,若不存在还得创建 rhel 用户

                     根据题意。你得确保 rhel 用户存在啊

                     ===>>>

id rhel &>> /dev/null || useradd rhel 

                    上示命令的核心在 | |  (  或运算符  ) 

                     解释

                                要是 id rhel 这个命令 成功执行了,那状态码肯定就是 0 了,那就不执行 | | 后

                                面的语句了, 即 : 用户 rhel 已经存在了,那当然就不用再创建 rhel 用户了

                                要是 id rhel  这个命令 没成功执行,那状态码肯定就是 非零了,那就得执行 | |

                                后面的语句,即 : rhel 用户不存在( 这是由 id rhel 语句执行失败判断的)

                                useradd  rhel  --> 创建 用户 rhel 

    脚本源码 : 

                

                执行结果 :

                ===>>>

               

习题三 :通过设置变量HISTTIMEFORMAT,使得当执行history命令时,输出格式如下:

                [2022-12-25  16:10:05][root]history

  思路分析  :

               # 本题主要就是对基础命令的考察 

%F  : 完整的年月日格式 eg : 2022-10-5
%T  :  完整的时分秒格式 eg : 18:25:13 

whoami : 显示用户名 

       

   源码  :

       #    没有在脚本文件里执行,直接在 命令行 进行了一个 变量的赋值。

        

        执行结果 :

        然后再命令行 执行 history 命令 

         ===>>>

        

        至此,我们本题代码即是如此,有个小问题就是,如何实现永久化??

        ===>>>

        那就是要把脚本里的命令 保存在  /etc/bash_rc   文件里

        ===>>>

       

       #   我们把 HISTTIMEFORMAT 这个变量 也生成了 环境变量,这样就实现了永久化,针对

            whoami  这个命令来讲就是 不管用户名是谁,都可以生成题目中的效果 。

        然后我们再 source 加载一下这个文件

        ===>>>

       

       

        至此,这样 永久化就达到了 

        来看看效果 

#     这是 root 用户下 执行 history 命令

        ===>>>

        

    这是  natash  用户下  执行 history 命令 

        ===>>>

        

    这是  rhel  用户下  执行 history  命令 

        ===>>>

        

        

        上示执行的结果,就是我们实现了 永久化 的结果~!!!

        

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

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

相关文章

【小白课程】openKylin系统音频大体框架介绍

在桌面操作系统中,音频是至关重要的一环,音频的稳定支持直接决定了用户的听感以及使用体验,今天我们就给大家介绍openKylin桌面操作系统背后关于音频的那些故事。 先看一张框架图,这张图大致介绍了openKylin操作系统音频的框架组…

动态配置开发模式在转转的落地实践

文章目录一、问题背景1.1 场景概述1.2 风险问题1.3 效率问题二、问题剖析2.1 以往的应对方式2.2 主要矛盾点与问题本质的探索2.2.1 主要矛盾点2.2.2 问题本质的探索三、方案设计3.1 视图展示的标准化3.2 视图构建的自动化3.3 开发体验的沉浸化3.4 整体架构设计四、落地现状五、…

谷粒商城之高级篇

谷粒商城之高级篇 目录谷粒商城之高级篇前言2 商城业务2.1 商品上架2.1.1 商品Mapping2.1.2 上架细节2.1.3 数据一致性2.1.4 代码实现2.2 商城系统首页2.2.1 渲染首页2.2.2 渲染一级分类数据2.2.3 渲染二级三级分类数据2.2.4 nginx 搭建域名访问环境2.3 检索业务2.3.1 页面环境…

Vue3富文本编辑器wangEditor 5使用总结

wangEditor 是一个开源 Web 富文本编辑器,开箱即用,配置简单 官网链接:https://www.wangeditor.com 使用流程: 1.在项目中安装wangEditor 输入以下命令安装 npm install wangeditor/editor --save npm install wangeditor/edi…

React通用后台管理系统-笔记1

环境 node: 16.17.1 npm: 8.15.0 Ant Design of React官网:https://ant.design/docs/react/introduce-cn 一、创建项目 npm init vite Project name: lege-management Select a framework: react Select a variant: react-ts 打开package.json,参考以下…

三、串(字符串)

一、定义及常见术语 串相等:当两个串的长度相等且对应位置上的字符都相同时,这两个串才是相等的 所有的空串都是相等的 二、两种存储结构 2.1顺序存储结构(更常用) #define MAXLEN 255 typedef struct {char ch[MAXLEN1];//存…

Flink Shuffle 3.0: Vision, Roadmap and Progress

摘要:摘要:本文整理自阿里云高级技术专家宋辛童 (五藏),在 FFA 2022 核心技术专场的分享。本篇内容主要分为五个部分:Flink Shuffle 的演进流批融合云原生自适应Shuffle 3.0Tips:点击「阅读原文」查看原文视频&演讲…

Node.js--》模块化、npm与包的讲解与使用

目录 模块化 Node.js中模块的分类 模块作用域 模块的加载机制 npm与包 npm包管理工具的安装与使用 包管理配置文件 包下载速度 包的分类 发布包 模块化 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对整个系统来说&#xff0…

数据湖---hudi简介

文章目录hudi是什么核心概念TilelineTable TypesQuery Types特性官网 hudi是什么 apache hudi是下一代流式数据湖平台。hudi将数仓和数据库的核心功能带到了数据湖。提供表、事务、高效的upsert、delete,高级索引,流式注入服务,数据集群、压…

圣诞特辑 · Three.js加载圣诞树模型

🎄2022年圣诞节到来啦,很高兴这次我们能一起度过~🎄 文章目录🎉前言🔎预览🎁项目&资源项目源码地址打包运行✒️编码实现🎉前言 2022圣诞节来了,让我们一起使用Three.js实现导入…

渗透测试-ctfshow 爆破(web入门)

大家可以关注一下我的公众号-小白渗透测试,互相学习。 web1 打开环境 先随便输入一个账号密码,使用bp进行抓包分析。 可以看到,账号密码进行了base64加密,使用工具进行解密,可以看到是账号:密码这样一个格式。 然后我…

JavaSE笔记——函数式编程(Lambda表达式)

文章目录前言一、第一个Lambda表达式二、如何辨别Lambda表达式三、引用值,而不是变量四、函数接口五、类型推断总结前言 Java 8 的最大变化是引入了 Lambda 表达式——一种紧凑的、传递行为的方式。 一、第一个Lambda表达式 Swing 是一个与平台无关的 Java 类库&a…

数组与集合有什么不同之处

这个问题其实就是一个非常基础的面试题,一般面试官想了解你基础知识方面的掌握时,基本都会问这个问题,尤其是一些,计算机学子毕业之后,如果还是想要从事计算机技术相关的行业时,那么在面试的时候就需要做好…

Faster RCNN网络源码解读(Ⅰ) --- Fast RCNN、Faster RCNN论文解读

目录 一、Fast R-CNN论文解读 二、Faster R-CNN论文解读 一、Fast R-CNN论文解读 Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用VGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66…

Win10家庭版安装Docker桌面版

文章目录1.主板BIOS中开启虚拟化2.开启Hyper-V(1)使用下列代码生成一个.cmd文件,并以管理员身份运行该文件。(2)看到运行成功即可关闭该文件。(3)勾选Hyper-V设置里的所有选项(4&…

2-2-3-10、并发设计模式

目录终止线程的设计模式Two-phase Termination(两阶段终止)模式——优雅的终止线程使用场景避免共享的设计模式Immutability模式——想破坏也破坏不了如何实现使用 Immutability 模式的注意事项Copy-on-Write模式应用场景Thread-Specific Storage 模式—…

这几个实用的微信功能,你该知道

生活中我们每天都会使用到微信,用了10年才发现,原来微信隐藏这么多神功能,真是太实用了,下面一起来看看吧!朋友圈发长视频 如果你想要在朋友圈里分享长视频,可以借助微信收藏“转发”到朋友圈。 在收藏里添…

一位普通前端开发的一年|2022总结

前言 2022年转眼快要结束,在这一年我学到了很多东西,现在就来总结一下我的2022,复盘一下过去一年的成果。 总结 在2022年2月底从上一家公司跳槽,面试了两家公司两家拿到了两个offer,当时感觉自己很厉害,…

jdk-Atomic源码学习

上文:AQS-Exchanger源码学习源码下载:https://gitee.com/hong99/jdk8Atomic了解atomic是并发框架中的一员,所属位置:java.util.concurrent.atomic 该类主要是用来解决内存可见性、有序、线程安全,当然底层也是通过cas来…

NEUQ week8 动态规划

题目 P1616 疯狂的采药 题目背景 此题为纪念 LiYuxiang 而生。 题目描述 LiYuxiang 是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个…