shell循环和函数引用
admin
2023-05-27 00:01:20
0
#!/bin/bash
#菜单
function menu(){
echo -e "\t\t\t************************"
echo -e "\t\t\t*       操作数据库     *"
echo -e "\t\t\t************************"
echo -e "\t\t\t* 1、登录数据库        *"   
echo -e "\t\t\t* 2、创建用户或增加权限*"
echo -e "\t\t\t* 3、sql语句操作数据库 *"
echo -e "\t\t\t* 4、更改用户密码      *"
echo -e "\t\t\t* 0、退出              *"
echo -e "\t\t\t************************"
}
#输入mysql的用户名和密码
function input(){
echo -e "\t\t\t请登录数据库"
read -p "请输入mysql用户名:" user
read -s -p "请输入mysql的密码:" passwd
}
#判断输入的用户名密码是否正确
function panduan(){
mysql -u$user -p$passwd -e exit 1>/dev/null 2>&1
if [ $?!= 0 ]
then
echo -e "\n\t\t\t用户名或密码错误,请重新输入!"
input
else
echo -e "\n\t\t\t数据库登录成功!"
fi
}
#创建用户并授权
function createuser(){
echo -e "已存在的用户如下,如果输入的用户已存在,则增加该用户到权限"
mysql -u$user -p$passwd -e "select user,host from mysql.user;"
read -p "请输入要创建的用户名:" newuser
read -s -p "请输入新用户的密码:" newpasswd
echo -e "请输入此用户的主机名(%代表所有的主机都能用此账户访问数据库,具体到某几个主机名中间用英文的逗号隔开,如localhost,192.168.1.1):"
read hostname
echo -e "请输入授予此用户操作数据库的权限(all代表全部,具体到某几个权限中间用英文的逗号隔开,如create,select):" 
read grant
echo -e "请输入授予此用户的访问的库和表的权限(*.*代表全部的库和表,具体到某几个库中间用英文的逗号隔开,如database1.table1,database2.table2):"
read database
mysql -u$user -p$passwd -e "grant $grant on $database to '$newuser'@'$hostname' identified by '$newpasswd';" 2>/tmp/error.txt
if [ -s /tmp/error.txt ]
then
echo -e "\t\t数据库的权限或库名、表名输入错误!"
else
echo -e "\n\t\t\t用户创建成功!"
fi
}
#命令行操作数据库
function orders(){
while true
do
echo -e "\n"
echo -e "请输入mysql语句:"
read order
mysql -u$user -p$passwd -e "$order" 2>/dev/null
if [ $?!=0 ]
then
echo -e "\t\t\tsql语句输入错误!"
fi
done
}
#修改密码
function change(){
echo -e "数据库中已存在的用户如下:"
tuser=`mysql -u$user -p$passwd -e "select distinct User from mysql.user;"|awk '{print $1}'|sed -n '2,$p'`
echo $tuser
while true
do
echo -e "请输入要修改的用户名:"
read cuser
echo -e "请输入新密码"
read -s cpasswd
echo -e "请再次输入新密码"
read -s zpasswd
echo $tuser|grep $cuser>/tmp/tuser.txt
if [ "$cpasswd" = ""$zpasswd"" -a -s /tmp/tuser.txt ]
then
mysql -u$user -p$passwd </tmp/mysql.txt
if [ -s /tmp/mysql.txt ]
then
echo -e "\n\t\t\t用户名或密码错误,请重新输入!"
else
break
fi
done
;;
2)
input
panduan
createuser
;;
3)
input
orders
;;
4)
input
panduan
change
;;
0)
exit 0;;
*)
echo -e "\t\t\t请输入有效数字!"
;;
esac
done


相关内容

热门资讯

演习首日发生意外事故:台空军一... 【环球网报道 记者 徐思琦】据中时新闻网、中天新闻网等台媒8月5日报道,台军所谓“汉光42号演习”首...
奥运冠军陆春龙挂职担任苏州大学... 澎湃新闻记者 岳怀让近日,苏州大学体育学院官网“现任领导”栏目更新信息显示,陆春龙已经挂职担任苏州大...
我国科研人员研发亚10毫秒级神... 来源:环球网 【环球网科技综合报道】8月5日消息,据《科学》(Science)报道称,近日,中国科学...
出生相隔55分钟被抱错,女子错... 面对被医院错换的37年人生,李慧(化名)选择用最朴素的方式,为自己和两个家庭讨一个说法:她把半生艰辛...
Transformer上限触顶... Transformer 的上限在哪里?这个问题从 2022 年 ChatGPT 问世起,就开始被广泛...
华为余承东:手机之后可能都要大... IT之家 8 月 5 日消息,在今天(8 月 5 日)的尊界时代旗舰 MPV 及华为全场景新品发布会...
北方股份获得实用新型专利授权:... 证券之星消息,根据天眼查APP数据显示北方股份(600262)新获得一项实用新型专利授权,专利名为“...
惊险瞬间!巡查人员劝退通行货车... 受强降雨影响,8月5日,国道108秦岭山区段西安马召镇至汉中佛坪方向约20公里处发生山体塌方。在塌方...
美媒爆:检察官皮罗拖着“一箱证... 【环球网报道 记者 李飒】美国首都华盛顿地标建筑林肯纪念堂倒影池改造引发的风波持续发酵。据《纽约时报...
乌方:一支朝鲜导弹部队已向俄罗... 据凤凰卫视报道,乌克兰国家安全局日前表示,在过去40天里对俄罗斯境内100多处战略目标实施打击,包括...