脚本案例十三
实例一、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本, CPU型号,内存大小,硬盘大小。
mkdir -pv /root/binvim /root/bin/systeminfo.sh 代码如下#!/bin/bashecho '主机名是:'hostnameecho 'IPv4地址是:'ifconfig | grep -w inet|tr -s ' '|cut -d ' ' -f 3echo '操作系统版本:'cat /etc/redhat-releaseecho '内核版本:'uname -recho 'cpu型号:'lscpu |grep Recho '内存大小:'free -h|grep Mem|tr -s ' '|cut -d ' ' -f 1-2echo '硬盘大小:'fdisk -l |grep sd #或 lsblk-----------------------------------------------------------------------------------------实例二、编写脚本/root/bin/backup.sh,可实现每日将/etc/目录 备份到/root/etcYYYY-mm-dd中vim /root/bin/backup.sh方法一:#!/bin/bashecho "正在备份...."cp -a /etc /root/etc`date +%F`echo "备份完成"方法二:计划任务#!/bin/bashcrontab -e1 0 * * * cp -a /etc /root/etc`date +%F`-----------------------------------------------------------------------------------------实例三、编写脚本/root/bin/disk.sh,显示当前硬盘分区中空间利 用率最大的值vim /root/bin/disk.sh#!/bin/bashecho "当前硬盘分区中空间利用率最大的值是:`df -h|grep "^/dev/sd"|tr -s " " |cut -d " " -f 5|sort -n|tail -1|cut -c -2`"-----------------------------------------------------------------------------------------实例四、编写脚本/root/bin/links.sh,显示正连接本主机的每个远 程主机的IPv4地址和连接数,并按连接数从大到小排序vim /root/bin/links.sh#!/bin/bashecho "连接数和IPv4地址为:` netstat -nt|tr -s " "| cut -d " " -f 5|sed -n '/^[[:digit:]]'/p |tr ":" "."|cut -d . -f 1-4|sort|uniq -c |sort -nr`"-----------------------------------------------------------------------------------------实例五、写一个脚本/root/bin/sumid.sh,计算/etc/passwd 文件中的第10个用户和第20用户的ID之和vim /root/bin/sumid.sh#!/bin/bashID1=`sed -n '10p' /etc/passwd|cut -d: -f 3`ID2=`sed -n '20p' /etc/passwd|cut -d: -f 3`SUM=$[$ID1+$ID2]echo "用户ID和为:$SUM"-----------------------------------------------------------------------------------------实例六、写一个脚本/root/bin/sumspace.sh,传递两个文件 路径作为参数给脚本,计算这两个文件中所有空白行之和vim /root/bin/sumspace.sh#!/bin/bashA=`grep "^$" $1 | wc -l`B=`grep "^$" $2 | wc -l`C=$[$A+$B]echo "所有空白行的和为:$C"-----------------------------------------------------------------------------------------实例七、写一个脚本/root/bin/sumfile.sh,统计/etc, /var, /usr目录中共有多少个一级子目录和文件
vim /root/bin/sumfile.sh#!/bin/bashA=`ls -A /etc | wc -l`B=`ls -A /var | wc -l`C=`ls -A /usr | wc -l`SUM=$[$A+$B+$C]echo "一级子目录和文件的总和为:$SUM"-----------------------------------------------------------------------------------------实例八、写一个脚本/root/bin/argsnum.sh,接受一个文件路径作 为参数;如果参数个数小于1,则提示用户“至少应该给一个 参数”,并立即退出;如果参数个数不小于1,则显示第一个 参数所指向的文件中的空白行数vim /root/bin/argsnum.sh#!/bin/bashif [ $# -lt 1 ];then echo "请输入至少一个参数:" exit 0 fi if [ $# -gt 1 ];then SUM=`grep "^$" $1 | wc -l` echo "空白行为:$SUM" fi-----------------------------------------------------------------------------------------实例九、写一个脚本/root/bin/hostping.sh,接受一个主机的IPv4地址做为参数,测试是否可连通。如果能ping通,则提示用户“该IP地址可访问”;如果不可ping通,则提示用户“该IP地址不可访问vim /root/bin/hostping.sh#!/bin/bashif [ $# -lt 1 ];then echo "请输入参数:" exit 0fiping -c 1 -w 1 $1 &>/dev/nullif [ $? -eq 0 ];then echo "该IP地址可以访问" else echo “该IP地址不可以访问”fi-----------------------------------------------------------------------------------------实例十、chmod -rw /tmp/file1,编写脚本/root/bin/per.sh,判 断当前用户对/tmp/fiile1文件 是否不可读且不可写 ?vim /root/bin/per.sh#!/bin/bashif [ ! -r /tmp/file1 -a ! -w /tmp/file1 ];then echo "当前用户对此文件无读写权限!" else echo "当前用户对此文件可读可写!" fi-----------------------------------------------------------------------------------------实例十一、编写脚本/root/bin/nologin.sh和login.sh,实现禁止和允许普通用户登录系统。vim /root/bin/nologin.sh#!/bin/bashread -p "请输入用户名:" usernameA=/bin/bashB=`grep "^$username" /etc/passwd | cut -d: -f7`C=`grep "^$username" /etc/passwd| cut -d: -f 3`D=`grep "^$username" /etc/passwd`if [ $? -ne 0 ];then echo "系统无此用户..."elif [ $C -lt 1000 ];then echo "$username 不是普通用户,请重新输入..."elif [ "$B" == "$A" ];then usermod -s /sbin/nologin $username echo "禁止$username 登录"fivim /root/bin/login.sh#!/bin/bashread -p "请输入用户名:" usernameA=/sbin/nologinB=`grep "^$username" /etc/passwd | cut -d: -f 7`C=`grep "^$username" /etc/passwd | cut -d: -f 3`D=`grep "^$username" /etc/passwd`if [ $? -ne 0 ];then echo "系统无此用户..."elif [ $C -lt 1000 ];then echo "$username 用户不是普通用户,请重新输入..."elif [ "$B" == "$A" ];then usermod -s /bin/bash $username echo "允许$username 登录"fi
实例十二. 写一个批量创建10个用户的脚本users.sh。创建的用户名由字母和数字组成。设置用户的初始密码跟用户名相同,每创建一个用户就显示用户的ID信息,再显示用户名、密码信息。
vim users.sh#!/bin/bashif [ $# -lt 1 ];then echo "请输入参数add:" exit 0fi if [ $1 == "add" ];then for I in {1..10}; do if id user$I &>/dev/null;thenecho "用户 user$I 已存在"else useradd user$I echo user$I | passwd --stdin user$I &> /dev/null echo "user$I add sucessful" id user$I grep user$I /etc/passwd | cut -d : -f1 grep user$I /etc/shadow | cut -d : -f2 fidonefi-----------------------------------------------------------------------------------------实例十三.写一个批量删除上一题的10个用户的脚本udel.sh。删除之前显示用户的ID信息,要删除用户的家目录。vim udel.sh#!/bin/bash if [ $# -lt 1 ];then echo "请输入参数del:" exit 0fi if [ $1 == "del" ];then for I in {1..10};do if id user$I &> /dev/null;then id user$I userdel -r user$I echo "delete user$I sucessful"else echo "no user$I"fidonefi---------------------------------------------------------------------------------------