脚本练习

脚本练习:

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

#!/bin/bash
#功能:编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小
Zhujixinxi=`hostname`
Ipv4=`ifconfig | sed -n '2p'|sed -r 's@.*addr:(.*) .*B.*@\1@'`
Banben=`cat /etc/redhat-release`
Neihe=`uname -r`
Cpu=`lscpu | sed -n '/^Model name.*/p'|sed -r 's@.*[[:space:]]{3}+(.*$)@\1@'`
Neicun=`free -h |tr -s " "|cut -d " " -f2 | sed -n '2p'`
Yingpan=`fdisk -l |sed -n '2p'| sed -r 's@.* (.*) GB.*@\1@'`
echo 'hostname :' $Zhujixinxi
echo 'IPv4:' $Ipv4
echo 'OS version :' $Banben
echo 'Kernel version :' $Neihe
echo 'CPU :' $Cpu
echo 'memory:' $Neicun
echo "harddisk: $Yingpan"
[root@qzx bin]# vim systeminfo.sh
[root@qzx bin]# ./systeminfo.sh
hostname : qzx.centos6.8
IPv4: 10.1.253.75
OS version : CentOS release 6.8 (Final)
Kernel version : 2.6.32-642.el6.x86_64
CPU : Intel(R) Core(TM) i5-4200M CPU @ 2.50GHz
memory: 1.8G

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

#!/bin/bash
#实现每日将/etc/目录备份到/root/etcYYYY-mm-dd中
echo '开始备份/etc。。。。。。。'
cp -a /etc /root/${date +%F}
echo '备份结束'
[root@qzx bin]# bash backup.sh
开始备份/etc。。。。。。。
备份结束
[root@qzx bin]# ls /root/
2016-08-11       Desktop    hehe                Pictures   user.txt

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

#!/bin/bash
#显示当前硬盘分区中空间利用率最大的值
max=`df |tr -s ' ' '%'|cut -d '%' -f5|sort -n |tail -1`
echo "当前硬盘分区中空间利用率最大的值为:$max"
[root@qzx bin]# ./disk.sh 
当前硬盘分区中空间利用率最大的值为:52
#!/bin/bash
#显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序
links=`netstat -nt |tr -s ' ' |tail -n +3 | cut -d " " -f5 | sed -r 's@(.*):.*@\1@'|sort |uniq -c`
echo "$links"
[root@qzx bin]# bash link.sh
      2 10.1.250.28

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

#!/bin/bash
#/etc/passwd文件中的第10个用户和第20用户的ID之和
sumid=`sed -n '10p;20p' /etc/passwd|cut -d : -f 3 |tr '\n' '+' | sed -r 's@(.*)\+@\1\n@'| bc`
echo "/etc/passwd文件中的第10个用户和第20用户的ID之和:$sumid"
[root@qzx bin]# bash sumid.sh
/etc/passwd文件中的第10个用户和第20用户的ID之和:80

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

##!/bin/bash
#传递两个文件路径作为参数给脚本,计算这两个文件中所有空白行之和
space1=`grep '^$' $1 | wc -l`
space2=`grep '^$' $2 | wc -l`
let Sumspace=$space1+$space2
echo "两个文件中所有空白行之和: $Sumspace"
[root@qzx bin]# bash  sumspace.sh /etc/rc.d/init.d/functions ../.bash_profile 
两个文件中所有空白行之和: 109

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

#!/bin/bash
#统计/etc, /var, /usr目录中共有多少个一级子目录和文件
etcnum=`ls -A -1 /etc/ |wc -l`
varnum=`ls -A -1 /var/ |wc -l`
usernum=`ls -A -1 /usr/ |wc -l`
let sum=$etcnum+$varnum+$usernum
echo "/etc, /var, /usr目录中共有多少个一级子目录和文件:$sum"
[root@qzx bin]# bash sumfile.sh
/etc, /var, /usr目录中共有多少个一级子目录和文件:299

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

