shell练习
1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信 息,包括主机名,IPv4地址,操作系统版本,内核版本, CPU型号,内存大小,硬盘大小。 [root@zab ~]# mkdir bin vim 只能创建脚本文件,root下需手动创建bin目录 [root@zab ~]# vim /root/bin/systeminfo.sh 创建脚本 #!/bin/bash bash shell类型 #file-name:systeminfo.sh #表示注释 文件名 echo "`hostname`" 命令需要反引号解析 echo "`uname -r`" echo "`cat /etc/centos-release`" echo "cpu:`lscpu |egrep "Intel"|tail -n1|tr -s ' '|cut -d: -f2`" echo "free-mem:`free|egrep "Mem"|tr -s ':' ' '|cut -d' ' -f4`" echo "sda:`df -h|egrep sda`" ~ [root@zab ~]# bash systeminfo.sh zab.123 2.6.32-696.el6.x86_64 CentOS release 6.9 (Final) cpu: Intel(R) Core(TM) i5-4200M CPU @ 2.50GHz free-mem:830740 sda:/dev/sda2 48G 3.7G 42G 8% / /dev/sda3 9.5G 22M 9.0G 1% /app /dev/sda1 976M 40M 886M 5% /boot [root@zab ~]# bash systeminfo.sh bash执行不需要路径 zab.123 2.6.32-696.el6.x86_64 CentOS release 6.9 (Final) cpu: Intel(R) Core(TM) i5-4200M CPU @ 2.50GHz free-mem:831584 sda:/dev/sda2 48G 3.7G 42G 8% / /dev/sda3 9.5G 22M 9.0G 1% /app 2、编写脚本/root/backup.sh,可实现每日将/etc/目录 备份到/root/etcYYYY-mm-dd中 #!/bin/bash cp -av /etc/ /root/etc`date +%F` 或者 #!/bin/bash DATE=`date +%F` cp -av /etc/ /root/etc${DATE} 3、编写脚本/root/disk.sh,显示当前硬盘分区中空间利 用率最大的值 #!/bin/bash df -h|egrep "sda"|egrep -o "&;[0-9]{1,}%"|head -n1 ~ 4、编写脚本/root/bin/sumid.sh,计算/etc/passwd文件中 的第10个用户和第20用户的ID之和 #!/bin/bash num1=`cat /etc/passwd |head -10|tail -1|cut -d":" -f3` num2=`cat /etc/passwd |head -20|tail -1|cut -d":" -f3` let sum=num1+num2 echo $sum 180 5、编写脚本/root/bin/sumspace.sh,传递两个文件路径作 为参数给脚本,计算这两个文件中所有空白行之和 #!/bin/bash a=`cat $1|egrep "^[[:sapce:]]*$"|wc -l` b=`cat $2|egrep "^[[:sapce:]]*$"|wc -l` let sum=a+b echo $(sum) ~ bash a.sh f1 f2 6、编写脚本/root/bin/sumfile.sh,统计/etc,/var,/usr目 录中共有多少个一级子目录和文件 #!/bin/bash a=`ll /etc |egrep "^d"|sort -nr|wc -l` b=`ll /var |egrep "^d"|sort -nr|wc -l` c=`ll /usr |egrep "^d"|sort -nr|wc -l` let d=a+b+c echo $d aa=`ll /etc |egrep "^-"|sort -nr|wc -l` bb=`ll /var |egrep "^-"|sort -nr|wc -l` cc=`ll /usr |egrep "^-"|sort -nr|wc -l` let dd=aa+bb+cc echo $(dd) 7、编写脚本/root/bin/argsnum.sh,接受一个文件路径作为 参数;如果参数个数小于1,则提示用户“至少应该给一个参 数”,并立即退出;如果参数个数不小于1,则显示第一个参 数所指向的文件中的空白行数 #!/bin/bash [ $# -lt 1 ] && echo "least one arg" && exit [ $# -lt 1 ] || cat $1|egrep "^[[:space:]]*$"|wc -l ~ 8、编写脚本/root/bin/hostping.sh,接受一个主机的IPv4 地址做为参数,测试是否可连通。如果能ping通,则提示用户 “该IP地址可访问”;如果不可ping通,则提示用户“该IP地 址不可访问” #!/bin/bash ping -w 4 $1 &>/dev/null && echo "ip can access"|| echo "ip can not access" ~ 9.编写脚本/root/bin/checkdisk.sh,检查磁盘分区空间和 inode使用率,如果超过80%,就发广播警告空间将满 #!/bin/bash a=`df |egrep "/dev/sd"|egrep -o "&;[0-9]{1,}%"|sort -nr|head -1|tr -d "%"` [ $a -gt 80 ] && echo -e"awarning" || echo "normal" 10、编写脚本/bin/per.sh,判断当前用户对指定的参数文件, 是否不可读并且不可写 v #!/bin/bash [ ! -r $1 -o -w $1 ] && echo "`whoami` can not read and write " #!/bin/bash [ -r $1 ] || [ -w $1 ] || echo "`whoami` can not read and write" ~ 11、编写脚本/root/bin/excute.sh ,判断参数文件是否为sh 后缀的普通文件,如果是,添加所有人可执行权限,否则提 示用户非脚本文件 v #!/bin/bash [[ `basename $1` =~ .*.sh ]] && [ -f $1 ] && chmod a+x $1 || echo "$1 is not bash file" 12.复制/etc/profile至/tmp/目录,用查找替换命令删除 /tmp/profile文件中的行首的空白字符 v 扩展模式下:%s@^[[:space:]]+@@g 13。复制/etc/rc.d/init.d/functions文件至/tmp目录,用查 找替换命令为/tmp/functions的每行开头为空白字符的行的 行首添加一个#号 :%s@^ @# @g 行首为空格加# 意思是空格替换为#加空格 将行首空格字符替换为#空格字符 14。复制/etc/rc.d/init.d/functions文件至/tmp目录,替换 /tmp/functions文件中的/etc/sysconfig/init为/var/log :%s@/etc/sysconfig/init@/var/log@g 15.删除/tmp/functions文件中所有以#开头,且#后面至少 有一个空白字符的行的行首的#号 :%s@^# @ @g (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |