首页 > 代码库 > 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编程之字符测试