欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

shell脚本实例分析和实现代码

程序员文章站 2022-09-03 23:50:29
shell脚本练习案例 案例一:通过位置变量创建系统账户及密码 分析 (1)通过位置变量创建 Linux 系统账户及密码 (2)创建用户,111为第一个变量 (3)为用户设置密码,123456为第二个变量 实现 #!/bin/bash useradd "111"echo "123456" | pas ......


案例一:通过位置变量创建系统账户及密码

分析

(1)通过位置变量创建 linux 系统账户及密码

(2)创建用户,111为第一个变量

(3)为用户设置密码,123456为第二个变量

实现

#!/bin/bash
useradd "111"
echo "123456" | passwd --stdin "111"

结果

shell脚本实例分析和实现代码

 

案例二:一键部署 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

结果

shell脚本实例分析和实现代码

 

案例三:监控内存和磁盘容量

分析

(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

结果

shell脚本实例分析和实现代码

 

案例五:检测本机当前用户是否为超级管理员

分析

(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"

结果

shell脚本实例分析和实现代码

 

案例七:输入三个数并进行升序排列 

分析

(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"

结果

shell脚本实例分析和实现代码

 

案例八:石头剪刀布游戏 

分析

通过随机数获取计算机的出拳

实现

#!/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

结果

shell脚本实例分析和实现代码

 

案例九:进度条

分析

(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

结果

shell脚本实例分析和实现代码

 

案例十一: 实时显示数据包流量

分析

使用死循环实时显示 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

结果

shell脚本实例分析和实现代码

 

案例十二: 点名器脚本

分析

(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

结果

shell脚本实例分析和实现代码

 

案例十三: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"

结果

shell脚本实例分析和实现代码

 

案例十四: 打印国际象棋棋盘

分析

(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

结果

shell脚本实例分析和实现代码

 

案例十五: 统计文件个数并显示文件名

分析

(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"

结果

shell脚本实例分析和实现代码

 

案例十六: 查找僵尸进程

分析

(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

结果

shell脚本实例分析和实现代码

 

案例十八: 测试用户名和密码是否正确

分析

(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

结果

shell脚本实例分析和实现代码

 

案例十九:循环测试用户名和密码是否正确

分析

(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"

结果

shell脚本实例分析和实现代码

 

案例二十:显示用户名称

分析

(1)显示当前计算机中所有账户的用户名称

(2)指定以:为分隔符,打印文件的第一列

(3)使用sed的替换功能,将文件中:后面的所有内容替换为空

实现

#!/bin/bash
awk -f: '{print $1}' /etc/passwd
cut -d: -f1 /etc/passwd
sed 's/:.*//' /etc/passwd

结果

shell脚本实例分析和实现代码

 

案例二十一:显示回旋镖进度

分析

(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"

结果

shell脚本实例分析和实现代码

 

案例二十三:判断用户等级

分析

(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

结果

shell脚本实例分析和实现代码

 

案例二十四:判读输入的数据类型

分析

判断用户输入的数据类型,字母数字或其他

实现

#!/bin/bash
read -p "请输入一个字符:" key
case "$key" in
[a-z]|[a-z])
        echo "字母"
        ;;
[0-9])
        echo "数字"
        ;;
*)
        echo "空格、功能键或其他控制字符"
esac

结果

shell脚本实例分析和实现代码

 

案例二十五:打印斐波那契数列

分析

(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[@]}

结果 

shell脚本实例分析和实现代码

 

案例二十六: 判断输入的是否

分析

(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

结果

 shell脚本实例分析和实现代码

 

案例二十七:打印图形 

分析

(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

结果

 shell脚本实例分析和实现代码

 shell脚本实例分析和实现代码

 shell脚本实例分析和实现代码

 

 

案例二十八:根据时间返回问候语

分析 

(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"

结果

shell脚本实例分析和实现代码

 

案例二十九:将账户写入数组保存

分析

(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[@]}"

结果

shell脚本实例分析和实现代码

 

案例三十: 计算两个整数的和差积商

分析

传递两个整数给脚本,让脚本分别计算并显示这两个整数的和,差,积,商

实现

#!/bin/bash
echo "first number $1"
echo "second number $2"
echo "$(($1+$2))"
echo "$[$1-$2]"
echo "$[$1*$2]"
echo "$[$1/$2]"

结果

shell脚本实例分析和实现代码

 转自:https://www.cnblogs.com/tui463/p/12663024.html