Linux中shell脚本练习

目录

1.猜数字

2.批量创建用户

3.监控网卡Receive Transmit 数据的变化

4.部署Linux 

5.系统性能检测脚本

6.分区脚本

7.数据库脚本


1.猜数字

随机数的生成

使用环境变量RANDOM,范围是0~32767

编写guest.sh,实现以下功能:
1、随机生成一个1~20的数字;
2、每猜一次都会提示目前数字与随机数的大小关系,直到用户猜对提示成功;
3、当用户输入exit时,退出脚本。

#!/bin/bash
let num=$RANDOM%20
while true
doread -p "Please input lucky number:" dateif [ $date = $num  ]thenecho "yes !!"breakelif [ "$date" = "exit"  ]thenecho "bye!"exitelif [ $date -gt $num  ]thenecho "too big"elseecho "too small"fi
done

 

2.批量创建用户

执行users_create.sh userlist passlist
建立userlist中的用户
设定userlist中的密码为paslist中的密码
当脚本后面跟得文件个数不足两个时报错
当文件行数不一致时报错
当文件不存在时报错
当用户存在时报错

#!/bin/bash
if [ "$#" -lt "2" ]
thenecho "error: 文件不足两个"
elif [ ! -e "$1" ]
thenecho "error: $1 文件不存在"
elif [ ! -e "$2" ]
thenecho "error: $2 文件不存在"
elif [ "`awk 'END{print NR}' $1 `" != "`awk 'END{print NR}' $2 `" ]
thenecho "error: 文件行数不一致"elseLINES=`awk 'END{print NR}' $1 `for LINE in `seq 1 $LINES`doUSERNAME=`sed -n ${LINE}p $1 `PASSWORD=`sed -n ${LINE}p $2 `if id "$USERNAME" &> /dev/nullthenecho "error: $USERNAME 该用户已存在"elseuseradd $USERNAMEecho $PASSWORD | passwd --stdin $USERNAME  &> /dev/nullecho "$USERNAME  $PASSWORD 用户创建成功"fidone
fi

3.监控网卡Receive Transmit 数据的变化

#!/bin/bash
if [ -z "$1"  ]
thenecho Please input net device following $0 !!
elif ifconfig $1 &> /dev/null
thenwhile truedoRS1=$(awk "/$1/{print \$2}" /proc/net/dev)TR1=$(awk "/$1/{print \$10}" /proc/net/dev)sleep 1RS2=$(awk "/$1/{print \$2}" /proc/net/dev)TR2=$(awk "/$1/{print \$10}" /proc/net/dev)echo -ne "Receice: $[$RS2-$RS1]byte/s, Transmit: $[$TR2-$TR1]byte/s"echo -ne "\r"done
elseecho no
fi

4.部署Linux 

1.修改IP

2.添加本机解析

3.修改主机名

#!/bin/bash
if  [ -z "1" ]
thenecho Please input ID following $0 !!
elif echo $1 | grep -E '^[[:digit:]]{1,}$'
thenecho Please input A number following $0 !!hostnamectl set-hostname vm$1echo 192.168.67.$1 vm$1 >> /etc/hostsDEV_COUNT=`nmcli device show | awk 'BEGIN{N=0}/GENERAL.DEVICE/&&!/lo/{N++}END{ print N}'`[ "$DEV_COUNT" -gt "1" ]&&{for DEVICE in `nmcli device show | awk '/GENERAL.DEVICE/&&!/lo/{ print $2}'`doread -p "Do you want set $DEVICE: " STATEcase $STATE inyes|YES|y|Y)read -p "Please input ip address: " IP
cat > /etc/sysconfig/network-scripts/ifcfg-$DEVICE <<EOF
BOOTPROTO=none
NAME=$DEVICE
DEVICE=$DEVICE
ONBOOT=yes
IPADDR=$IP
PREFIX=24
DNS1=114.114.114.114
EOF;;no|NO|n|N);;*)esacnmcli connection reloadnmcli connection up $DEVICEdone
}
fi

5.系统性能检测脚本

执行check_upload.sh
显示效果如下:
cpu 实际用量%
mem 实际用量%

#!/bin/bash
echo cpu  实际用量 $(printf '%0.2f' `ps ax -o %cpu | awk 'BEGIN{CPU=0}{CPU+=$1}END{print CPU}' `)%
echo mem  实际用量 $(printf '%0.2f' `ps ax -o %mem | awk 'BEGIN{MEM=0}{MEM+=$1}END{print MEM}' `)%

 

6.分区脚本

用脚本在当前系统添加一个swap分区
swap分区大小为500M并开机自动激活分区

