脚本练习:
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
4、编写脚本/root/bin/links.sh,显示正连接本主机的每个远程主机的IPv4地址和连接数,并按连接数从大到小排序
#!/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条)
作业完成的很好,但是总结没写,这是需要改进的地方