首页 > 代码库 > 19.自学Linux之路:bash条件的逻辑运算与bash编程之字符测试
19.自学Linux之路:bash条件的逻辑运算与bash编程之字符测试
课前复习:求出200以内能被3整除的整除之和
#!/bin/bash declare -i sum=0 for i in {1..200};do if [ $[$i%3] -eq 0 ]; then let sum+=$i fi done echo "The sum is: $sum"
bash的知识点:
给条件测试:对条件做逻辑运算
与:条件1 && 条件2
或:条件1 || 条件2
非:!条件
例:#userName=root
#id $userName && echo "userName exist"
若前者失败,则后者不会执行,因为已经能得到与运算的最终结果
若前者成功,则仍然需要执行后者,判断后者是否为真,才能得到结果
经典的条件判断:#id #userName &> /dev/null && echo "$userName exist" || echo "$userName not exist"
解析:
当条件1满足时,又因为语句2是输出语句,必定为真,所以条件1与语句2为真,再与语句3做或运算,条件3可以不执行。
当条件1不满足时,因为条件1与语句2是与运算,所以没有必要做与运算了,前两个条件为假,此时,必须执行第3个语句。
该命令的效果为:若条件1满足就执行语句2,若条件1不满足,则执行语句3.
bash编程之:字符测试
双目操作符:
>:大于
<:小于
==:左侧是字符串,右侧是一个模式,判定左侧的字符串,能否被右侧的模式所匹配
格式:通常只在[[ ]]使用,模式中可使用行首,行尾锚符等元字符,但模式不能加引号
单目操作符:
-n $stringVar:字符串是否不空,不空为真,空则为假
-z $stringVar:字符串是否为空,空则为真,不空则为假
例:
#stringA="root" #stringB="hello" #[ "$stringA" == "$stringB" ] #echo $? #[ -n "stringA" ]:测试字符串A是否为空 #[[ "$stringA" =~ ot ]]:模式匹配
练习1:判断给定用户是否是shell的某个版本
#userName=root #[[ `grep "^$userName\>" /etc/passwd | cut -d: -f7` =~ sh$ ]] #echo $?
练习2:找出可登陆shell并输出
for userName in `cut -d: -f1 /etc/passwd`; do if [[ `grep "^$userName\>" /etc/passwd | cut -d: -f7` =~ sh$ ]]; then echo "login shell:$userName" else echo "nologin user:$userName" fi done
19.自学Linux之路:bash条件的逻辑运算与bash编程之字符测试