文章目录
- if语句
- if单分支
- 应用案例
- if多分支
- 案例
- for循环
- while循环
- 正则表达式
- 基本正则
- Perl兼容的正则
if语句
if单分支
if单分支的语法组成:
方式一:
if 条件测试;then
命令序列
fi
方式二
if 条件测试
then 命令序列
fi
应用案例
[root@som day01]# vim user_v2.sh
#!/bin/bash
read -p "请输入用户名:" user
read -s -p "请输入密码:" pass
if [ ! -z "$user" ] && [ ! -z "$pass" ];then
useradd "$user"
echo "$pass" | passwd --stdin "$user"
fi
if多分支
- if双分支的语法组成:既可以执行成功的命令,也可以执行失败的命令
if双分支
if 条件测试;then
命令序列1
else
命令序列2
fi
if多分支
if 条件测试1 ;then
命令序列1
elif 条件测试2 ;then
命令序列2
else
命令序列n
fi
案例
[root@som day01]# echo $RANDOM #系统随机生成的数字
[root@som day01]# vim guess_num.sh
#!/bin/bash
clear
num=$[RANDOM%10+1]
read -p "请输入1-10之间的整数:" guess
if [ $guess -eq $num ];then
echo "恭喜你,才猜对了,就是$num"
elif [ $guess -lt $num ];then
echo "Oops,猜小了"
else
echo "Oops,猜大了"
fi
for循环
- 根据变量的不同取值,重复执行命令序列(for循环使用场合,在知道循环次数的时候使用)
for循环的语法结构:第一种格式
for 变量名 in 值列表
do
命令序列
done
案例:
[root@som ~]# cd /root/shell/day01/
[root@som day01]# vim for_demo1.sh
#!/bin/bash
for i in 1 8 ab 99 qq
do
echo "I am $i"
done
for循环的语法结构:第二种格式
for ((初值;条件;步长))
do
命令序列
done
案例:
[root@som day01]# vim for_demo2.sh
#!/bin/bash
for ((i=1;i<=5;i++))
do
echo "I am $i"
done
while循环
反复测试条件,只要成立就执行命令序列(死循环或者条件循环时使用【不知道循环次数时】)
while循环的语法结构:
while 条件测试
do
命令序列
done
案例:
#!/bin/bash
i=1
while [ $i -le 5 ]
do
echo $i
done
死循环语法结构
while :
do
命令序列
done
案例:
#!/bin/bash
num=$[RANDOM%10+1]
while :
do
read -p "请输入1-10之间的整数:" guess
if [ $guess -eq $num ];then
echo "恭喜,猜对了,就是$num."
exit
elif [ $guess -lt $num ];then
echo "Oops,猜小了."
else
echo "Oops,猜大了."
fi
done
正则表达式
- 正则表达式是一种基于字符模式匹配的文本处理工具
基本正则
[root@som ~]# grep root /etc/passwd #查找包含root的行
[root@som ~]# grep ^root /etc/passwd #查找以root开头的行
[root@som ~]# grep bash$ /etc/passwd #查找以bash结尾的行
[root@som ~]# grep "[abc]" /etc/passwd #查找包含a或者b或者c的行
[root@som ~]# grep "[^abc]" /etc/passwd #查找不包含a或者b或者c的其他内容
[root@som ~]# grep . /etc/passwd #查找任意单个字符
[root@som ~]# grep r.*t /etc/passwd #查找以r开头以t结尾的
[root@som ~]# grep "[0-9]*" /etc/passwd #查找包含数字的,*代表任意次
[root@som ~]# grep "[0-9]\{3,4\}" /etc/passwd #查找包含数字3-4次的
[root@som ~]# grep "[0-9]\{3\}" /etc/passwd #查找包含3位数的
扩展正则的使用
[root@som ~]# grep -E "0{2,3}" /etc/passwd #查找0出现2-3次
[root@som ~]# grep -E "[a-z]+" /etc/passwd #查找a-z等字母至少出现一次
[root@som ~]# grep -E "s?bin" /etc/passwd #查找sbin或者bin(?匹配前面的s字符0-1次)
[root@som ~]# grep -E "(root|daemon)" /etc/passwd #查找root或者daemon
[root@som ~]# echo "ababab" | grep ab #查找ab
ababab
[root@som ~]# echo "ababab" | grep -E "(ab)" #查找ab
[root@som ~]# echo "ababab" | grep -E "(ab){2}" #将ab组合,匹配两次
Perl兼容的正则
[root@som ~]# grep -P "bin" /etc/passwd #匹配包含bin的行,只要包含bin字符的都出现
[root@som ~]# grep -P "\bbin\b" /etc/passwd
# \b单词边界,b前面不能有内容,n后面也不能有内容,只匹配bin
[root@som ~]# grep -P "\w" /etc/passwd #查找字母数字下划线
[root@som ~]# grep -P "\W" /etc/passwd #查找不是字母数字下划线部分
[root@som ~]# grep -P "\s" /etc/passwd #查找空白,空格,tab键都算
[root@som ~]# grep -P "\d" /etc/passwd #查找数字
[root@som ~]# grep -P "\D" /etc/passwd #查找非数字