Linux中shell脚本练习

news2025/1/18 8:11:07

目录

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
do
        read -p "Please input lucky number:" date
        if [ $date = $num  ]
        then
                echo "yes !!"
                break
        elif [ "$date" = "exit"  ]
        then
                echo "bye!"
                exit
        elif [ $date -gt $num  ]
        then
                echo "too big"
        else
                echo "too small"
        fi
done

 

2.批量创建用户

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

#!/bin/bash
if [ "$#" -lt "2" ]
then
   echo "error: 文件不足两个"
elif [ ! -e "$1" ]
then
   echo "error: $1 文件不存在"
elif [ ! -e "$2" ]
then
   echo "error: $2 文件不存在"
elif [ "`awk 'END{print NR}' $1 `" != "`awk 'END{print NR}' $2 `" ]
then
   echo "error: 文件行数不一致"

else
   LINES=`awk 'END{print NR}' $1 `
   for LINE in `seq 1 $LINES`
   do
        USERNAME=`sed -n ${LINE}p $1 `
        PASSWORD=`sed -n ${LINE}p $2 `
        if id "$USERNAME" &> /dev/null
        then
                echo "error: $USERNAME 该用户已存在"
        else
        useradd $USERNAME
        echo $PASSWORD | passwd --stdin $USERNAME  &> /dev/null
        echo "$USERNAME  $PASSWORD 用户创建成功"
        fi
   done
fi

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

#!/bin/bash
if [ -z "$1"  ]
then
        echo Please input net device following $0 !!
elif ifconfig $1 &> /dev/null
then
        while true
        do
                RS1=$(awk "/$1/{print \$2}" /proc/net/dev)
                TR1=$(awk "/$1/{print \$10}" /proc/net/dev)
                sleep 1
                RS2=$(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
else
        echo no
fi

4.部署Linux 

1.修改IP

2.添加本机解析

3.修改主机名

#!/bin/bash
if  [ -z "1" ]
then
  echo Please input ID following $0 !!
elif echo $1 | grep -E '^[[:digit:]]{1,}$'
then
  echo Please input A number following $0 !!
  hostnamectl set-hostname vm$1
  echo 192.168.67.$1 vm$1 >> /etc/hosts
  DEV_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}'`
  do
        read -p "Do you want set $DEVICE: " STATE
        case $STATE in
           yes|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)
  ;;
  *)
  esac
  nmcli connection reload
  nmcli connection up $DEVICE
  done
}
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" ]
then
     echo "error: please input device for swap"
elif [ "$USER" != "root" ]
then
     echo "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
EOF


fdisk $1 <<EOF
t

82
wq
EOF

DISK=`fdisk -l $1 | awk 'END{print $1}'`
mkswap $DISK

grep ^$DISK /etc/fstab &&{
     swapon -a
}  || {
     echo "$DISK swap swap defaults 0 0 " >> /etc/fstab
     swapon -a
}

7.数据库脚本

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

#!/bin/bash
if [ "$USER" != 'root' ]
then
    echo "Please run $0 with root"
elif [ -z "$1" ]
then
    echo "Error : please input db password following $0"
elif  [ -z "`rpm -qa | grep mariadb-server`" ]
then
     echo "db server is not installed"
elif [ ! -e "/var/lib/mysql/mysql.sock" ]
then
    echo "db server is not runnig"
else
     DB_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
    }
fi

mkdir -p /mnt/mysqldump

for DB_NAME in $DB_LIST
do
  if [ ! -e "/mnt/mysqldump/${DB_NAME}.sql" ]
  then
      mysqldump -uroot -p$1 $DB_NAME >  /mnt/mysqldump/${DB_NAME}.sql && echo ${DB_NAME} is backup to /mnt/mysqldump/${DB_NAME}.sql
  else
      echo "/mnt/mysqldump/${DB_NAME}.sql is exist"
      echo "you can do this action: [S]kip  [B]ackup  [O]verwriter"
      read -p "please input action:" ACTION
      case $ACTION in
      s|S|Skip|SKIP)
      ;;
      B|b|Backup|BACKUP)
      mv  /mnt/mysqldump/${DB_NAME}.sql  /mnt/mysqldump/${DB_NAME}_backup.sql
       mysqldump -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 !!"
     esac
  fi
