Shell条件测试:
1.数值比较[ 整数1 操作符 整数2 ]
[ 20 -gt 10 ] 大于
[ 1 -lt 10 ] 小于
[1 -eq 1 ] 等于
[1 -ne 5 ] 不等于
[20 -ge 5] 大于等于
[9 -le 10] 小于等于
测试语句:
test 条件表达式
[ 条件表达式 ]
[[ 条件表达式 ]]
输出字符串的长度:echo ${#pass}
比较字符串长度的大小:
aaa=123adf; test ${#aaa} -ge 7;echo $? 非零
aaa=123adf; [ ${#aaa} -ge 7 ];echo $? 非零
aaa=123adf; [[ ${#aaa} -ge 7 ]] ;echo $? 非零
测试用户输入的密码是否满足长度要求:
Vim 1.sh
#!/bin/bash
read -p “请输入您的密码: ” ps
if [ ${#ps} -lt 7 ]
then
echo “您输入的密码太短了”
else
echo “您的密码可真长”
fi
文字测试操作符(普通用户测试)
-f :文件操作符,存在则为真
-d :存在并且是一个目录的时候则为真
-w :存在并且这个目录或文件可写时为真
-b :是否是块文件(/dev/sda就是块文件)
-z :检验长度是否为0,为0为真
-n :检验长度是否不为零,不为0时候为真
id-u root用户为0
id-u 普通用户为1000开外
数值比较:num=$(id-u)
if [ $num -eq 0 ]
then
echo “adminuser”
else
echo”普通用户”
fi
需求:请用户输入备份的路径,如果存在提示已存在,可以备份,如果不存在,提示目录不存在,已创建。
#vim path.sh
#!/usr/bin/bash
read -p “请输入需要备份的目录: ” dir1
if [ -d $dir ]
then
echo “$dir 存在可以备份”
else
echo “$dir 不存在无法备份”
mkdir $dir
echo “$dir 已创建”
fi
字符串比较
需求:邀请用户确认,yes升级装备,no不升级装备
#vim select.sh
read -p “您确认要升级这件装备吗?[yes/no]” select
if [“select”=”yes”]
then
echo “装备开始升级”
else
echo“感谢您,欢迎下次光临”
fi
字符串长度不超7,且包含特殊字符和字母
[ ${#pass} -gt 7 ] && [[ $pass =~ [a-z] ]] && [[ $pass =~ [A-Z] ]]
&& [[ $pass =~ [@_!] ]]
包含大写和小写字母
[[ $pass =~ [a-z] && $pass =~ [A-Z] ]]
长度大于7切小于10
[ ${#pass} -gt 7 -a [${#pass} -lt 10 ]]
双分支结构:
检查uid和gid 是否相同相同输出yes否则no
注:改变gid的命令usermod -g gid 用户
Vim userid.sh
#!/usr/bin/bash
read -p "请输入你要测试的用户: " name
aa=`id -u $name`
bb=`id -g $name`
if [ $aa -eq $bb ]
then
echo "yes"
else
echo "no"
fi
一定要注意使用优先执行,判断直接条件:`id -u $name` 是否等于`id -g $name`
多分支结构
编写脚本,取出系统时间的小时,对数字进行判断
6--10 this is morning
11-13 this is noon
14-18 this is afternoon
其他 this is night
#!/bin/bash
#hour=`date +%H`
if [ $hour -ge 6 -a $hour -le 10 ];then
echo "This is morning"
elif [ $hour -ge 11 -a $hour -le 13 ];then
echo "This is noon"
elif [ $hour -ge 14 -a $hour -le 18 ];then
echo "This is afternoon"
else
echo "This is night"
fi
嵌套结构
本次实验需求:
查看某个用户名,若存在的,询问是否改密码,回答yes,则符合密码的要求的时候就会更改密码,不符合密码则退出。若回答是no则退出。
若不存在用户,提示再次输入密码。符合密码的要求则创用户,赋予密码,
不符合密码的要求则退出 。
#vim useradd.sh
#!/usr/bin/bash
read -p "请输入用户名: " user
if id $user &> /dev/null
then
echo "$user 已存在"
read -p "你想更改密码吗:[yes/no] " select
if [ "$select"="yes" ]
then
read -p "你想要更改的密码: " ps
if [ ${#ps} -gt 7 ]
then
echo "您的密码过长"
exit 1
else
echo "$ps" | passwd --stdin $user &> /dev/null
echo "更改密码完成"
fi
else
exit 2
fi
else
read -p "请输入$user用户您想设置的密码: " pass
if [ ${#pass} -gt 7 ]
then
echo "您的密码过长"
else
useradd $user
echo "$pass" | passwd --stdin $user &> /dev/null
echo "$user 已创建 ,$user的密码是$pass"
fi
fi
case语法结构(字符串比较)
case 变量 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
模式3)
命令序列3
;;
*)
无匹配后命令序列
esac
示例:
不同情况的select问题解决
#!/usr/bin/bash
read -p “请您输入待删除的用户名: ” user
read -p “确认吗?[yes/no] ” select
case $select in
Y|y|yes|YES|Yes)
userdel -r $user
echo “$user 已经删除”
;;
*)
echo “谢谢您,再见”
;;
esac
案例一:简单的跳板服务器

案例二:系统管理工具箱

