大数据兼云计算(王明龙)讲师-LINUX-DAY20-SHELL-流程控制IF

**

IF判断

**


中括号 if 判断

if 单分支判断
-----------------------------------------------------------------------------
if test或[]
then              为真则执行                    
命令1
命令2
......
fi


if 的else失败分支判断
-----------------------------------------------------------------------------
if test或[]
then             为真则执行
命令1
命令2
......
else             为假则执行
命令1
命令2
......                
fi


举例:全自动新加用户并设置密码
[root@web wml]# cat if1.sh 
#!/bin/bash
c=`cat /etc/passwd | grep root| wc -l`
w=`cat /etc/passwd | grep zxy| wc -l`

pwd_eof()
{
useradd zxy
passwd zxy --stdin << EOF
1q2w3e4r
EOF
}

if [ -f /etc/passwd ]
then
   cat /etc/passwd | grep root
   if [ $c = 0 ]
   then
       echo "os is not user root"
   else
       echo "------------------------"
       echo "os is have user root"

       if [ $w = 0 ]
       then
           pwd_eof
       else
           echo "os is have user wsz"
       fi
   fi
else
   echo "/etc/passwd is not file"
fi




if的elif多重判断语句
-----------------------------------------------------------------------------
if test或[]
then                为真则执行
命令1
命令2
......
elif  test或[]     elif是在如果的意思,上面为假则执行 
then
命令1
命令2
......
else                上面两个都为假则执行
命令1
命令2 
......                
fi


举例:
#!/bin/bash
pw="/etc/passwd"
if [ -d $pw ];then
     cat $pw | wc -l

  elif [ -b $pw ];then
     cp $pw /root
     /usr/bin/ls /root/passwd

  elif [ -f $pw ];then
     head -1 $pw

  else
     echo "$pw is not dircory"
fi






用法:
------------------------------------------------------------------
if [ "a" != "b" ] &&或|| [ 5 -gt 1 ]             各过各的
if [[ "a" != "b" &&或|| "a" = "b" ]]            组成一个家庭

举例:
[ ]           单中括号不能包含两个以上判断条件,如下放在一起,会报错
----------------------------------------------------------------------------------------
[root@wml c]# vim f.sh
#!/bin/bash
if [ 0 -gt 1 && 0 -gt 2 ];then
      echo "0 -gt 1"
elif [ 0 -eq 0 ];then
      echo "0 -eq 0"
elif [ 1 -eq 1 ];then
      echo "1 -eq 1"
else
      echo "two is no"
fi
----------------------------------------------------------------------------------------
[root@wml c]# ./f.sh  
./f.sh: 第 3 行:[: 缺少 `]'
0 -eq 0


[[ ]]        超过两个以上判断,用双中括号,正常执行
------------------------------------------------------------------
#!/bin/bash
if [[ 0 -gt 1 && 0 -gt 2 ]];then
      echo "0 -gt 1"
  if [ 0 -eq 0 ];then
      echo "0 -eq 0"
elif [ 1 -eq 1 ];then
      echo "1 -eq 1"
else
      echo "two is no"
fi
------------------------------------------------------------------
[root@wml c]# ./f.sh  
0 -eq 0


if [ "a" != "b" ] &&或|| [ 5 -gt 1 ]             各过各的
------------------------------------------------------------------
#!/bin/bash

if [ 0 -lt 1 ] || [ 0 -gt 2 ];then
      echo "0 -lt 1"
elif [ 0 -eq 0 ];then
      echo "0 -eq 0"
elif [ 1 -eq 1 ];then
      echo "1 -eq 1"
else
      echo "two is no"
fi
------------------------------------------------------------------
[root@wml c]# ./f.sh  
0 -lt 1



举例:
------------------------------------------------------------------
&&两个其中有一个不成立,则执行else
# vim wml.sh
#!/bin/bash
if [[ "a" != "b" && "a" = "b" ]] 
then
echo ok
else
echo no
fi
# chmod +x wml.sh
# ./wml.sh
    no

&&两个都为真则执行then
# vim wml.sh
#!/bin/bash
if [[ "a" != "b" && "a" = "a" ]] 
then
echo ok
else
echo no
fi
# chmod a+x wml.sh
# ./wml.sh 
    ok


||两个其中有一个成立则执行

# vim wml.sh
#!/bin/bash
if [[ "a" != "b" || "a" = "c" ]] 
then
echo ok
else
echo no
fi
# chmod a+x wml.sh
# ./wml.sh
    ok




() 小括号的 if 判断

单分支if语句格式
-----------------------------------------------------------------------------------------------------------------------------
定义变量=变量值
if ((变量[<,>,=,>=,<=,!=,==]数值)) ;  then            // 其中“!=”为不等于,“==”为等于
   命令序列
fi 
定义变量=变量值
if  [  “$变量”  [<,>,=,>=,<=,!=,==]  ”测试值”  ]


双分支if语式
-----------------------------------------------------------------------------------------------------------------------------
定义变量=变量值
if ((变量[<,>,=,>=,<=,!=,==]数值)) ;  then            // 其中“!=”为不等于,“==”为等于
   命令序列1
else
   命令序列2 
fi

多分支if语句
-----------------------------------------------------------------------------------------------------------------------------
定义变量=变量值
if (( 变量[<,>,=,>=,<=,!=,==]数值));  then            // 其中“!=”为不等于,“==”为等于
   命令序列1
elif ((变量[<,>,=,>=,<=,!=,==]数值)) ;  then          // 其中“!=”为不等于,“==”为等于
   命令序列2
else
   命令序列3 
fi


实例:统计系统中有多少个可登录用户
vim wml.sh
---------------------------------------------------------------
#!/bin/bash
i=`grep /bin/bash$ /etc/passwd |wc  -l`
if (($i<=3)) ; then
   echo "<=3"
elif (($i<=5)) ; then
   echo "<=5"
....可以加更多elif
else
   echo ">3 and >5"
fi


参数判断符
---------------------------------------------------------------------------------------------------
-r file     用户可读为真
-w file     用户可写为真
-x file     用户可执行为真
-f file     文件为正规文件为真
-d file     文件为目录为真
-c file     文件为字符特殊文件为真
-b file     文件为块特殊文件为真
-s file     文件大小非0时为真
-t file     当文件描述符(默认为1)指定的设备为终端时为真
含条件选择的shell脚本 对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。
基本的if条件命令选项有: - eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
-ne —比较两个参数是否不相等
-lt —参数1是否小于参数2
-le —参数1是否小于等于参数2
-gt —参数1是否大于参数2
-ge —参数1是否大于等于参数2
-f — 检查某文件是否存在(例如,if [ -f "filename" ])
-d — 检查目录是否存在

举例:
-------------------------------------------------------
#!/bin/bash
a="/etc/passwd"
if [ -f $a ];then
     cat /etc/passwd > /root/shell/passwd
     ls -l /root/shell/
elif [ -d $a ];then
     touch /root/shell/tjd.txt
else
     date
fi

猜你喜欢

转载自blog.csdn.net/wangminglong1989/article/details/81509428