脚本练习

脚本练习:

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条)

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

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

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code