#!/bin/bash
#接受一个文件路径作为参数;如果参数个数小于1,则提示用户“至少应该给一个参数”,并立即退出;如果参数个数不小>于1,则显示第一个参数所指向的文件中的空白行数
[[ $# -lt 1 ]] && echo "至少应该输入一个参数" || (grep '^$' $1 | wc -l)
[root@qzx bin]# bash argsnum.sh /etc/rc.d/init.d/functions 
105
[root@qzx bin]# bash argsnum.sh 
至少应该输入一个参数

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

#!/bin/bash
#接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,
则提示用户“该IP地址不可访问”
ping -w1 -c1 "$1" &>/dev/null
Pingchenggong=`echo $?`
[[ $Pingchenggong -eq  0 ]] && (echo "该IP地址可访问") || (echo "该IP地址不可访问")
 [root@qzx bin]# bash hostping.sh 10.1.253.1
 该IP地址可访问
 [root@qzx bin]# bash hostping.sh 10.1.253.155
 该IP地址不可访问

9、chmod -rw /tmp/file1,编写脚本/root/bin/per.sh,判断当前用户对/tmp/fiile1文件是否不可读且不可写

#!/bin/bash
#判断当前用户对/tmp/fiile1文件是否不可读且不可写
(([ ! -r /tmp/flie1 ])  && ([ ! -w /tmp/file1 ])) && (echo "此用户对/tmp/file1文件不可读写" )
 [qzx@qzx bin]$ /tmp/per.sh 
 此用户对/tmp/file1文件不可读写
 [qzx@qzx bin]$ ll /tmp/file1 
 -rw-rw----. 1 root root 5 Aug 12 10:57 /tmp/file1

10、编写脚本/root/bin/nologin.sh和login.sh,实现禁止和充许普通用户登录系统。

#!/bin/bash
#实现禁止和允许普通用户登录系统。
[ -f /etc/nologin ] && (echo "普通用户已不能登录")|| (touch /etc/nologin)

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

#!/bin/bash
#接受一个主机的IPv4地址做为参数,先判断是否合格IP,否,提示IP格式不合法并退出,是,测试是否可连通。如果能ping通,则提示>用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问”
echo $1 | egrep -o '([0-9]|([1-9][0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.([0-9]|([1-9][0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.([0-9]|([1-9][0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.([0-9]|([1-9][0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\>'&>/dev/null
[ $? -ne  0 ] && echo "这是个不合格的IP" && exit 213
ping -w1 -c1 "$1" &>/dev/null &&  (echo "该IP地址可访问") || (echo "该IP无法访问")
 [root@qzx bin]# bash  pinghost.sh 10.1.0.755
 这是个不合格的IP
 [root@qzx bin]# bash  pinghost.sh 10.1.0.255
 该IP无法访问
 [root@qzx bin]# bash  pinghost.sh 10.1.0.2
 该IP无法访问
 [root@qzx bin]# bash  pinghost.sh 10.1.0.1
 该IP地址可访问

12、计算1+2+3+…+100的值

[root@qzx ~]# seq 1 100 |tr '\n' '+' | egrep -o '.*[^+]' |bc
5050

13、计算从脚本第一参数A开始,到第二个参数B的所有数字的总和,判断B是否大于A,否提示错误并退出,是则计算之

#!/bin/bash
#计算从脚本第一参数A开始,到第二个参数B的所有数字的总和,判断B是否大于A,否提示错误并退出,是则计算之
[ $2 -gt $1 ] && (seq $1 $2 |tr '\n' '+' | egrep -o '.*[^+]' |bc) || (echo "输入的数字不正确")
 [root@qzx bin]# bash  numA_B.sh  100 1
 输入的数字不正确
 [root@qzx bin]# bash  numA_B.sh 1  100
 5050

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

(1)
qzxqzx
上一篇 2016-08-12 16:06
下一篇 2016-08-12 16:06

相关推荐

  • n28 第二周作业

    n28 第二周作业

    Linux干货 2017-12-09
  • Linux之网络的风采——以后也能做网管了

    理论基础 1、先说说这个IP:     IP是一种协议,计算机与计算机通信协议,是一种底层通信协议,分为IPv4与IPv6,现在使用的还是IPv4     IPv4由32位二进制组成,也就是由32位0或者1组成,通过排列组合也能算出来这个世界一共有多少个IP了,有2^32个IP约42.9亿个IP,但是据说现在地球人口已…

    2017-03-26
  • 配置yum服务器——以centOS 6.9系统为例

    准备工作 关闭防火墙  关闭防火墙service iptables stop  设置防火墙开机不启动chkconfig iptables off  查看一下防火墙状态 iptables -vnL 如下图,可以看到已经关闭 关闭SElinux 使用命令 vim /etc/selinux/config 将SELINUX=enable…

    Linux干货 2017-08-05
  • 私人定制-linux系统和grub启动流程中问题及解决方案

    系统的启动流程;     POST加电自检–>Boot Sequence(BIOS)–>Boot Loader(MBR)–>kernel(Ramdisk)–>rootfs–>switchroot–>/sbin/i…

    Linux干货 2016-09-13
  • N26-第九周作业-邢岩

    马哥门徒-N26-邢岩 相信自己、勤奋努力、不断总结!shell脚本练习需要重复、重复、再重复!那么,我就继续来写、写、写。 1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #******************************…

    Linux干货 2017-04-03
  • rpm包管理

    rpm包管理 rpm(RedHat Package Manager) 是RedHat公司发展的一种将软件安装到Linux系统的管理机制,也是一种数据库记录方法。 Linux系统上软件的安装主要分两种方式,从厂商发布的tarball通过编译来安装;或者使用厂商已经在相应平台上编译好的二进制文件。 从源码编译安装的程序,在漏洞修补以及软件功能升级时太过麻烦,并且…

    Linux干货 2016-11-18

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-15 16:52

    作业完成的很好,但是总结没写,这是需要改进的地方