shell编程的常见实例

1. 写一个脚本/root/bin/argsnum.sh 用户输入一个文件路径并查找文件中空白行的个数

,如果用户没有输入路径则自动退出

 实验结果如下:

blob.png

如果不输入任何路径程序会自动退出:实验结果如下:

blob.png

用其他方法验证是不是有两行空行:

blob.png

blob.png

(个人总结):

1.   read 命令,如果用 -p 来做提示信息,则不支持\n换行,这时需要用echo命令,echo它  有自动换行,同时也支持\n   -t  timeout定义多长时间超时默认计时单位是分钟。-n 定义输入的的字符数,超出输入后会,read会自动退出, -s 隐藏输入时的字符,其实输入有的只是设置成了和背景色一样的的前景色。

2.   [[ -z “STRING”]] 字符串是否为空,空则为真.  [[ -n “STRING” ]]字符串是否为空,不空则为真——-注意方括号里面的两边是有空格的

3.   grep -c 做统计   grep -c “^$” $fpath  grep “^$” $fpath |wc  -l

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

blob.png


blob.png

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

blob.png

blob.png

其他实现方式df | tr -s ' ' | cut -d' ' -f5 |sed 1d |sort -nr |head -1   但是通用性比较差

blob.png

(个人总结):

灵活应用tr 命令中的tr -s ‘ ’删除重复的空格。

应用sed  #d去删除某一行

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

   netstat -nt |cut -d: -f1|tr -s ' '|grep "[0-9]" |cut -d' ' -f4

blob.png

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

    #!/bin/bash

   time=$(date '+%F')

   cp -r /etc/ /root/etc$time

blob.png

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

blob.png

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

blob.png

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

   法一:

   blob.png

法二:

 blob.png

(个人总结):

    比较灵活的应用位置变量来接受用户动态传过来的三个值,且使用了echo -en 进行取消自动换行和按需手动换行

 

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

blob.png

  (个人总结)

    此练习中用到了-c  -W两个选项,-c 是定义ping的次数,-W是定义ping的时间,而   &> /dec/null 是重定向到一个空设备中而不用显示出来

      10、指定文件做为参数,判断文件是否为.sh后缀,如果是,添加x权限

    #!/bin/bash

   echo $1 | grep .*\.sh$ |chmod +x $1 && echo 权限x已经附加 || echo 你输入的目录不是.sh

blob.png

11、 判断硬盘的每个分区空间和inode的利用率是否大于80,如果是,发邮件通知root磁  盘满

    [ `df -i |sed 1d |tr -s ' '|cut -d ' ' -f5|cut -d% -f1|sort -nr|head -1` -ge 80 ] || [ `df |sed 1d |tr -s ' '|cut -d ' ' -f5|cut -d% -f1 |sort -nr|head -1` -gt 80 ] && echo 磁盘将爆满请检查磁盘Inode或容量

blob.png

 [ `df -i |sed 1d |tr -s ' '|cut -d ' ' -f5|cut -d% -f1|sort -nr|head -1` -ge 8 ] || [ `df |sed 1d |tr -s ' '|cut -d ' ' -f5|cut -d% -f1 |sort -nr|head -1` -gt 80 ] && echo 磁盘将爆满请检查磁盘Inode或容量

   测试二、把磁盘条件中80改成8提示报警

blob.png

12、判断输入的IP是否为合法IP

     #!/bin/bash

    echo 请输入IP地址

    read ips

    echo "$ips" |egrep    '^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[    0-5])$' && echo 你输入的地址是合法地址||echo 你输入的IP地址有错

blob.png

blob.png

13、计算1+2+3+…+100

blob.png

14、输入起始值A和最后值B,计算从A+A+1…+(B-1)+B的总和

     #!/bin/bash

    echo 请输入要A B

    read -p "你输入的A值为" A

    read -p "你输入的B值为" B

    [ $A -ge $B ]&&exit || echo `seq $A $B` |tr ' ' + |bc

blob.png

blob.png

(个人总结):用在echo中调用seq命令能够灵活的横行打印

原创文章,作者:yywan1314,如若转载,请注明出处:http://www.178linux.com/33685

(0)
yywan1314yywan1314
上一篇 2016-08-12
下一篇 2016-08-12

相关推荐

  • 高级文件系统管理

    磁盘配额:         当我们在一个指定分区内有多个用户使用时,为了保证磁盘空间的大小,我们可以限制某些用户在该磁盘空间中的使用量,此种功能我们称之为磁盘配额。          &nb…

    Linux干货 2016-08-30
  • 字符切割和用户管理

    1、列出当前系统上所有已经登录的用户的用户名,同一个用户登录多次,则只显示一次 who |cut -d’ ‘ -f1 |sort -u2、取出最后登录到当前系统的用户的相关信息。 last |head -1|cut -d’ ‘ -f1 3、取出当前系统上被用户当作其默认shell的最多的那个shell。 cut…

    2017-12-17
  • ☞{ 编译内核;自制linux; }

    编译内核、自制linux 自制简单的linux 前提约定 CentOS 6.8 , Kernel-2.6.32-642.el6.x86_64 基于GRUB – 0.97 / 分区与 boot 分区独立, /boot 分区 100M+ ,/ 根分区看具体需求,此处为 1G Vmware 12.1,新建一个Li…

    Linux干货 2016-09-15
  • 第二周博客作业

    1.Linux上的文件管理类命令都有那些,其常用的使用方法及其相关示例演示。
    2.Bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
    3.请使用命令行展开功能来完成以下的练习。
    4.文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。
    5.如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
    6.显示/var目录下所有以1开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其他字符)的文件或目录。
    7.显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
    8.显示/etc目录下,以非字母开头,后面跟了一个字母以及其他任意长度任意字符的文件或目录。
    9.在/tmp目录下创建以tgile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22
    10.复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
    11.复制/etc目录下所有以.d结尾的文件或目录到/tmp/mytest2目录中。
    12.复制/etc目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

    2018-03-22
  • N22-妙手-第七周课程练习

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; [root@localhost ~]# mke2fs -t ext4 -m 2 -L MY…

    Linux干货 2016-10-09
  • 磁盘分区命令与文件系统简介

    磁盘分区命令与文件系统简介   这一次的博客是整理一下这周所学的磁盘分区fdisk与mount命令,内容不难但是比较琐碎,需要记忆的命令比较多,刚好借着博客来复习一下命令,加强一下记忆。废话不多说,开始! 首先做一下准备工作:在虚拟机上增加一个或多个磁盘,这个比较简单,在VMware虚拟机上方点虚拟机右键—>设置&#82…

    2017-08-19

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-12 14:05

    通过练习,总结对shell脚本的认识,是个很好的方式,shell脚本的变量也需要作者能有一个完整的概述哦