案例一:通过位置变量创建系统账户及密码分析(1)通过位置变量创建 Linux 系统账户及密码 (2)创建用户,111为第一个变量 (3)为用户设置密码,123456为第二个变量 实现#!/bin/bash useradd "111" echo "123456" | passwd --stdin "111" 结果
案例二:一键部署 LNMP(RPM 包版本)分析(1)安装服务 (2)启动服务 (3)查看启动状态 实现#!/bin/bash yum -y install httpd yum -y install mariadb mariadb-devel mariadb-server yum -y install php php-mysql systemctl start httpd mariadb systemctl enable httpd mariadb 结果
案例三:监控内存和磁盘容量分析(1)实时监控本机内存和硬盘剩余空间 (2)提取根分区剩余空间 (3)提取内存剩余空间 (4)剩余内存小于500M、根分区剩余空间小于1000M时,发送报警邮件给root管理员 实现#!/bin/bash disk_size=$(df / | awk '/\//{print $4}') mem_size=$(free | awk '/Mem/{print $4}') while : do if [ $disk_size -le 512000 -a $mem_size -le 1024000 ] then mail -s "Warning" root <<EOF Insufficient resources,资源不足 EOF fi done 案例四:猜数字游戏分析(1)脚本生成一个100以内的随机数 (2)根据用户的输入,提示猜大了或者猜小了,直到用户猜对 (3)使用read提示用户猜数字 (4)使用if判断用户猜的数字 实现#!/bin/bash num=$[RANDOM%100+1] echo "$num" while : do read -p "计算机生成了一个1-100的随机数,你猜:" cai if [ $cai -eq $num ] then echo "恭喜,猜对了" exit elif [ $cai -gt $num ] then echo "Oops,猜大了" else echo "Oops,猜小了" fi done 结果
案例五:检测本机当前用户是否为超级管理员分析(1)如果是管理员,则使用 yum 安装 vsftpd (2)如果不是,则提示您非管理员 实现#!/bin/bash if [ $USER == "root" ] then yum -y install vsftpd else echo "您不是管理员,没有权限安装软件" fi 案例六:创建用户分析(1)提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码 (2)如果用户不输入账户名,则提示必须输入账户名并退出脚本 (3)如果用户不输入密码,则统一使用默认的 123456 作为默认密码 实现#!/bin/bash read -p "请输入用户名:" user if [ -z $user ];then echo "您不需输入账户名" exit 2 fi stty -echo read -p "请输入密码:" pass stty echo pass=${pass:-123456} useradd "$user" echo "$pass" | passwd --stdin "$user" 结果案例七:输入三个数并进行升序排列分析(1)依次提示用户输入 3 个整数,脚本根据数字大小依次排序输出 3 个数字 (2)不管谁大谁小,最后都打印 echo "$num1,$num2,$num3" (3)num1 中永远存最小的值,num2 中永远存中间值,num3 永远存最大值 (4)如果 num1 大于 num2,就把 num1 和和 num2 的值对调,确保 num1 变量中存的是最小值 (5)如果 num1 大于 num3,就把 num1 和 num3 对调,确保 num1 变量中存的是最小值 (6)如果 num2 大于 num3,就把 num2 和 num3 对标,确保 num2 变量中存的是小一点的值 实现#!/bin/bash read -p "请输入一个整数:" num1 read -p "请输入一个整数:" num2 read -p "请输入一个整数:" num3 tmp=0 if [ $num1 -gt $num2 ];then tmp=$num1 num1=$num2 num2=$tmp fi if [ $num1 -gt $num3 ];then tmp=$num1 num1=$num3 num3=$tmp fi if [ $num2 -gt $num3 ];then tmp=$num2 num2=$num3 num3=$tmp fi echo "排序后数据(从小到大)为:$num1,$num2,$num3" 结果
案例八:石头剪刀布游戏分析通过随机数获取计算机的出拳 实现#!/bin/bash game=(石头 剪刀 布) num=$[RANDOM%3] computer=${game[$num]} echo "请根据下列提示选择您的出拳手势" echo "1.石头" echo "2.剪刀" echo "3.布" read -p "请选择 1-3:" person case $person in 1) if [ $num -eq 0 ] then echo "平局" elif [ $num -eq 1 ] then echo "你赢" else echo "计算机赢" fi;; 2) if [ $num -eq 0 ] then echo "计算机赢" elif [ $num -eq 1 ] then echo "平局" else echo "你赢" fi;; 3) if [ $num -eq 0 ] then echo "你赢" elif [ $num -eq 1 ] then echo "计算机赢" else echo "平局" fi;; *) echo "必须输入1-3的数字" esac 结果案例九:进度条分析(1)定义一个显示进度的函数,屏幕快速显示 | / - \ (2)设置4个形状的编号,默认编号为0 (3)执行循环,COUNT每次循环加1 (4)判断COUNT的值,值不一样显示的形状就不一样 实现#!/bin/bash rotate_line(){ INTERVAL=0.5 COUNT="0" while : do COUNT=`expr $COUNT + 1` case $COUNT in "1") echo -e '-'"\b\c" sleep $INTERVAL ;; "2") echo -e '\\'"\b\c" sleep $INTERVAL ;; "3") echo -e "|\b\c" sleep $INTERVAL ;; "4") echo -e "/\b\c" sleep $INTERVAL ;; *) COUNT="0";; esac done } rotate_line 结果动态显示时针 案例十:乘法表实现#!/bin/bash for i in `seq 9` do for j in `seq $i` do echo -n "$j*$i=$[i*j] " done echo done 结果
案例十一: 实时显示数据包流量分析使用死循环实时显示 eth0 网卡发送的数据包流量 实现#!/bin/bash while : do echo '本地网卡eth0流量信息如下:' ifconfig eth0 | grep "RX pack" | awk '{print $5}' ifconfig eth0 | grep "TX pack" | awk '{print $5}' sleep 1 done 结果
案例十二: 点名器脚本分析(1)提前准备一个user.txt文件 (2)文件中需要包含所有姓名的信息,一行一个姓名,脚本每次随机显示一个姓名 实现#!/bin/bash while : do line=`cat user.txt | wc -l` num=$[RANDOM%line+1] sed -n "${num}p" user.txt sleep 0.2 clear done 结果
案例十三:100以内的所有正整数相加求和分析(1)对 100 以内的所有正整数相加求和(1+2+3+4...+100) (2)seq 100 可以快速自动生成100个整数 实现#! /bin/bash sum=0 for i in `seq 100` do sum=$[sum+i] done echo "总和是:$sum" 结果
案例十四: 打印国际象棋棋盘分析(1)设置两个变量,i和j,一个代表行,一个代表列 (2)i=1 代表准备第一行棋盘,第一行棋盘有灰色和蓝色间隔输出 (3)棋盘的规律是i+j,如果是偶数,就打印蓝色色块,是基数就打印灰色色块 (4)打印完成色块后不自动换行,在同一行继续输出其他色块 实现#!/bin/bash for i in {1..8} do for j in {1..8} do sum=$[i+j] if [ $[sum%2] -eq 0 ];then echo -ne "\033[46m \033[0m" else echo -ne "\033[47m \033[0m" fi done echo done 结果
案例十五: 统计文件个数并显示文件名分析(1)统计/var/log 有多少个文件,并显示这些文件名 (2)使用ls递归显示所有,再判断是否为文件 实现#!/bin/bash cd /var/log sum=0 for i in `ls -r *` do if [ -f $i ];then let sum++ echo "文件名:$i" fi done echo "总文件数量为:$sum" 结果
案例十六: 查找僵尸进程分析(1)查找 Linux 系统中的僵尸进程 (2)awk判断ps命令输出的第八列为Z,显示该进程的PID和进程命令 实现#!/bin/bash ps aux | awk '{if($8 == "Z"){print $2,$11}}' 案例十七:判断年份是否为闰年分析(1)提示用户输入年份后判断该年是否为闰年 (2)能被4整除并且不能被100整除的年份是闰年 (3)能被400整除的年份也是闰年 实现#!/bin/bash read -p "请输入一个年份:" year if [ "$year" = "" ];then echo "没有输入年份" exit fi if [[ "$year" =~ [a-Z] ]];then echo "你输入的不是数字" exit fi if [ $[year % 4] -eq 0 ] && [ $[year % 100] -ne 0 ];then echo "$year年是闰年" elif [ $[year % 400] -eq 0 ];then echo "$year年是闰年" else echo "$year年不是闰年" fi 结果
案例十八: 测试用户名和密码是否正确分析(1)测试用户名与密码是否正确 (2)用户名为tom并且密码为123456,提示登录成功,否则提示登录失败 实现#!/bin/bash read -p "请输入用户名:" user read -p "请输入密码:" pass if [ "$user" == 'tom' -a "$pass" == '123456' ];then echo "Login successful" else echo "Login Failed" fi 结果
案例十九:循环测试用户名和密码是否正确分析(1)循环测试用户名与密码是否正确 (2)最多测试三次,输入正确提示登陆成功,否则提示登陆失败 (3)用户名为tom,密码为123456 实现#!/bin/bash for i in {1..3} do read -p "请输入用户名:" user read -p "请输入密码:" pass if [ "$user" == 'tom' -a "$pass" == '123456' ];then echo "Login successful" exit fi done echo "Login Failed" 结果
案例二十:显示用户名称分析(1)显示当前计算机中所有账户的用户名称 (2)指定以:为分隔符,打印文件的第一列 (3)使用sed的替换功能,将文件中:后面的所有内容替换为空 实现#!/bin/bash awk -F: '{print $1}' /etc/passwd cut -d: -f1 /etc/passwd sed 's/:.*//' /etc/passwd 结果
案例二十一:显示回旋镖进度分析(1)先从第一个到第二十个符号 (2)再从第二十个回到第一个符号 (3)时间间隔为0.1秒 实现#!/bin/bash while : do clear for i in {1..20} do echo -e "\033[3;${i}H*" sleep 0.1 done clear for i in {20..1} do echo -e "\033[3;${i}H*" sleep 0.1 done clear done 案例二十二:统计进程相关数量信息分析(1)统计Linux进程相关数量信息 (2)在proc目录下所有以数字开始的都是当前计算机正在运行的进程的PID (3)每个PID编号的目录下记录有该进程相关的信息 (4)每个PID目录下都有一个stat文件,该文件的第三列是该进程的状态信息 实现#!/bin/bash running=0 sleeping=0 stoped=0 zombie=0 for pid in /proc/[1-9]* do procs=$[procs +1] stat=$(awk '{print $3}' $pid/stat) case $stat in R) running=$[running+1] ;; T) stoped=$[stoped+1] ;; S) sleeping=$[sleeping+1] ;; Z) zombie=$[zombie+1] ;; esac done echo "进程统计信息如下" echo "总进程数量为:$procs" echo "Running进程数为:$running" echo "Stoped进程数为:$stoped" echo "Sleeping进程数为:$sleeping" echo "Zombie进程数为:$zombie" 结果
案例二十三:判断用户等级分析(1)从键盘读取一个论坛积分,判断论坛用户等级 (2)根据等级分类 实现#!/bin/bash read -p "请输入积分(0-100):" JF if [ $JF -ge 90 ];then echo "$JF分,神功绝世" elif [ $JF -ge 80 ];then echo "$JF分,登峰造极" elif [ $JF -ge 70 ];then echo "$JF分,炉火纯青" elif [ $JF -ge 60 ];then echo "$JF分,略有小成" else echo "$JF分,初学乍练" fi 结果
案例二十四:判读输入的数据类型分析判断用户输入的数据类型,字母数字或其他 实现#!/bin/bash read -p "请输入一个字符:" KEY case "$KEY" in [a-z]|[A-Z]) echo "字母" ;; [0-9]) echo "数字" ;; *) echo "空格、功能键或其他控制字符" esac 结果
案例二十五:打印斐波那契数列分析(1)该数列的特点是后一个数字永远是前2个数字之和 (2)如:0 1 1 2 3 5 8 13 ........ 实现
#!/bin/bash list=(0 1) for i in `seq 2 11` do list[$i]=`expr ${list[-1]} + ${list[-2]}` done echo ${list[@]} 结果
案例二十六: 判断输入的是否分析(1)当输入y、Y、Yes、YES时显示你选择女孩 (2)当输入n、N、NO、no时显示你选择男孩 (3)当输入其他时候显示失败 实现#!/bin/bash read -p "Are you sure?[y/n]:" sure case $sure in y|Y|Yes|YES) echo "you enter girl" ;; n|N|NO|no) echo "you enter boy" ;; *) echo "error";; esac 结果
案例二十七:打印图形分析(1)使用shell脚本打印图形 (2)for (()) 为类C语言的语法格式 实现#!/bin/bash clear for ((i=1;i<=9;i++)) do for ((j=1;j<=i;j++)) do echo -n "$i" done echo "" done read -n1 "按任意键继续" key clear for ((i=1;i<=5;i++)) do for ((j=1;j<=i;j++)) do echo -n " |" done echo "_ " done read -n1 "按任意键继续" key clear for ((i=1;i<=5;i++)) do for ((j=1;j<=i;j++)) do echo -n " *" done echo "" done for ((i=5;i>=1;i--)) do for ((j=1;j<=i;j++)) do echo -n " *" done echo "" done 结果
案例二十八:根据时间返回问候语分析(1)根据计算机当前时间,返回问候语 (2)00-12点为早晨,12-18点为下午,18-24为晚上 (3)使用date命令获取时间 (4)if判断时间的区间,确定问候语内容 实现#!/bin/bash tm=$(date +%H) if [ $tm -le 12 ];then msg="上午好美女" elif [ $tm -gt 12 -a $tm -le 18 ];then msg="下午好美女" else msg="晚上好美女" fi echo "当前时间是:$(date +"%Y-%m-%d %H:%M:%S")" echo -e "\033[34m$msg\033[0m" 结果
案例二十九:将账户写入数组保存分析(1)读取用户输入的账户名称,将账户名写入到数组保存 (2)定义数组名称为name (3)数组的下标为i,小标从0开始,每输入一个账户名,下标加1,继续存下一个 (4)最后输入over,脚本输出总结性信息后脚本退出 实现#!/bin/bash i=0 while : do read -p "请输入账户名,输入over结束:" key if [ $key == "over" ];then break else name[$i]=$key let i++ fi done echo "总帐户名数量:${#name[*]}" echo "${name[@]}" 结果
案例三十: 计算两个整数的和差积商分析传递两个整数给脚本,让脚本分别计算并显示这两个整数的和,差,积,商 实现#!/bin/bash echo "first number $1" echo "second number $2" echo "$(($1+$2))" echo "$[$1-$2]" echo "$[$1*$2]" echo "$[$1/$2]" 结果 |
|