done
                 


 

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

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

相关文章

AS/400简介

AS400 AS400 简介AS/400操作系统演示 AS400 简介 在 AS400 中&#xff0c;AS代表“应用系统”。它是多用户、多任务和非常安全的系统&#xff0c;因此用于需要同时存储和处理敏感数据的行业。它最适合中级行业&#xff0c;因此用于制药行业、银行、商场、医院管理、制造业、分销…

栈队列OJ练习题(C语言版)

目录 一、括号匹配问题 思路&#xff1a; 完整版C语言代码&#xff1a; 讲解&#xff1a; 二、用队列实现栈 思路&#xff1a; 完整版C语言代码&#xff1a; 讲解&#xff1a; 三、用栈实现队列 思路&#xff1a; 完整版C语言代码&#xff1a; 讲解&#xff1a…

【C++】C++入门(下)--内联函数 auto关键字 nullptr

目录 一 内联函数 1 内联函数概念和定义 2 内联函数特性 二 auto关键字 1 auto概念 2 auto 的使用细则 (1) auto与指针和引用结合起来使用 (2) 在同一行定义多个变量 3 auto不能推导的场景 (1) auto不能作为函数的参数 (2) auto不能直接用来声明数组 4 基于范围的fo…

uniapp实现瀑布流

首先我们要先了解什么是瀑布流&#xff1a; 瀑布流&#xff08;Waterfall Flow&#xff09;是一种常见的网页布局方式&#xff0c;也被称为瀑布式布局或砌砖式布局。它通常用于展示图片、博客文章、商品等多个不同大小和高度的元素。 瀑布流布局的特点是每个元素按照从上到下…

椭圆曲线点加的推导公式

一、点加推导过程 1.1 背景 实数域上的椭圆曲线: y^2 =x^3+ax+b 假设P,Q,R三点的坐标分别为:P(x1,y1),Q(x2,y2),R(x3,-y3),我们这里求的是P+Q,即R的镜像点,因此R坐标为(x3,-y3)。 假设通过点P(x1,y1)点的直线方程L(x)可以表达为:y=k(x-x1)+y1 ,其中,k为直线L(x)的…

.NET CORE 3.1 集成JWT鉴权和授权2

JWT&#xff1a;全称是JSON Web Token是目前最流行的跨域身份验证、分布式登录、单点登录等解决方案。 通俗地来讲&#xff0c;JWT是能代表用户身份的令牌&#xff0c;可以使用JWT令牌在api接口中校验用户的身份以确认用户是否有访问api的权限。 授权&#xff1a;这是使用JWT的…

测绘屠夫报表系统V1.0.0-beta

1. 简介 测绘屠夫报表系统&#xff0c;能够根据变形监测数据&#xff1a;水准、平面、轴力、倾斜等数据&#xff0c;生成对应的报表&#xff0c;生成报表如下图。如需进一步了解&#xff0c;可以加QQ&#xff1a;3339745885。视频教程可以在bilibili观看。 2. 软件主界面 3. …

vue3+ts+threejs 1.创建场景

效果 创建画布容器元素 <script setup lang"ts"> ... // 画布容器 const canvasRef ref<HTMLElement>() const canvasSize ref<{ width: number, height: number }>({width: 0, height: 0})// 监控更新画布尺寸 function handleResize(entry: R…

云笔记一网打尽

二、云笔记产品 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 这么多产品如何选择呢&#xff1f; 2.1、选择注重本地留存的产品 可以看到语雀出事后&#xff0c;网上的文章出场率比较高的有Obsidian和思源笔记。为什么呢&#xff1f;因为它们比较注意…

Go学习第十三章——Gin入门与路由

