IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Linux自动化运维工程师--(9)shell脚本的练习 -> 正文阅读

[系统运维]Linux自动化运维工程师--(9)shell脚本的练习

Linux自动化运维工程师

实验所用系统为Redhat-rhel8.2。

Linux自动化运维工程师–shell脚本的练习

1、计算当前cpu总占用率

echo  "`ps -eo %cpu | awk 'BEGIN{N=0}!/0.0|%CPU/{N+=$1}END{print N}'`%"

请添加图片描述

2、一分十秒倒计时

  1. 分页显示倒计时
vim time_1min10s.sh						
///
MIN=1
SEC=10
SECS=$[$MIN*60+$SEC]					##计算总秒数
clear
for ((;SECS;SECS--))					##自减一
do
  echo -ne "$[$SECS/60]:$[$SECS%60] "	##用总秒数除以60表示分,对60取余表示秒
  sleep 1
  echo -ne "\r"
done
///

请添加图片描述
请添加图片描述

  1. 在当前页显示倒计时
vim time1_1min10s.sh
///
MIN=1
SEC=10
for ((;SEC>=0;SEC--))
do
  if [ "$SEC" = "0" -a "$MIN" = "0" ]		##如果分和秒都为0则退出
  then
    exit
  elif [ "$SEC" = "0" -a "$MIN" -ge "0" ]	##分为0,秒不为0
  then
    echo -ne "$MIN:$SEC "
    sleep 1
    echo -ne "\r"
    SEC=60
    ((MIN--))
  else
    echo -ne "$MIN:$SEC "					##秒为0,分不为0
    sleep 1
    echo -ne "\r"
  fi
done
///

请添加图片描述

3、猜字游戏:5是幸运数字,大的话报太大,小的话报太小,exit退出。(echo $RANOM 生成随机数)

vim luckynum.sh 
///
NUM=$[$RANDOM%10]
while true
do
  read -p "Please input luch_number: " LUCKNUM
  if [ "$LUCKNUM" = "exit" ]
  then
    exit
  elif [ "$NUM" -gt "$LUCKNUM" ]
  then
    echo "small"
  elif [ "$NUM" -lt "$LUCKNUM" ]
  then
    echo large
  else
    echo $NUM is lusky number
    exit
  fi
done
///

请添加图片描述

4、用户建立脚本

脚本需求如下:
? 执行users_create.sh userlist passlist
? 建立userlist列表中的用户
? 设定userlist列表中的密码为passlist列表中的密码
? 当脚本后面跟的文件个数不足两时,报错
? 当文件行数不一致时报错
? 当文件不存在时报错
? 当用户存在时报错

vim users_create.sh
///
if [ "$#" -lt "2" ]						##如果脚本后面跟的文件个数不足两时,报错
then
  echo "Error: Plesae input userfile or passwordfile following $0 !"
elif [ ! -e "$1" ]						##文件不存在时报错
then
  echo "Errot: $1 is not exist !"
elif [ ! -e "$2" ]						##文件不存在时报错
then
  echo "Errot: $2 is not exist !"
else
  USER_LINE=`awk 'END{print NR}' $1`
  PASS_LINE=`awk 'END{print NR}' $2`
  if [ "$USER_LINE" = "$PASS_LINE" ]	##文件行数一致时
  then
    for LINE in `seq 1 $USER_LINE`
    do
      USER=`sed -n ${LINE}p $1`
      PASSWD=`sed -n ${LINE}p $2`
      id $USER &> /dev/null && {		##用户存在时报错
        echo $USER is exist			
      } || {
        useradd $USER &> /dev/null && {
          echo $PASSWD | passwd --stdin $USER &> /dev/null && {
            echo $USER is created		##不存在时建立并提示建立成功
          }
        }
      }
    done
  else									##文件行数不一致时报错
    echo "Error: $1's lines is different from $2 !"
  fi
fi
///

请添加图片描述
请添加图片描述

5、数据库脚本:

脚本需求如下:

  • 执行db_dump.sh westos(数据库密码)
  • 脚本执行后会备份数据库中的所有库到/mnt/mysqldump目录中
  • 备份文件名称为 “库名称.sql”当此文件存在时报错并询问动作,输入“S”跳过备份,当输入“B"时备份“库名称.sql”文件为“库名称_backup.sql”,当输入“O”时,覆盖原文件。
#!/bin/bash
if [ -z "$1" ]
then
  echo "Please input password for mysql !"
  exit
fi

rpm -q mariadb-server &> /dev/null || {
  dnf install mariadb-server.x86_64 -y 
}

systemctl status mariadb.service | grep "running" &> /dev/null || {
        systemctl start mariadb.service &> /dev/null
}

DBS=`mysql -uroot -p$1 -EN -e "SHOW DATABASES;" 2> /dev/null | grep -vE "row|_schema$"`
##设定DB并且检测数据库密码是否正确 -N 去表头 2> 过滤错误输出
if [ "$?" -ne "0" ]
then
  echo "Error: Wrong password for db !"