#!/bin/bash
if [ -z "$1" ]
thenecho "error: please input device for swap"
elif [ "$USER" != "root" ]
thenecho "error: please run $0 with root!!"
else[ ! -b "$1" ] && {echo "$1 is not block device"exit}
fi
/usr/bin/expect <<EOF
spawn  fdisk $1
expect {"Command" {send "n\r"}
}
expect {"Select" { send "\r";exp_continue }"Partition number" { send "\r";exp_continue }"First sector" { send "\r";exp_continue }"Last sector" { send "+500M\r";exp_continue }"signature" { send "yes\r";exp_continue }"Command" { send "wq\r" }}expect eof
EOFfdisk $1 <<EOF
t82
wq
EOFDISK=`fdisk -l $1 | awk 'END{print $1}'`
mkswap $DISKgrep ^$DISK /etc/fstab &&{swapon -a
}  || {echo "$DISK swap swap defaults 0 0 " >> /etc/fstabswapon -a
}

7.数据库脚本

 
执行db_dump.sh westos(数据库密码)
脚本执行后会备份数据库中所有库到 /mnt/mysqldump目录中
备份文件的名称为库名称.sql 当此文件存在时进行如下判断
输入S跳过备份
输入B备份 库名称.sql 到库名称_backup.sql
输入O时,覆盖源文件

#!/bin/bash
if [ "$USER" != 'root' ]
thenecho "Please run $0 with root"
elif [ -z "$1" ]
thenecho "Error : please input db password following $0"
elif  [ -z "`rpm -qa | grep mariadb-server`" ]
thenecho "db server is not installed"
elif [ ! -e "/var/lib/mysql/mysql.sock" ]
thenecho "db server is not runnig"
elseDB_LIST=`mysql -uroot -p$1 -NE -e "SHOW DATABASES;" 2> /dev/null |grep -E "^\*|_schema$" -v`[ "$?" != "0" ] && {echo "ERROR: $1 is wrong password !!"exit 1}
fimkdir -p /mnt/mysqldumpfor DB_NAME in $DB_LIST
doif [ ! -e "/mnt/mysqldump/${DB_NAME}.sql" ]thenmysqldump -uroot -p$1 $DB_NAME >  /mnt/mysqldump/${DB_NAME}.sql && echo ${DB_NAME} is backup to /mnt/mysqldump/${DB_NAME}.sqlelseecho "/mnt/mysqldump/${DB_NAME}.sql is exist"echo "you can do this action: [S]kip  [B]ackup  [O]verwriter"read -p "please input action:" ACTIONcase $ACTION ins|S|Skip|SKIP);;B|b|Backup|BACKUP)mv  /mnt/mysqldump/${DB_NAME}.sql  /mnt/mysqldump/${DB_NAME}_backup.sqlmysqldump -uroot -p$1 $DB_NAME >  /mnt/mysqldump/${DB_NAME}.sql && echo ${DB_NAME} is backup to /mnt/mysqldump/${DB_NAME}.sql;;o|O|Overwriter|OVERWRITER)mysqldump -uroot -p$1 $DB_NAME >  /mnt/mysqldump/${DB_NAME}.sql && echo ${DB_NAME} is backup to /mnt/mysqldump/${DB_NAME}.sql;;*)echo "error:wrong action !!"esacfi
done


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/122660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt配置OpenCV教程,亲测已试过

详细版可参考&#xff1a;Qt配置OpenCV教程&#xff0c;亲测已试过&#xff08;详细版&#xff09;_qt opencv_-_Matrix_-的博客-CSDN博客 软件准备&#xff1a;QtOpenCVCMake (QtOpenCV安装不说了&#xff0c;CMake的安装&#xff0c;我用的是&#xff1a;可参考博客&#x…

记一次 .Net+SqlSugar 查询超时的问题排查过程

环境和版本&#xff1a;.Net 6 SqlSuger 5.1.4.* &#xff0c;数据库是mysql 5.7 &#xff0c;数据量在2000多条左右 业务是一个非常简单的查询&#xff0c;代码如下&#xff1a; var list _dbClient.Queryable<tb_name>().ToList(); tb_name 下配置了一对多的关系…

本地websocket服务端暴露至公网访问【内网穿透】

本地websocket服务端暴露至公网访问【cpolar内网穿透】 文章目录 本地websocket服务端暴露至公网访问【cpolar内网穿透】1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功…

【教3妹学编程-java实战5】结构体字段赋值的几种方式

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 2哥 :3妹&#xff0c;考考你&#xff0c;你知道java结…

基于Java的教室设备管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

Openssl数据安全传输平台017:客户端在Linux上的编译与调试

客户端代码在widows上编译&#xff0c;除了protobuf找不到目录&#xff0c;其他的基本没有什么问题。 然后打开虚拟机&#xff0c;项目文件已经在/home/projects目录下了 进入项目文件&#xff0c;对代码进行编译 第一次 // 找不到protobuf g *.cpp *.cc -ljson -lpthread -…

