shell相关案例

本文涵盖了从基础到高级的各种Shell脚本案例,包括带颜色的Hello World,创建系统用户,备份日志,LNMP部署,服务器监控,猜数字游戏,VSFT安装检查,排序算法,猜拳游戏,IP状态检测,进度条,九九乘法表,流量监控,数列求和,国际象棋棋盘和文件统计等。这些实例展示了Shell脚本在系统管理和自动化任务中的强大功能。
摘要由CSDN通过智能技术生成

1、带颜色的hello world脚本

#!/bin/bash
#打印输出带颜色的helloword,-e为显示颜色
echo -e "\033[30m===hello world!========\033[0m"
echo -e "\033[31m===hello world!========\033[0m"
echo -e "\033[32m===hello world!========\033[0m"
echo -e "\033[33m===hello world!========\033[0m"
echo -e "\033[34m===hello world!========\033[0m"
echo -e "\033[35m===hello world!========\033[0m"
echo -e "\033[36m===hello world!========\033[0m"
echo -e "\033[37m===hello world!========\033[0m"
echo -e "\033[38m===hello world!========\033[0m"
echo -e "\033[39m===hello world!========\033[0m"
echo -e "\033[40m===hello world!========\033[0m"
echo -e "\033[41m===hello world!========\033[0m"

显示结果如下:
在这里插入图片描述

2、创建系统用户

#!/bin/bash
#使用位置变量创建linux系统账户及密码
# 编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户
# 不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默
# 认的 123456 作为默认密码。

read -p "请输入用户名:" user
if [ -z $user ];then
 echo "必须输入用户名"
 exit
fi
#判断用户是否存在,存在为0,不存在为非0,并将输出的信息(正确、错误)存放到null
id $user &>/dev/null
#判断用户是否存在,存在则退出,不存在则添加
if [ $? != 0 ];then
# echo "用户已存在,将退出"
 read -p  "请输入密码:" -s  pass
 pass=${pass:-123456}
 useradd "$user"
 echo "$pass" | passwd --stdin "$user"
else
 echo "用户已存在,已退出"
fi

=通过文件中的用户名进行创建=

#!/bin/bash

#获取文档中的用户名进行创建用户
for i in `cat user.txt`
do
      useradd $i
     echo "123456" | passwd --stdin $i
done

3、备份日志

#!/bin/bash
#备份日志
tar -czf /root/shellScript/exercise/log/log`date +%Y%m%d`.tar.gz /var/log

4、安装部署lnmp

#!/bin/bash
#安装lnmp
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

5、监控服务器信息,低于一定值发邮件

#!/bin/bash
#监控计算机信内存和磁盘容量,小于部分值并发出警告

#根分区剩余空间
disk_size=$(df  /| awk '/\//{print $4}')
#内存容量
mem_size=$(free | awk '/Mem/{print $4}')
echo "$disk_size ==== $mem_size"
if [[ $disk_size  -lt 51200000 ]] ||  [[ $mem_size -lt  10240 ]]; then
mail -s "Warning" root <<EOF
Insufficient resources,资源不足
EOF
fi

6、猜数字游戏

#!/bin/bash
# 脚本生成一个 100 以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,
# 猜小了或猜大了,直至用户猜对脚本结束。

# RANDOM 为系统自带的系统变量,值为 0‐32767的随机数
# 使用取余算法将随机数变为 1‐100 的随机数
num=$[RANDOM%100+1]
echo "$num"

# 使用 read 提示用户猜数字
# 使用 if 判断用户猜数字的大小关系:‐eq(等于),‐ne(不等于),‐gt(大于),‐ge(大于等于),
# ‐lt(小于),‐le(小于等于)

while :
do
 read -p "计算机生成了一个1-100的随机数,请输入你猜的数字:" cai
 if [ $cai -eq $num ]; then
       echo "恭喜你,猜对了!"
       exit
 elif [ $cai  -lt  $num ];then
        echo "对不起,你猜小了,重新猜一遍"
 else
        echo "对不起,你猜大了,重新猜一遍"
 fi
done

在这里插入图片描述

7、安装vsft,检查管理员才进行安装

#!/bin/bash
#检测本机当前用户是否为root,如果是管理员,则使用 yum 安装vsftpd,如果不是,则提示>您非管理员(使用字串对比版本) 

if [ $USER == "root" ]; then
        yum -y install vsftpd
else
        echo "你不是管理员,严禁安装软件"
fi

