shell脚本练习
-
用户建立脚本:
写一个名为 users_create.sh 的脚本,建立 userlist 文件列表中的用户,设定 userlist 列表的密码为 passlist 列表中的密码;
当脚本后面跟的文件个数不足两个时,报错;
当userlist和passlist 文件行数不一致时报错;
当文件不存在时报错;当用户存在时报错。
1)首先建立两个文件列表,如下图所示:
2)按要求编写脚本:
3)运行结果:
-
数据库脚本:
编写名为 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
-
系统性能检测脚本:
编辑一个名为check_upload.sh的脚本,要求脚本执行后显示效果如下:
cpu: 实际用量%
mem: 实际用量%
-
用脚本在当前系统中添加一个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