一、if的单分支语法格式:shell
if 条件判断;then 语句1 语句2 …… else 语句1 语句2 …… fi
二、if的多分支语法格式:express
if 条件判断;then 语句1 语句2 …… elif 语句1 语句2 …… elif 语句1 语句2 …… else 语句1 语句2 …… fi
elif能够有多个centos
在“判断条件”这个字段里能够直接写入bash下的命令、也能够写成条件测试bash
在判断条件中要进行条件测试:less
条件测试方式:ide
“[ expression ]”一个中括弧里写表达式,工具
“` expression `”两个中括弧里写上表达式测试
“test expression”spa
“bash命令”ip
条件测试的类型:
整数测试
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:
一、写一个脚原本测试一个用户是否是管理员,若是是管理员则显示“用户名 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
二、写一个脚本测试一个用户的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
三、写一个备份脚本,传递参数“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版本问题。