zoukankan      html  css  js  c++  java
  • 基础脚本编程练习题

        Shell脚本其实就是以一系列命令组合起来的文本文件,这些命令组合起来完成一个或者一项功能。因为Shell似乎是各UNIX系统之间通用的功能,并且经过POSIX(表示可移植操作系统接口Portable Operating System Interface of UNIX,缩写为 POSIX)的标准化。因此,Shell脚本只要“用心写”一次,即可应用到很多系统上。因此,之所以要使用Shell脚本不仅仅是基于:它的简单性(简洁地表达复杂的操作)和可移植性(脚本无须修改就可在不同的系统上执行),和它相对开发容易(可以在短时间内完成一个功能强大又妤用的脚本)也离不开。它的示例一般长下面这样:

    下面小编通过一些练习题来向你们讲述shell的美

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

     小编解析*:

     第8行:题目只要IPv4地址,所以使用ifconfig ens33,然后grep命令过滤出包含inet的那一行,最后tr命令把里面的空格转变成一个就可以切出你想要的那一串数字啦

     第9行:小编觉得这一行大家应该都知道,就是显示版本号和内核信息的,记住这俩命令即可,其他的就不多说了。

     第10行:与第8行相似,都是查询过滤再进行切除。

     第11行:我们看到两个$符对不对,中括号里面的$符是用来引用小括号里面的那些查看过滤取行首等命令执行的结果,中括号外面的$符是用来计算的,看到/符没,/1024就是 除以1024。(小编这里说的是不是有点绕)

     第12行:相似与第8、10行,小编就不絮叨了。

    结果显示:

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

     结果显示:

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

     结果显示:

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

     结果显示:

     

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

    小编解析*:

    第5、6行:这两行长得很像哈。首先我们看到反引号把所有内容都引起来了,它这里就是把里面的内容当做一个命令来执行。

    第7行:中括号里面的$符是分别引用第5、6行得出的user10和user20的结果;外面的$符是依题意要求计算他俩的和

    第8行:输出计算之后的和

    结果如下:

    [root@localhost bin]# ./sumid.sh   

    70

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

     小编解析*:

    第5、6行:首先又是反引号,其作用如第5题,而grep后面加双引号可以识别所输入的变量;这道题所说的空白行就是由空格组成的行,也就是以空格开头以空格结尾但是中间也是有内容的,内容就是这些space。^符就是以后面的space(空格)开头,*号代表有很多空格,$符就是以前面的space结尾,$1,$2就是传递给脚本的参数,最后wc再进行行数统计。

     第7、8行与第5题相似,也是计算并输出结果。

    结果显示:

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

    结果显示:

     [root@localhost bin]# ./sumfile.sh

    304

    8、编写脚本/root/bin/argsnum.sh,接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小于1,则显示第一个参数所指向的文件中的空白行数

    小编解析*:

    第5行中的$@表示传递给脚本的所有参数,如果传递的有参数,就会显示&&后面的小括号里统计出来的行数;如果没有传递参数,就会输出||后面的小括号里的“至少应该给一个参数”这句话。

      方法二:

       [[ $# -lt 1 ]] && echo "至少应该给一个参数!" || echo "第一个文件中有 `grep '^[[:space:]]*$' $1|wc -l`个空白行"

       这里小编用中括号进行判断传递给脚本参数的个数($#)是否小于(lt)1,个数小于1就会显示”至少应该给一个参数“这句话,不小于1就输出||后面的统计结果。

    结果显示:

    [root@localhost bin]# ./argsnum.sh                 

    至少应该给一个参数

    [root@localhost bin]# ./argsnum.sh /etc/login.defs

    第一个文件中有 10个空白行

    9、编写脚本/root/bin/hostping.h,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”

     小编解析*:

      这一题里,-c代表ping几次,-w代表执行时间,小编这里是让它ping1次然后用时1秒,不然ping起来没完很费时间的啊。题目要求就是测试是否连通并没说要结果,所以我们就可以把它ping的结果无论成功失败都导入到垃圾桶(/dev/null)里面去,最后对应加上需要输出的语言就可以了。

    结果显示:

    10、编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和inode使用率,如果超过80%,就发广播警告空间将满。

    小编解析*:

      第5、6行这里就是通过转换排序等命令得出最大值

      第7、8行是判断上面所得出的结果是否大于(gt)80,大于就要发广播(wall命令),小于就显示正常。

    结果显示:

      第二种方法:

    这种方法就是把方法1的判断那两行使用||合并成了一行,你们那么聪明,小编就不啰嗦了啊。

    小编总结:关于shell脚本这一章就要多练题、多敲

     

  • 相关阅读:
    hdu 5446 Unknown Treasure lucas和CRT
    Hdu 5444 Elven Postman dfs
    hdu 5443 The Water Problem 线段树
    hdu 5442 Favorite Donut 后缀数组
    hdu 5441 Travel 离线带权并查集
    hdu 5438 Ponds 拓扑排序
    hdu 5437 Alisha’s Party 优先队列
    HDU 5433 Xiao Ming climbing dp
    hdu 5432 Pyramid Split 二分
    Codeforces Round #319 (Div. 1) B. Invariance of Tree 构造
  • 原文地址:https://www.cnblogs.com/Qian-free/p/7622485.html
Copyright © 2011-2022 走看看