Go web框架——Gin入门与路由 1 Gin框架介绍1.1 基础介绍1.2 安装Gin1.3 快速使用 2 路由2.1 基本路由GET请求POST请求 2.2 路由参数2.3 路由分组基本分组带中间件的分组 2.4 重定向 1 Gin框架介绍 github链接&#xff1a;https://github.com/gin-gonic/gin 中文文档&#xf…

中颖单片机SH367309全套量产PCM,专用动力电池保护板开发资料

方案总体介绍 整套方案硬件部分共2块板子&#xff0c;包括MCU主板&#xff0c;采用SH79F6441-32作为主处理器。MCU主板包括2个版本。PCM动力电池保护板采用SH367309。 软件方案采用Keil51建立的工程&#xff0c;带蓝牙的版本&#xff0c;支持5~16S电池。 硬件方案--MCU主板 MC…

【用户登录】模块之登录认证+鉴权业务逻辑

用户登录——⭐认证功能的流程图&#xff1a; ⭐鉴权流程图&#xff1a; 用户登录功能的Java代码实现 1. 实体类-User orm框架&#xff1a;JPA Table(name "user_tab") Entity Data NoArgsConstructor AllArgsConstructor public class User implements Serializ…

果蔬购物商城管理与推荐系统Python+Django网页界面+协同过滤推荐算法

一、介绍 果蔬购物管理与推荐系统。本系统以Python作为主要开发语言&#xff0c;前端通过HTML、CSS、BootStrap等框架搭建界面&#xff0c;后端使用Django框架作为逻辑处理&#xff0c;通过Ajax实现前后端的数据通信。并基于用户对商品的评分信息&#xff0c;采用协同过滤推荐…

机器学习---使用 TensorFlow 构建神经网络模型预测波士顿房价和鸢尾花数据集分类

1. 预测波士顿房价 1.1 导包 from __future__ import absolute_import from __future__ import division from __future__ import print_functionimport itertoolsimport pandas as pd import tensorflow as tftf.logging.set_verbosity(tf.logging.INFO) 最后一行设置了Ten…

Spring Security获得认证流程解析(示意图)

建议先看完Spring Security总体架构介绍和Spring Security认证架构介绍&#xff0c;然后从FilterChainProxy的doFilterInternal函数开始&#xff0c;配合文章进行debug以理解Spring Security认证源码的执行流程。 在之前的Spring Security认证架构介绍中&#xff0c;我们已经知…

一文详解汽车电子CAN总线

0.什么是CAN总线 CAN总线(控制器区域网络)是一个中央网络系统&#xff0c;连接不同的电子控制单元(ECU)以及车辆中的其他设备。现在的汽车可以有100个ECU&#xff0c;因此CAN总线通信变得非常重要。 1.CAN总线流行的背景 集中式:CAN总线系统允许对连接到网络的ECU进行集中控制…

Redis快速上手篇七(集群-一台虚拟机六个节点)

​​​​​​http://t.csdnimg.cn/S0NpK与上篇六个虚拟机配置基本一样有不懂可以看上篇配置实例 集群搭建 根据上篇文章&#xff0c;本篇只着重于小方面的配置差别 配置集群一般不要设置密码 1.搭建一台虚拟机后再安装目录下新建文件夹 redis_cluster 2.在文件夹内创建六个文…

python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解

这篇文章主要介绍了python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值&#xff0c;需要的朋友们下面随着小编来一起学习学习吧 JDBC Request 这个 Sampler 可以向数据库…

C# 图解教程 第5版 —— 第11章 结构

文章目录 11.1 什么是结构11.2 结构是值类型11.3 对结构赋值11.4 构造函数和析构函数11.4.1 实例构造函数11.4.2 静态构造函数11.4.3 构造函数和析构函数小结 11.5 属性和字段初始化语句11.6 结构是密封的11.7 装箱和拆箱&#xff08;*&#xff09;11.8 结构作为返回值和参数11…

AK F.*ing leetcode 流浪计划之delaunay三角化

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 本期话题&#xff1a;给定二维点进行delaunay三角化 参考资料&#xff1a; 算法步骤与框架&#xff1a; https://oi-wiki.org//geometry/triangulation/ 空圆性深入解…