[NSSCTF 2nd] web刷题记录

文章目录 php签到MyBox非预期解预期解 php签到 源代码 <?phpfunction waf($filename){$black_list array("ph", "htaccess", "ini");$ext pathinfo($filename, PATHINFO_EXTENSION);foreach ($black_list as $value) {if (stristr($ext, …

数据结构【DS】B树

m阶B树的核心特性: Q&#xff1a;根节点的子树数范围是多少&#xff1f;关键字数的范围是多少&#xff1f; A&#xff1a;根节点的子树数∈[2, m],关键字数∈[1, m-1]。 Q&#xff1a;其他结点的子树数范围是多少&#xff1f;关键字数范围是多少&#xff1f; Q&#xff1a;对任…

设计模式:原型模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《访问者模式》 下一篇《享元模式》 简介&#xff1a; 原型模式&#xff0c;它是一种创建型设计模式&#xff0c;它允许通过复制原型对象来创建新的对象&#xff0c;而无需知道创建的细节。其工作原…

当前JavaEE初阶的阶段知识总结

当前JavaEE初阶的阶段知识总结 多线程 文件IO 文件系统操作 ~~ File类. 文件内容操作 ~~ 读文件,写文件. IO 流对象. 流(Stream),形象的比喻,读取文件,就像水流一样,读写文件的时候,和水流类似,读100字节,可以一次读1个字节,100次完成;也可以一次读10个字节,10次完成…… 在…

基于Java的婚纱摄影网站系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

【数据结构】排序算法总结

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 总结 1. 归并排序2. 排序算法复杂度…

飞利浦双串口51单片机485网关

主要功能将PC端的数据接收下来&#xff0c;分发到不同的设备&#xff0c;也是轮询设备数据读取回来&#xff0c;打包回传到PC端&#xff0c;数据包包头包尾识别&#xff0c;数据校验&#xff0c;接收超时处理&#xff0c;将协议结构化处理&#xff0c;协议的改动不需要改动程序…

Python 算法高级篇:图的表示与存储优化

Python 算法高级篇&#xff1a;图的表示与存储优化 引言 1. 什么是图&#xff1f;2. 图的基本概念3. 图的表示方法3.1. 临接矩阵表示临接矩阵的优点&#xff1a;临接矩阵的缺点&#xff1a; 3.2. 邻接表表示邻接表的优点&#xff1a;邻接表的缺点&#xff1a; 4. 优化的存储方法…

【开源】基于SpringBoot的计算机机房作业管理系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登录注册模块2.2 课程管理模块2.3 课时管理模块2.4 学生作业模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 课程表3.2.2 课时表3.2.3 学生作业表 四、系统展示五、核心代码5.1 查询课程数据5.2 新增课时5.3 提交作…

C++初阶--类与对象(2)

文章目录 类的6个默认成员函数构造函数默认构造函数的用处&#xff1a; 析构函数默认析构函数的用处 拷贝构造函数赋值运算符重载取地址及const取地址操作符重载 类的6个默认成员函数 对于一个没有成员的类来说&#xff0c;称之为空类&#xff1b; 但空类并非完全是空的&#…

1024 云上见 · 上云挑战(ChatGPT搭建)

【玩转1024】使用函数计算X通义千问搭建AI助手&#xff0c;参与1024小说创作大赛 【使用函数计算X通义千问搭建AI助手&#xff0c;参与小说创作大赛】&#xff1a;本活动基于函数计算X 通义千问快速部署 AI 个人助手应用&#xff0c;用户可以根据需要选择不同角色的AI助手开启…

Maven配置阿里云中央仓库settings.xml

Maven配置阿里云settings.xml 前言一、阿里云settings.xml二、使用步骤1.任意目录创建settings.xml2.使用阿里云仓库 总结 前言 国内网络从maven中央仓库下载文件通常是比较慢的&#xff0c;所以建议配置阿里云代理镜像以提高jar包下载速度&#xff0c;IDEA中我们需要配置自己…

基础课13——数据异常处理

数据异常是指数据不符合预期或不符合常识的情况。数据异常可能会导致数据分析结果不准确&#xff0c;甚至是错误&#xff0c;因此在进行数据分析之前需要对数据进行清洗和验证。 常见的数据异常包括缺失值、重复值、异常值等。 缺失值是指数据中存在未知值或未定义的值&#…

JAVA:集合框架常见的面试题和答案

1、List接口的常见实现类有哪些&#xff1f; 答&#xff1a; 常见的List接口实现类包括&#xff1a; ArrayList: 基于动态数组实现的List&#xff0c;支持快速随机访问。LinkedList: 基于链表实现的List&#xff0c;支持快速的插入和删除操作。Vector: 一个线程安全的动态数组…