**
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