shell脚本(二)

之前讲到shell的一些基础知识,这节主要说一下shell中多分支判断if和case。

一.分支判断

1、命令执行是否成功
$?
2、shell内置的判断命令
test 条件表达式   test 5 -gt 3
[]              [ 5 -gt 3 ]     //表达式两边一定要有空格
[[]]        //这两种表达方式有一些细微区别,[[]],大部分的功能跟[]是一样的,
可以简单理解成[]的扩展,但对于参数的判断定义上,比test有更完整的定义,不容易出现[]中的错误

 具体使用:
    1)字符串判断
        -n STRING    —— 字符串非空时结果为真
        -z STRING    —— 字符串为空时结果为真
        STRING1 = STRING2  —— 两个字符串相同时为真
        STRING1 != STRING2 —— 两个字符串不相同时为真
   2)数值比较
        INTEGER1 -eq INTEGER2     —— 判断两个值是否相等
        INTEGER1 -ge INTEGER2    —— 大于等于
        INTEGER1 -gt INTEGER2      —— 大于
        INTEGER1 -le INTEGER2       —— 小于等于
        INTEGER1 -lt INTEGER2       ——  小于
        INTEGER1 -ne INTEGER2     —— 不等于
    3)文件的判断
        -d FILE     —— 文件存在并且是个目录则为真
        -e FILE     —— 文件存在则为真
        -f FILE     —— 文件存在并且是个常规文件则为真
        -s FILE     —— 文件存在并且其大小不为零则为真
    4)其他判断
        -a FILE     -- 文件存在则为真
        -b FILE     -- 文件存在并且是个块设备文件则为真
        -c FILE     -- 文件存在并且是个字符设备文件则为真
        -g FILE     -- 文件存在并且设置了有效组号则为真
        -h FILE     -- 文件存在并且是个符号链接则为真
        -k FILE     -- 文件存在并且设置了"滞留位"则为真
        -p FILE     -- 文件存在并且是个命名管道(FIFO)则为真
        -r FILE     -- 文件存在并且可读则为真
        -t 文件描述符 -- 文件描述符已打开并且指向终端则为真
        -u FILE     -- 文件存在并且设置了有效用户号则为真
        -w FILE     -- 文件存在并且可写则为真
        -x FILE     -- 文件存在并且可执行则为真
        -O FILE     -- 文件存在并且被其有效用户号所拥有则为真
        -G FILE     -- 文件存在并且被其有效组号所有用则为真
        -L FILE     -- 文件存在并且是个符号链接则为真
        -S FILE     -- 文件存在并且是个套接字则为真
        -N FILE     -- 文件存在并且大上次读取过后被修改过则为真
[root@shell ~]# test -e /etc/passwd
[root@shell ~]# echo $?
0
[root@shell ~]# [ -e /etc/passwd ]    //注意空格
[root@shell ~]# echo $?
0            
[root@shell ~]# [ "abcd" = "abcd" ]     //字符串两边要用双引号引上
[root@shell ~]# echo $?
0
3、命令的逻辑运算
逻辑与: &&
逻辑或:  ||
逻辑非:  !

二.if判断的语法结构

注意:if和fi要成对出现
1)最简单的语法
    if 条件表达式或者命令
    then
        命令;
    fi
[root@shell ~]# vim if1.sh
#!/bin/bash
if [ -e /etc/passwd ]
then
    echo "file exists"
fi
[root@shell ~]# sh if1.sh 
file exists
2)分支的if结构语法
    if 条件表达式或者命令           
    then
        命令;
    else
        命令;
    fi
[root@shell ~]# vim if3.sh
#!/bin/bash
read -p "Please input a filename: " filename
if [ -e $filename ]
then
    echo "file $filename exists."
else
    echo "file $filename not exists."
fi
[root@shell ~]# sh if3.sh 
Please input a filename: /etc/passwd
file /etc/passwd exists.
[root@shell ~]# sh if3.sh 
Please input a filename: /etc/douniwan
file /etc/douniwan not exists.
3)多分支if结构语法
    if 条件表达式或者命令
    then
        命令;
        elif 条件表达式或者命令        //elif可以有多个
        then
            命令;
        else
            命令;
    fi
[root@shell ~]# vim if4.sh
#!/bin/bash
read -p "请输入分数:" score
if [ -z $score ]
then
    echo "分数不能为空"
    exit
fi
if [ $score -gt 100 -o $score -lt 0 ] 
#或者 if [[ $score -gt 100 || $score -lt 0 ]]
then
    echo "非法的分数值"
    exit
fi
if [ $score -ge 90 ]
then
    echo "优秀"
    elif [ $score -ge 80 ]
    then
        echo "良好"
    elif [ $score -ge 60 ]
    then
        echo "一般"   
    else
        echo "不及格"
fi
  多重条件判断
  条件表达式1 选项 条件表达式2
  选项:
        -a:并且    &&
        -o:或者    ||
        !条件表达式    :取反,非

条件表达式补充
      [[]]       模式匹配
      (())       数值判断

三.case:多分支判断

语法结构:
case 变量 in
值1)
    命令1
    ;;
值2)
    命令2
    ;;
  ... ...
  ... ...
值n)
    命令n
    ;;
*)
    命令
    ;;
esac
   如果变量的值满足的是 值1,执行命令1;如果不满足,继续执行命令2,... ... *   表示的通配,除了上面所有的值以外的值
[root@shell ~]]# vim case1.sh
#!/bin/bash
read -p "Please input a username: " username
case $username in
root)
    echo "You are super user."
    ;;
oracle)
    echo "You are oracle account."
    ;;
*)
    echo "You are nothing."
    ;;
esac
同时匹配两个变量的方法:
1、将两个变量看成一个整体
[root@shell ~]# vim case3.sh
#!/bin/bash
read -p "Please input your username: " username
read -s -p "Please input your password: " password
case "$username $password" in
"root redhat")
    echo "You are right."
    ;;
"oracle ora")
    echo "You are right for oracle."
    ;;
*)
    echo "You are wrong."
    ;;
esac
2、用任意符号分隔两个变量
    case $username,$password in
    root,redhat)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值