转至:https://www.cnblogs.com/tui463/archive/2004/01/13/12663024.html
shell脚本练习案例
案例一:通过位置变量创建系统账户及密码
分析
(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)提取根分区剩余空间
实现
#!/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"
结果
案例七:输入三个数并进行升序排列
分析
实现
#!/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 '-'"c" sleep $INTERVAL ;; "2") echo -e '\'"c" sleep $INTERVAL ;; "3") echo -e "|c" sleep $INTERVAL ;; "4") echo -e "/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 "