shell应用示例

用户建立脚本

执行users_create.sh userlist passlist

建立userlist中的用户

设定userlist中的密码为paslist中的密码

当脚本后面跟得文件个数不足两个时报错

当文件行数不一致时报错

当文件不存在时报错

当用户存在时报错

复制代码
#!/bin/bash

if [ "$#" -lt "2" ]
then
        echo "Please input two files !!"
elif [ ! -e "$1" ]
then
        echo "$1 is not exist !!"
elif [ ! -e "$2" ]
then
        echo "$2 is not exist !!"
elif [ "`awk 'END{print NR}' $1`" != "`awk 'END{print NR}' $2`" ]
then
        echo "$1 lines is different from $2"
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`
                id $USERNAME &> /dev/null &&{
                        echo $USERNAME is exist !!
                }||{
                useradd $USERNAME
                echo $PASSWORD | passwd --stdin $USERNAME &> /dev/null &&{
                echo $USERNAME created successfully
                }
                }
        done
fi

数据库脚本

执行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

系统性能检测脚本

执行check_upload.sh

显示效果如下:

cpu 实际用量%

mem 实际用量%

复制代码
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}' ` )%

分区脚本

用脚本在当前系统添加一个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
}
相关推荐
hweiyu006 分钟前
Linux命令:nmtui
linux
MY_TEUCK16 分钟前
【2026最新Linux虚拟机安装】Linux 虚拟机安装VMware 17 + CentOS 7
linux·运维·centos
Rust研习社23 分钟前
Ubuntu 全面拥抱 Rust 后,我意识到 Rust 社区要变了
linux·服务器·开发语言·后端·ubuntu·rust
Shingmc323 分钟前
【Linux】传输层协议TCP
linux·网络·tcp/ip
再战300年31 分钟前
nginx之负载均衡
运维·nginx·负载均衡
Land032938 分钟前
指纹浏览器自动化集成方案|多浏览器RPA适配实战记录
运维·人工智能·爬虫·python·selenium·自动化·rpa
hahaha 1hhh1 小时前
用SSH 建立了一个本地端口转发隧道,用于安全地访问远程服务器上的服务,后台运行。autodl
服务器·安全·ssh
xcLeigh1 小时前
KES大小写混合路径+国产OS/文件系统兼容实战
linux·数据库·文件系统·兼容性·麒麟·欧拉·kes
霍格沃兹测试学院-小舟畅学1 小时前
浏览器自动化的下一层:为什么 CloakBrowser 把指纹问题推到了源码层?
运维·自动化
YuanDaima20481 小时前
Docker 核心架构与底层技术原理解析
运维·人工智能·docker·微服务·容器·架构·个人开发