shell编程之条件语句和循环语句

条件测试

文件测试与整数测试 字符串测试与逻辑测试

if语句 if单分支语句 if双分支语句 if多分支语句

test命令 ●测试表达式是否成立,若成立返回0,否则返回其他数值 格式1: test 条件表达式 格式2: [条件表达式]

文件测试 [操作符 文件或目录] 常用的测试操作符

  • -d:测试是否为目录(Directory)
  • -e:测试目录或文件是否存在(Exist)
  • -f:测试是否为文件(File)
  • -r:测试当前用户是否有权限读取(Read)
  • -W:测试当前用户是否有权限写入(Write)
  • -x:测试当前用户是否有权限执行(eXcute)
  • -L:测试是否为软连接文件

属性测试补充:

  • -s FILE #是否存在且非空
  • -t fd #fd文件描述符是否在某终端已经打开
  • -N FILE #文件自从上一次被读取之后是否被修改过
  • -0 FILE #当前有效用户是否为文件属主
  • -G FILE #当前有效用户是否为文件属组

条件测试

条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成

测试过程,实现评估布尔声明,以便用在条件性环境下进行执行 若真,则状态码变量$?返回0 若假,则状态码变量$?返回1

条件测试

  • 文件测试与整数测试

  • 字符串测试与逻辑测试 if语句

    if单分支语句

    if双分支语句

    if多分支语句

    case分支语句

文件测试 [操作符 文件或目录] 常用的测试操作符 [root@localhost ~]# [ -d /media/cdrom ] [root@localhost ~]# echo $? 0[root@localhost ~]# [ -d /media/cdrom/Server] [root@localhost ~]# echo $? 1 [root@localhost ~]# [ -d /media/cdrom ] && echo "YES" YES

整数值比较 [整数1操作符整数2]

常用的测试操作符 ●-eq:等于(Equal) ●-ne:不等于(Not Equal) ●-gt:大于(Greater Than) ●-lt: 小于(Lesser Than) ●-le:小于或等于(Lesser or Equal) ●-ge:大于或等于(Greater or Equal)

逻辑测试 格式1:[表达式1]操作符[表达式2]... 格式2:命令1操作符命令2 常用的测试操作符 ●-a或&&:逻辑与, '而且”的意思 ●-o或||:逻辑或, "或者”的意思 !:逻辑否 [root@localhost ~]#[ -d/etc ] && [-r/etc] && echo “You can open it“ [root@localhost ~]#[ -d/etc ] II [-d /home ] && echo“ok“

字符串比较

  • 格式1

[字符串1=字符串2] [字符串1 !=字符串2 ]

  • 格式2

[ -z字符串] 常用的测试操作符

  • =:字符串内容相同
  • !=:字符串内容不同,!号表示相反的意思
  • -z:字符串内容为空

test命令**

  • 测试表达式是否成立,若成立返回0,否则返回其他数值

格式1: test 条件表达式 格式2: [条件表达式]

文件测试 [操作符 文件或目录] 常用的测试操作符 -d:测试是否为目录(Directory)

-e:测试目录或文件是否存在(Exist)

-f:测试是否为文件(File)

-r:测试当前用户是否有权限读取(Read)

-W:测试当前用户是否有权限写入(Write)

-x:测试当前用户是否有权限执行(eXcute)

-L:测试是否为符号链接

整数值比较 [整数1 操作符 整数2] 常用的测试操作符 ●-eq:等于(Equal) ●-ne:不等于(Not Equal) ●-gt:大于(Greater Than) ●-lt:小于(Lesser Than) ●-le:小于或等于(Lesser or Equal) ●-ge:大于或等于(Greater or Equal)

常用的测试操作符 [root@localhost ~]# who | wc -I 7 [root@localhost ~]# [ $(who | wc -I) -gt 5] && echo "Too many.” Too many. [root@localhost ~]# [ $(who | wc-I)-ge 10] && echo "> = 10.“

[root@localhost ~]# FreeCC=$(free -m | grep "Mem: " | awk '{print $4}') [root@localhost ~]# [ $FreeCC -|t 1024 ] && echo ${FreeCC}MB 275MB

字符串比较 格式1: [字符串1=字符串2]或[字符串1==字符串2] [字符串1 != 字符串2 ] 格式2: [-z 字符串] #检查字符串是否为空(Zero) ,对于未定义或赋予空值的变量将视为空串 [-n字符串] #检查是否有字符串存在

常用的测试操作符 ●=:字符串内容相同 ●!=:字符串内容不同,!号表示相反的意思 ●-z:字符串内容为空

[root@localhost ~]# echo $LANG zh_CN.UTF-8 [root@localhost ~]# [ $LANG != ""] && echo "Not " Not

[root@localhost ~]# read -P“是否覆盖现有文件(yes/no) ?”ACK 是否覆盖现有文件(yes/ro) ? yes [root@localhost ~]#[ $ACK = "yes" ] && echo "覆盖" 覆盖

逻辑测试 格式1:[表达式1]操作符[表达式2] 格式2:命令1操作符命 令2

常用的测试操作符 ●-a或&&:逻辑与, "而且”的意思 ●-o或|| :逻辑或,“或者” 的意思 ●!:逻辑否

case多分支语句 [root@localhost~]# #!/bin/bash read -p "请输入-个字符,并按Enter键确认:" KEY case "$KEY" in [a-z]|[A-Z]) echo "您输入的是字母." ;; [0-9]) echo "您输入的是数字." ;; *) echo "您输入的是空格、功能键或其他控制字符." esac