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

shell脚本练习题

shell脚本练习题

1.编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,cpu型号,内存大小,硬盘大小。

            #!/bin/bash
            # 显示电脑硬件信息
            echo "主机名:      $(hostname)"
            echo "IPv4地址:    $(ifconfig | head -n2 |tail -n1 |tr -s " " ":"| cut -d":" -f3)"
            echo "操作系统版本:$(cat /etc/redhat-release)"
            echo "内核版本:    $(uname -r)"
            echo "CPU型号:     $(cat /proc/cpuinfo|grep "model name"|uniq -c|cut -d":" -f2)"
            echo "内存大小:    $(free -m | head -n2 |tail -n1|tr -s " " ":"|cut -d":" -f2)"
            echo "硬盘大小:    $(fdisk -l | grep "GB"|cut -d":" -f2|cut -d"," -f1)"

2.编写脚本/root/bin/backup.sh,可实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中

    #!/bin/bash
    cp -r /etc/ /root/etc"$(date  +%F)"

3.编写脚本/root/bin/disk.h,显示当前硬盘分区中空间利用率最大的值

        #!/bin/bash
        max=$(df |tr -s " " ":"|cut -d ":" -f5|egrep -o "[[:digit:]]*"|sort -nr|head -n1)
        echo "当前硬盘分区中空间利用率最大的值为: $max"

4.编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序

        #!/bin/bash
        links=$(netstat -tan| grep "^[t]\|[u]"|tr -s " " ":"|cut -d":" -f6|uniq -c|sort -nr|egrep "\<(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"|tail -n1)
        echo "连接数和IP地址分别为:$links"
        exit 0

5.编写脚本/root/bin/sumid.sh,计算etc/passwd文件中的第十个用户个第二十个用户的ID之和

    #!/bin/bash
    usera=$(cat -n /etc/passwd | head |tail -n1|cut -d":" -f3)
    echo "id为10的uid:$usera"
    userb=$(cat -n /etc/passwd | head -n20|tail -n1|cut -d":" -f3)
    echo "id为20的uid:$userb"
    # userall=$usera+$userb
    let usera=$usera+$userb
    echo "id和为: $usera"
    exit 0

6.编写脚本/root/bin/sumspace.sh,传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和。

    #!/bin/bash
    a=$(cat $1|grep "^[[:space:]]*$"|wc -l)
    b=$(cat $2|grep "^[[:space:]]*$"|wc -l)
    #let a=$a+$b
    let c=$a+$b
    echo "$1,$2两个文件的空白行之和为$c"
    exit 0

7.编写脚本/root/bin/sumfile.sh,统计/etc,./var,/usr目录中共有多少个一级子目录和文件

    #!/bin/bash
    ef=$(ls /etc/* | grep  ".*[:]$"|wc -l)
    ed=$(ls /etc/* | grep -v ".*[:]$"| grep -v "^[[:space:]]*$"|wc -l)
    vf=$(ls /var/* | grep  ".*[:]$"|wc -l)
    vd=$(ls /var/* | grep -v ".*[:]$"| grep -v "^[[:space:]]*$"|wc -l)
    uf=$(ls /usr/* | grep  ".*[:]$"|wc -l)
    ud=$(ls /usr/* | grep -v ".*[:]$"| grep -v "^[[:space:]]*$"|wc -l)
    echo "/etc目录中一共有$ef个一级子目录,$ed个文件"
    echo "/var目录中一共有$vf个一级子目录,$vd个文件"
    echo "/usr目录中一共有$uf个一级子目录,$ud个文件"

8.写一个生成脚本的脚本,/root/bin/createsh.sh当执行如/root/bin/createsh.sh test .sh时,会自动在/root/bin下新建一个名为test.sh的新文件,该文件会自动给上执行权限,同时自动在文件头上加上#!及注释信息。注释信息如下:

        #!/bin/bash
        # ------------------------------------------
        # Filename:    test.sh(此处会根据文件名自动更换)
        # Revision:    1.0
        # Date:        2017-01-22(此处会自动变换为当前日期)
        # Author:      Nanyibo
        # Email:       nanyibo@gmail.com
        # ------------------------------------------
        # Copyright:   2017 nanyibo
        # License:     GPL

之后,自动使用vim打开,等待用户开始编写脚本正文

            #!/bin/bash
            touch  /root/bin/$1
            chmod +x /root/bin/$1
            echo "#!/bin/bash
                        # ------------------------------------------
                        # Filename:    $1(此处会根据文件名自动更换)
                        # Revision:    1.0
                        # Date:        $(date +%F)(此处会自动变换为当前日期)
                        # Author:      xiaoyu
                        # Email:       851812316@qq.com
                        # ------------------------------------------
                        # Copyright:   2018 xiaoyu
                        # License:     GPL" > /root/bin/$1
            vim /root/bin/$1

第一次把课后作业在头天晚上完成了,特此来记录一下。加油~

转载于:https://blog.51cto.com/13572413/2063930

相关文章:

  • 沉浸式状态栏解析
  • 若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet
  • Spring Cloud微服务分布式云架构简介
  • centos7 mysql 5.7 yum安装
  • Maven单独构建多模块项目中的单个模块
  • 常用页面校验整合
  • java spring事务管理相关
  • HTML5 a标签的download属性
  • 正向代理,反向代理(图片解析)
  • nginx常用命令
  • 雾计算简史
  • php memcached(windows linux) 的安装及应用 2011-04-08
  • Go channel 实现归并排序中的 merge 函数
  • Redis源码解析--Replication
  • 网站Web项目树形菜单的实现过程(ExtJS+SpringMVC+Spring+Hibernate+MySQL)
  • 【知识碎片】第三方登录弹窗效果
  • bearychat的java client
  • javascript从右向左截取指定位数字符的3种方法
  • Java教程_软件开发基础
  • Promise面试题,控制异步流程
  • spring + angular 实现导出excel
  • 动态规划入门(以爬楼梯为例)
  • 机器学习 vs. 深度学习
  • 使用common-codec进行md5加密
  • 用quicker-worker.js轻松跑一个大数据遍历
  • ​学习一下,什么是预包装食品?​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #13 yum、编译安装与sed命令的使用
  • %@ page import=%的用法
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (过滤器)Filter和(监听器)listener
  • (汇总)os模块以及shutil模块对文件的操作
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (十七)devops持续集成开发——使用jenkins流水线pipeline方式发布一个微服务项目
  • (转) Face-Resources
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)fock函数详解
  • (转)http-server应用
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net6Api后台+uniapp导出Excel
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .net专家(高海东的专栏)
  • ::前边啥也没有
  • @synthesize和@dynamic分别有什么作用?
  • [\u4e00-\u9fa5] //匹配中文字符
  • [Android] Android ActivityManager
  • [C++]四种方式求解最大子序列求和问题
  • [Firefly-Linux] RK3568 pca9555芯片驱动详解
  • [jQuery]div滚动条回到最底部
  • [JS] 常用正则表达式集(一)
  • [linux c]linux do_div() 函数用法
  • [MySQL FAQ]系列 -- 如何利用触发器实现账户权限审计