8、排序

#!/bin/bash
#对输入的是三个数进行排序,按照从小到达
read -p "请输入第一个整数:" num1
read -p "请输入第二个整数:" num2
read -p "请输入第三个整数:" num3
#将大小进行排序,最后打印num1,num2,num3
tmp=0
#如果num1>num2,将两个数的位置进行调换,确保num1中的数最小
if [ $num1 -gt $num2 ];then
   tmp=$num1
   num1=$num2
   num2=$tmp
fi
#如果num1>num3,将两个数的位置进行调换,确保num1中的数最小
if [ $num1 -gt $num3 ];then
   tmp=$num1
   num1=$num3
   num3=$tmp
fi
#如果num2>num2,将两个数的位置进行调换,确保num2中的数比num3小
if [ $num2 -gt $num3 ];then
   tmp=$num2
   num2=$num3
   num3=$tmp
fi
echo "排序后数据(从小到大)为:$num1, $num2, $num3"

在这里插入图片描述

9、猜拳

#!/bin/bash
#猜拳游戏
game=(石头 剪刀 步)
num=$[RANDOM%3]
computer=${game[$num]}
#通过随机数获取计算机出拳方式
#出拳的可能性在一个数组中,分别为game[0]、game[1]、game[2]三种

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 "你TMD简直是超人,计算机都甘拜下风啦"
        fi;;
3)
      if [ $num -eq 0 ];then
                echo "卧槽,你居然赢啦,不可思议"
        elif [  $num -eq 1 ] ;then
                echo "你认输吧,赢不了计算机的"
        else
                echo "你们和解吧,都太厉害了"
        fi;;
*)
     echo "请遵守游戏规则,不要瞎JB乱搞"
esac

在这里插入图片描述

10、 测试本机网段的所有ip,哪些属于开机、关机状态(使用函数的返回、for循环)

#!/bin/bash
#ping本机网段所有机器,开机处于up,关机处于down
#定义getLocalIP函数,来获取本机ip的前段地址,返回样式为xxx.xxx.xx.
getLocalIP(){
     localIP=$(ifconfig eth0 |awk '/inet /{print $2}')
     localIP=${localIP:0:-2}
     echo $localIP
}

IP=$(getLocalIP)
echo $IP
#循环ping该网段
for i in {1..254}
do
 #每隔0.3s ping一次,设置超时时间为1ms
 ping   -i 0.3 -w 1 $IP$i &>/dev/null
 if [ $? -eq 0 ];then
    echo "$IP$i  is up"
 else
    echo "$IP$i is down"
fi  
done

在这里插入图片描述

11、符号进度条进度条

#!/bin/bash
#进度条,动态版
#定义一个现实进度的函数,屏幕快速显示|/-\
rotate_line(){
INTERVAL=0.5 #间隔时间
COUNT=0 #编号1234分别表示|/-\ ,0不表示任何图形
A=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
A=`expr $A + 1`
if [ $A == 30 ];then
  exit
fi
done
}
rotate_line

动态显示进度

12、九九乘法表

#!/bin/bash
#九九乘法表
for i in `seq 9`
do
     for j in `seq $i`
     do
         echo -n "$i*$j=$[i*j] "
     done
     echo
done

在这里插入图片描述

13、 循环监测本地流量信息

#!/bin/bash
#循环监测eth0网卡发送的数据包流量
while :
do
     echo "本地网卡eth0 流量信息如下:"
     ifconfig eth0  |awk '/RX pack/{print $5}'
     ifconfig eth0  |awk '/TX pack/{print $5}'
     sleep 1
done

在这里插入图片描述

14、计算1-100内的和

#!/bin/bash
#计算1-100以内的前n项和
sum=0
#for i in {1..100}
for i in `seq 100`
do
#sum=$[sum+i]
let sum+=i
done
echo "总和为:$sum"

在这里插入图片描述

15、国际象棋棋盘

#!/bin/bash
#打印国际象棋盘,8*8,i+j偶数,则为蓝色,否则为灰色

for i in `seq 8`
do
 for j in `seq 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

在这里插入图片描述

16、统计某个目录下的文件,并输出文件名

#!/bin/bash
#统计/root/shellScript/exercise/下文件个数,并输出文件名
cd /root/shellScript/exercise/
sum=0
for i in `ls -r `
do 
  if [ -f $i ];then
     let sum++
     echo "文件名:$i"
  fi
done
echo "文件总数为:$sum"

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值