SHELL 脚本练习 一

习题一在当前主机编写脚本文件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  命令 

        ===>>>

        

        

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

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值