linux12shell编程 -->流程if判断1

Posted FikL-09-19

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux12shell编程 -->流程if判断1相关的知识,希望对你有一定的参考价值。

流程控制之if判断

一、单分支if

1、语法

if 条件;then
    要执行的命令1
 	要执行的命令2
    要执行的命令3
    ...
fi

# 上述语法可以用一行代码代替
[ 条件信息 ] && xxx
# 案例
[root@openvpn shell]# cat if1.sh 
# !/bin/
if [ $# -ne 2 ] || [[ ! $1 =~ ^[0-9]+$ ]] || [[ ! $2 =~ ^[0-9]+$ ]];then
    echo  "Usage: $0 arg1 arg2"
    echo "arg1 必须是整型数字"
    echo "arg2 必须是整型数字"

    exit
fi

2、示例

# 案例一
[root@openvpn shell]# cat check_disk.sh 
#! /bin/

use=`df -h | grep "/$" |awk '{print $5}'|cut -d% -f1`

if [ $use -gt 1 ];then
    echo "df: ${use}% warning:Not enough hard disk space"
fi
# 案例二
[root@openvpn shell]# cat ps-aux.sh 
#! /bin/
if ps -aux |grep [s]sh &>/dev/null;then
    echo "sshd is up"

fi

注意:if 测试中还可以执行命令 根据命令的返回值做判断

[root@lb4 yum.repos.d]# if ls ;then echo ok;fi
backup  mm.repo
ok
[root@openvpn /]# if grep -q root /etc/passwd ;then echo Y ;fi
Y

二:双分支if

1、语法

if 条件;then
    要执行的命令1
 	要执行的命令2
    要执行的命令3
    ...
else
    要执行的命令1
 	要执行的命令2
    要执行的命令3
    ...
fi

# 上述语法可以用一行代码代替
[ 条件信息 ] && xxx || xxxx

2、示例

#!/bin/
username='openvpn'
password='123'
read -p 'user: ' name 
read -p 'passwd: ' passwd

if [ $name = $username -a $passwd = $password ];then
    echo 'login successful'
else
    echo 'username or password err'
fi

三:多分支if

1、语法:

if 条件;then
    要执行的命令1
 	要执行的命令2
    要执行的命令3
    ...
elif 条件;then
    要执行的命令1
 	要执行的命令2
    要执行的命令3
    ...
...
else
    要执行的命令1
 	要执行的命令2
    要执行的命令3
    ...
fi

示例1:猜年龄

======================版本1======================
#!/bin/
age=87
read -p 'num: ' n

if [ $n -eq $age ];then
    echo 'you get it'
elif [ $n -gt $age ];then
    echo 'too big'
elif [ $n -lt $age ];then
    echo 'too small'
fi

======================版本2======================
#!/bin/

read -p ">>> " num

[[ ! $num =~ ^[0-9]+$ ]] && echo "请输入数字" && exit

if [ $num -gt 18 ];then
    echo "too big"
elif [ $num -lt 18 ];then
    echo "too small"
else
    echo "you got it"
fi

示例2:查询成绩

======================版本1======================
#!/bin/
read -p 'your score: ' score

if [ $score -ge 90  ];then
    echo '优秀'
elif [ $score -ge 70 -a $score -lt 90 ];then
    echo '良好'
elif [ $score -ge 60 -a $score -lt 70 ];then
    echo '一般'
elif [ $score -lt 60 ];then
    echo '较差'
fi

======================版本2======================
#!/bin/

read -p "your score>>> " score

[[ ! $score =~ ^[0-9]+$ ]] && echo "请输入数字" && exit

if [ $score -ge 90 ];then
    echo "优秀"
elif [ $score -ge 70 ];then
    echo "良好"
elif [ $score -ge 60 ];then
    echo "一般"
else
    echo "较差"
fi

示例3:判断是否是数字

read -p "请输入一个数值: " num

while :
do
        if [[ $num =~ ^[0-9]+$ ]];then
                break
        else
                read -p "不是数字,请重新输入数值: " num
        fi
done

echo "你输入的数字是: $num"

四 、练习

1、编写脚本,命令行传入一个文件路径,判断文件的类型

[root@localhost ~]# cat test_file.sh 
#!/bin/
if [ -d $1 ]
    then
        echo "$1 is directory"
elif [ -b $1 ]
    then
        echo "$1 is block"
elif [ -f $1 ]
    then
        echo "$1 is regular file"
else
        echo 'unknown'
fi
[root@localhost ~]# ./test_file.sh /etc/passwd
/etc/passwd is regular file

2、检测指定的主机是否可以ping通,必须使用$1变量

[root@openvpn test]# cat ping.sh 
#!/bin/

ping -c2 $1 &>/dev/null
if [ $? -eq 0 ];then
    echo "ok"
else
    echo "down"
fi
[root@openvpn test]# chmod +x ping.sh 
[root@openvpn test]# ./ping.sh 10.10.0.1
down
[root@openvpn test]# 

以上是关于linux12shell编程 -->流程if判断1的主要内容,如果未能解决你的问题,请参考以下文章

linux12shell编程 -->流程控制之case

linux12shell编程 -->流程控制之for循环1

linux12shell编程 -->流程if判断2

linux12shell编程 --> 流程控制之select语句

linux12shell编程 -->流程控制之while循环

linux12shell编程 -->流程if判断1