shell脚本练习

shell脚本练习

  1. 用户建立脚本:
    写一个名为 users_create.sh 的脚本,建立 userlist 文件列表中的用户,设定 userlist 列表的密码为 passlist 列表中的密码;
    当脚本后面跟的文件个数不足两个时,报错;
    当userlist和passlist 文件行数不一致时报错;
    当文件不存在时报错;当用户存在时报错。
    1)首先建立两个文件列表,如下图所示:
    在这里插入图片描述
    2)按要求编写脚本:
    在这里插入图片描述在这里插入图片描述
    3)运行结果:
    在这里插入图片描述

  2. 数据库脚本:
    编写名为 db_dump.sh 的脚本,脚本后需要写数据库的密码;
    脚本执行后会备份数据库中的所有库到/mnt/mysqldump 目录中;
    备份文件名称为 “库名称.sql",当此文件存在时报错并询问动作,输入 “S“ 跳过备份;
    当输入 “B” 时备份 “库名称.sql” 文件为“库名称_backup.sql”;
    当输入 “o”时,覆盖源文件。

###################################### 
# Author:        lhy
# Create_Time:  2021/03/25
######################################
#!/bin/bash
DB_ACTION()
{
        read -p "Please input your action: " ACTION
        case $ACTION in
                B|b|Backup|backup)
                mv /mnt/mysqldump/$DBNAME.sql /mnt/mysqldump/${DBNAME}_backup.sql
                mysqldump -uroot -p$1 $DBNAME > /mnt/mysqldump/$DBNAME.sql
                ;;
                O|o|Overwrite|overwrite)
                mysqldump -uroot -p$1 $DBNAME > /mnt/mysqldump/$DBNAME.sql
                ;;
                S|s|Skip|skip)
                ;;
                E|e|Exit|exit)
                exit
                ;;
                *)
                echo "Error: Wrong action"
                DB_ACTION $1
        esac
}

[ -z "$1" ] && {
        echo "Error:please input password following $0"
        exit 1
}
rpm -qa mariadb-server &> /dev/null

if [ "$?" -ne "0" ]
then
        echo "Error: DB is not installed"
        exit 1
else
        if [ ! -e "/var/lib/mysql/mysql.sock" ]
        then
                echo "Error:DB is not running"
                exit 1
        else
                CHECK_DB=`mysql -uroot -p$1 -NEe "SHOW DATABASES;" 2> /dev/null`
                [ "$?" -ne "0" ] && {
                        echo "Error:Password is wrong"
                        exit 1
                } || {
                        DB_List=`echo "$CHECK_DB" | awk '!/^*|schemas$/{print}'`
                     }
        fi
fi
if [ ! -e "/mnt/mysqldump" ]
then
        mkdir -p /mnt/mysqldump
elif [ ! -d  "/mnt/mysqldump" ]
then
        echo "Error: /mnt/mysqldump is exit but it is not directory"
        exit 1
fi

for DBNAME in $DB_List
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 "please choose what to do"
                echo "[S]kip  [B]ackup [O]verwrite [E]xit"
                DB_ACTION $1
        fi
done

  1. 系统性能检测脚本:
    编辑一个名为check_upload.sh的脚本,要求脚本执行后显示效果如下:
    cpu: 实际用量%
    mem: 实际用量%
    在这里插入图片描述在这里插入图片描述

  2. 用脚本在当前系统中添加一个swap分区,swap分区的大小为500M ,并且开机自动激活此分区。

###################################### 
# Author:        lhy
# Create_Time:  2021/03/26
######################################
#!/bin/bash
if [ "$USER" != "root" ]
then
	echo "please run $0 with root"
	exit
elif [ "$#" -lt "1" ]
then 
	echo "plesae input device following $0"
	exit
elif [ ! -e "/dev/$1" -a ! -e "$1" ]
then
	echo "$1 is not exist"
	exit
fi

/usr/bin/expect <<EOF &> /dev/null 
spawn fdisk $1
expect {
	"Command" { send "n\r";exp_continue }
	"default p" { send "\r";exp_continue }
	"number" { send "\r";exp_continue }
	"First sector" { send "\r";exp_continue }
	"Last sector" { send "+500M\r";exp_continue }
    "remove" { send "y\r" }

}
expect {
	"Command" { send "wq\r" }
}
expect eof
EOF

/usr/bin/expect <<EOF &> /dev/null
spawn fdisk $1
expect {
        "Command" { send "t\r";exp_continue }
        "number" { send "\r";exp_continue }
        "code" { send "82\r" }
}
expect {
	"Command" { send "wq\r" }
}
expect eof
EOF

[ "$?" = "0" ]
DEV=`fdisk -l $1 | awk 'END{print $1}'`
mkswap $DEV
swapon -a $DEV	##开启swap分区
echo "$DEV   swap    swap    defaults  0 0" >> /etc/fstab
exit

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值