Shell编程基础---逻辑判断、if/case语法

2019独角兽企业重金招聘Python工程师标准>>> Shell编程基础---逻辑判断、if/case语法
文章图片

本文索引:

  • shell脚本中的逻辑判断
  • 文件目录属性判断
  • if特殊用法
  • case判断
Shell脚本中的逻辑判断
if条件语句的三种格式
  • 格式1
# if 语句; then 语句; fi if 条件 then 语句 fi # if [ 3 -gt 2 ]; then echo "ok"; fi # []内需要保持空格

  • 格式2
if 条件 then 语句 else 语句 fi # if [ 3 -gt 2 ]; then echo ok; else echo "not ok"; fi

  • 格式3
if 条件 then 语句 elif 语句 else 语句 fi

使用sh -x 脚本,可以查看执行到哪一步
shell中逻辑判断表达式
# shell中的判断表达式需要使用-gt等代替>等 >-->-gt <-->-lt >=-->-ge <=-->-le ==-->-eq !=-->-ne

多条件
  • 与 &&
if [ $a -gt 4 ] && [ $a -lt 10 ] then echo True else echo False fi

  • 或 ||
if [ $a -gt 10 ] && [ $a -lt 5 ] then echo True else echo False fi

文件目录属性判断
【Shell编程基础---逻辑判断、if/case语法】在shell中,常常需要对文件、目录的权限、是否存在做出判断。
  • 是否是普通文件,且存在 [ -f file ]
  • 是否是目录,且存在 [ -d dir ]
  • 文件或目录是否存在 [ -e file/dir ]
  • 是否可读 [ -r file/dir ]
  • 是否可写 [ -w file/dir ]
  • 是否可执行 [ -x file/dir ]
在上面的-d等前面加上!表示取反,如[ ! -f file ]表示匹配文件不存在
配合&&和||实现代码精简
  • && 在前一个语句执行正确后才会执行后面的操作
[ -f file ] && touch file

  • || 在前一个语句执行失败后才会执行后面的操作
[ -d dir ] || mkdir dir

if特殊用法
  • 判断变量的值是否为空 [ -z "$var" ]
[root@castiel-Lu shell]# var= [root@castiel-Lu shell]# [ -z $var ] && echo empty empty

  • 判断变量的值是否非空 [ -n "$var" ]
[root@castiel-Lu shell]# [ -n $var ] && echo not empty not empty[root@castiel-Lu shell]# if [ -n file1 ]; then echo "file1 is not empty."; fi file1 is not empty.

-z参数无法作用在文件上,只能作用于变量。如果要判断文件是否为空,可以对文件进行行数计算并赋值给新变量:n=`wc -l file`,再对n进行判断即可。
  • 将命令作为判断条件
# grep -q选项可以将过滤结果不进行输出 [root@castiel-Lu shell]# if grep -wq 'root' /etc/passwd; then echo "User root exist."; fi User root exist.# 配合!取反实现另外条件的判断

  • (()) 等同于 []
# shell中可以在(())中进行关系判断,与[]不同的是,(())中使用>等正常表达式,[]中使用不能使用>等,只能使用-gt等替代。 [root@castiel-Lu shell]# if (( 3 > 2 )); then echo True; fi True [root@castiel-Lu shell]# if [ 3 -gt 2 ]; then echo True; fi True

case判断
  • 格式
case 变量名 in value1) command ; ; value2|value3|value4)//可以多个值执行一种命令 command ; ; *) command ; ; esac

  • case实例
# 用户输入一个分数,判断分数是否及格/优秀 #!/bin/bash read -p "Please input a number: " n// 获取用户输入 if [ -z "$n" ]// 判断是否为空 then echo "Please input a number." exit 1// 退出脚本,退出码为1 fin1=`echo $n|sed 's/[0-9]//g'`// 判断是否输入的为全数字 if [ -n "$n1" ] then echo "Please input a number." exit 1 fi// 判断分数位于什么段位 if [ $n -lt 60 ] && [ $n -ge 0 ] // 分数需要大于等于0 then tag=1//tag变量用于后续的case判断 elif [ $n -ge 60 ] && [ $n -lt 80 ] then tag=2 elif [ $n -ge 80 ]&& [ $n -lt 90 ] then tag=3 elif [ $n -ge 90 ] && [ $n -le 100 ] //分数需要小于等于100 then tag=4 else tag=0 fi# 通过对分数进行判断进行输出 case $tag in 1) echo "not good"// 分数在60分以下,打印not good勉励下 ; ; 2) echo "it's ok" // 分数及格了,打印还不错 ; ; 3) echo "good" // 优秀 ; ; 4) echo "great" // 十分优秀 ; ; *) echo "The number range is 0-100."// 超出分数范围 ; ; esac

执行echo $?可以返回上一步执行的退出状态码;使用sh -x命令显示代码运行过程,便于shell的改进。
转载于:https://my.oschina.net/LuCastiel/blog/1619345

    推荐阅读