第五章·shell编程-if流程控制
if条件语句
if语法单分支
# 写法一:
if [ ];then
cmd1
cmd2
fi
# 写法二:
if [ ]
then
cmd1
cmd2
fi
## 不过单分支,没有必要写if了,直接用条件表达式即可。
[ 条件 ] && {
cmd1
cmd2
if语法双分支
# 写法一:
if [ ];then
cmd1
cmd2
else
cmd1
cmd2
fi
# 写法二:
if [ ]
then
cmd1
cmd2
else
cmd1
cmd2
fi
if语法多分支
# 写法一:
if [ ];then
cmd1
cmd2
elif [ ];then
cmd1
cmd2
else
cmd1
cmd2
fi
# 写法二:
if [ ]
then
cmd1
cmd2
elif [ ]
then
cmd1
cmd2
else
cmd1
cmd2
fi
实战案例
需求: 接收用户输入的用户名和密码进行登录。
- 1.根据
数据库
中的数据判断,如果用户存在则验证密码 - 2.如果密码错误则返回报错
- 3.如果密码正确,则登录成功
- 4.根据
数据库
中的数据判断,如果用户不存在则注册- 1)输入用户名
- 2)输入密码
- 3)确认密码
- 5.如果密码不一致则重新输入
- 6.如果密码一致,则将注册用户保存到
数据库
中
扩展需求:
- 判断用户输入的密码,如果小于8位,则报错
- 判断用户输入的密码,如果没有大小写,则报错
- 判断用户输入的密码,如果没有数字,则报错
- 判断用户输入的用户名,如果用户名以数字开头,则报错
判断用户是否存在,bug,密码和要注册的用户名一致的情况下,就出问题
程序逻辑:
- 登录
输入用户名
输入密码
- 判断用户是否存在
如果用户存在,则验证密码
如果用户不存在,则跳转到注册页面
- 注册页面
需要输入用户名,也需要判断是否存在
如果存在,重新输入用户名
输入注册密码和确认密码
$pass1 == $pass2
$pass1 != $pass2
两次密码不一致,重新输入密码
两次密码一致,将用户写入数据库,跳转到登录页面
#!/bin/bash
read -p '请输入一个密码: ' pass
if [ ${#pass} -lt 8 ];then
echo '密码至少8位'
elif [[ $pass =~ ' ' ]];then
echo '密码中不能包含空格'
elif [[ $pass =~ [0-9] ]] && [[ $pass =~ [a-z] ]] && [[ $pass =~ [A-Z] ]] ;then
echo '注册成功'
else
echo '密码要包含数字,大小写字母'
fi
###### 完整代码
[root@m01 ~]# cat login.sh
#!/bin/bash
. /etc/init.d/functions
user_data_file="/root/user_data.txt"
[ ! -f $user_data_file ] && {
touch $user_data_file
}
login_page (){
cat <<EOF
+------------------+
| 欢迎来到登录界面 |
+------------------+
EOF
}
register_page (){
cat <<EOF
+------------------+
| 欢迎来到注册界面 |
+------------------+
EOF
}
clear
login_page
read -p '用户名: ' user_name
read -p '密码: ' user_pass
[ ${#user_name} -eq 0 -o ${#user_pass} -eq 0 ] && {
echo -e "\e[1;31m Error:\e[0m \e[5;31m用户名和密码不能为空\e[0m"
exit 1
}
user_exists=`awk '{print $1}' $user_data_file | grep -w "$user_name"|wc -l &>/dev/null`
[ $user_exists -eq 0 ] && {
pass=`grep -w "$user_name" $user_data_file |awk '{print $2}'`
[ "$pass" == "$user_pass" ] && {
figlet welcome
action "$user_name login accessful" /bin/true
} || {
echo -e "\n--------- 登录失败 --------"
action "$user_name password is missing" /bin/false
exit 1
}
} || {
echo -e "\n--------- 登录失败 --------"
action "$user_name not exists" /bin/false
clear
register_page
read -p "请输入注册用户名:" register_name
read -p "请输入注册密码:" register_pass1
read -p "请确认注册密码:" register_pass2
grep -w "$register_name" $user_data_file &>/dev/null
[ $? -eq 0 ] && {
echo -e "\n--------- 注册失败 --------"
echo -e "\e[1;31m Error:\e[0m 用户 \e[5;31m[${register_name}]\e[0m 已存在"
} || {
[ $register_pass1 == $register_pass2 ] && {
echo "$register_name $register_pass1" >> $user_data_file
awk '{print $1}' $user_data_file | grep -w "$register_name" &>/dev/null
[ $? -eq 0 ] && {
echo -e "user \e[5;32m[$register_name]\e[0m register successful"
login_page
read -p '用户名: ' user_name
read -p '密码: ' user_pass
pass=`grep -w "$user_name" $user_data_file |awk '{print $2}'`
[ "$pass" == "$user_pass" ] && {
figlet welcome
action "$user_name login accessful" /bin/true
} || {
echo -e "\n--------- 登录失败 --------"
action "$user_name password is missing" /bin/false
exit 1
}
}
} || {
echo -e "\nthe password not match"
echo -e "\n--------- 重新确认密码 --------"
read -p "请输入注册密码:" register_pass1
read -p "请确认注册密码:" register_pass2
[ $register_pass1 == $register_pass2 ] && {
echo "$register_name $register_pass1" >> $user_data_file
}
}
}
}
Comments | NOTHING