bash编程之if……else条件判断

1、if的单分支语法格式:

if 条件判断;then
    语句1
    语句2
    ……
else
    语句1
    语句2
    ……
fi

2、if的多分支语法格式:

if 条件判断;then
    语句1
    语句2
    ……
elif
    语句1
    语句2
    ……
elif
    语句1
    语句2
    ……
else
    语句1
    语句2
    ……
fi

elif可以有多个

 

在“判断条件”这个字段里可以直接写入bash下的命令、也可以写成条件测试

在判断条件中要进行条件测试:

条件测试方式:

  • “[ expression ]”一个中括弧里写表达式,

  • “` expression `”两个中括弧里写上表达式

  • “test expression”

  • “bash命令”

条件测试的类型:

  • 整数测试

    expression:[ 数值1 比较符 数值2 ]

    比较符一般有以下几种:

    大于:-gt(greater than),大于等于:-ge(greater equal),小于:-lt(less than),小于等于:le(less equal),不等于:-ne(not equal)

  • 字符测试

    "\>":大于

    "\<":小于

    "=="或者"=":等于

    "=~":判断左边的字符串能否被右边的模式所匹配,通常用于` expression `

    单目测试:

    -z:格式为"[ -z $STRING ]",表示为空值时则为真,不为空值时则为假

    -n:格式为"[ -n $STRING ]",表示为空值时则为假,不为空值时则为真

  • 文件、目录测试

    -d:测试目录是否存在

    -f:测试档案是否存在

组合条件测试:

  • 当有多个测试条件时,我们可以把这些测试条件组合起来使用:

    -a:逻辑与

    -o:逻辑或

    !:逻辑非,这是单目操作

  • 当是bash命令之间组合测试时,则:

    &&:逻辑与

    ||:逻辑或

    !:逻辑非

example:

1、写一个脚本来测试一个用户是不是管理员,如果是管理员则显示“用户名 is admin”,如果是系统用户刚显示“用户名 is system user”,否则显示“用户名 is common user”

#!/bin/bash
#
Uid=`id -u $1 &> /dev/null`
if [ -z $Uid ];then
        echo "No such user $1;"
        exit 8
fi
if [ $Uid -eq '0' ];then
        echo "$1 is admin."
elif [ $Uid -gt '0' -a $Uid -lt '500' ];then //这里用到了逻辑与运算
        echo "$1 is system user."
elif [ $Uid -ge '500' ];then
        echo "$1 is common user."
fi

2、写一个脚本测试一个用户的shell是不是/bin/bash,如果是那输出“用户名 is bash user.”,否则输出“用户名 is no bash user.”

#!/bin/bash
#
Bash=`grep "^$1\>" /etc/passwd | cut -d: -f7`
if [ -z $Bash ];then
        echo "No such user $1."
        exit 9
fi
if [ $Bash == "/bin/bash" ];then
        echo "$1 is bash user."
else
        echo "$1 is not bash user."
fi

3、写一个备份脚本,传递参数“gzip,bzip2,xz”给脚本,让脚本调用相应的压缩工具对备份文件进行压缩,当用户没有给定参数时,则调用gzip进行压缩。把/etc目录下的所有文件归档压缩后备份到/backup目录下,备份的文件名为"etc-日期-时间"的形式,

#!/bin/bash
#
Com=$1
[ -z /backup ] || mkdir /backup &> /dev/null //当无/backup时则建立
if [ -z $Com ];then
        Com=gzip
fi
if [ $Com == 'gzip' ];then
        tar zcf /backup/etc-`date +%F-%H:%M:%S.tar.gz` /etc/* &> /dev/null
        [ $? == 0 ] && echo "Backup etc finished.(gzip)."
elif [ $Com == 'bzip2' ];then
        tar jcf /backup/etc-`date +%F-%H:%M:%S.tar.bz2` /etc/* &> /dev/null
        [ $? == 0 ] && echo "Backup etc finished.(bz2)."
elif [ $Com == 'xz' ];then
        tar Jcf /backup/etc-`date +%F-%H:%M:%S.tar.xz` /etc/* &> /dev/null
        [ $? == 0 ] && echo "Backup etc finished.(xz)."
else
        echo "Usage:`basename $0` {[gzip|bzip2|xz]}"
        exit=7
fi

此脚本在centos5.8上不tar不能调用xz压缩工具进行工作,man tar发现选项里没有“J”选项,但在centos 6.2上能正常工作,应该是tar版本问题。

转载于:https://my.oschina.net/zhuzhaoyong/blog/3069532

你可能感兴趣的:(shell)