else
  mkdir -p /mnt/mysqldump												##建立多层目录
  for DBNAME in $DBS
  do
    if [ ! -e "/mnt/mysqldump/$DBNAME.sql" ]							##如果不存在
    then
      mysqldump -uroot -p$1  $DBNAME > /mnt/mysqldump/$DBNAME.sql		##备份
    else																##如果存在
      echo "/mnt/mysqldump/$DBNAME.sql is exist !"						##显示已存在
      echo "You can do action: [S]kip [B]ackup [O]verwrite [E]xit"		##提示下一步动作
      while true
      do
        read -p "Please input action: " ACTION
        case $ACTION in
          s|S|skip|Skip)												##直接跳过
          break
          ;;
          b|B|backup|Backup)											##将已存在的备份文件改名并重新备份
          mv /mnt/mysqldump/$DBNAME.sql /mnt/mysqldump/${DBNAME}_backup_`date +%m%d%h`.sql
          mysqldump -uroot -p$1 $DBNAME > /mnt/mysqldump/$DBNAME.sql
          break
          ;;
          o|O|overwrite|Overwrite)										##覆盖已存在的备份文件
          mysqldump -uroot -p$1 $DBNAME > /mnt/mysqldump/$DBNAME.sql
          break
          ;;
          e|E|exit|Exit)												##退出
          break
          ;;
          *)
          echo Wrong action !!											##错误指令
          continue
        esac
      done
    fi
  done
fi

请添加图片描述

6、系统性能检测脚本

脚本需求如下:
执行check_upload.sh:
显示效果如下

cpu:	实际用量%
mem:	实际用量%
  • 思路解析:先查询所有进程的cpu,过滤出非0的部分,使用自加的方式得到总和。
vim check_upload.sh
///
echo -e "cpu:\t`ps -eo %cpu | awk 'BEGIN{N=0}!/0.0|%CPU/{N+=$1}END{print N}'`%"
echo -e "mem:\t`ps -eo %mem | awk 'BEGIN{N=0}!/0.0|%CPU/{N+=$1}END{print N}'`%"
///

请添加图片描述

7、用脚本在当前系统中添加一个swap分区

swap分区大小为500M并开机自动激活此分区

#!/bin/bash
[ -z "$1" ] && {									##检测脚本后是否加了设备,没有则退出
  echo "Please input device following swap.sh !"
  exit
}
[ ! -e "$1" ] && {									##检测设备是否存在,不存在则退出
  echo "$1 is not exist !"
  exit
}

/usr/bin/expect  &> /dev/null <<EOF
spawn fdisk $1
expect {
  "Command" { send "n\r";exp_continue }
  "Select (default p)" { send "p\r";exp_continue }
  "Partition number" { send "\r";exp_continue }
  "First sector" { send "\r";exp_continue }
  "Last sector" { send "+500M\r"; }
}
expect {											
  "signature?" { send "yes\r";exp_continue }		##可能出现也可能不出现的提示放在另一个expect里
  "Command" { send "wq\r" }							##重复的指令也放在另一个expect里
}
expect eof
EOF
DEVICE=`fdisk -l /dev/vdb | tail -n 1 | awk '{print $1}'`
DEVICE_NUM=`fdisk -l /dev/vdb | tail -n 1 | awk '{print $1}' | awk -F "/dev/vdb" '{print $2}'`
##过滤设备名称对应的序号,比如/dev/vdb"1"
DEVICE_TYPE=`fdisk -l /dev/vdb | tail -n 1 | awk '{print $1}' | awk '{print $6}'`
##过滤设备类型
if [ "$DEVICE_TYPE" != "82" ]						##如果类型不是swap
then 
/usr/bin/expect &> /dev/null <<EOF
spawn fdisk $1
expect {
  "Command" { send "t\r";exp_continue }				#修改类型命令
  "Partition number" { send "$DEVICE_NUM\r";exp_continue }	##输入设备序号,比如/dev/vdb"1"
  "Hex code" { send "82\r" }						##修改类型为swap
}
expect "Command"									##重复指令写在另一个expect里
send "wq\r"
expect eof
EOF
fi
mkswap $DEVICE										##初始化
grep DEVICE /etc/fstab &> /dev/null					##查看/etc/fstab中是否有设备自启文件
if [ "$?" -ne "0" ]									##如果没有则写入
then 
  echo "$DEVICE swap swap defaults 0 0" >> /etc/fstab
fi

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

8、DNS A记录文件的生成

捕捉十台主机的A记录信息
172.25.254.1-10
当网络畅通,将主机ip和主机名称的对应关系生成到/mnt/hostlist文件中

#!/bin/bash
for IP in 172.25.254.{1..10}
do
  Auto_Ssh()
  {
    /usr/bin/expect <<EOF
    spawn ssh -l root $IP hostname
    expect {
      "yes/no" { send "yes\r";exp_continue }
      "password" { send "westos\r" }
    }
    expect eof
EOF
}
ping -c1 -w1 $IP &> /dev/null && {
  grep $IP /mnt/hostlist &> /dev/null
  if [ "$?" -ne "0" ]
  then
    Auto_Ssh $IP | echo -e "$IP\t `tail -n 1`"  >> /mnt/hostlist	##成功则输出IP和主机名
  fi
  } || {
  grep $IP /mnt/hostlist &> /dev/null
  if [ "$?" -ne "0" ]
  then
    echo -e "$IP\t down" >> /mnt/hostlist							##不成功则输出down
  fi
  }
done

请添加图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:44:38  更:2021-08-29 09:44:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:44:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码