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中,常常需要对文件、目录的权限、是否存在做出判断。

  • 是否是普通文件,且存在 [ -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
fi

n1=`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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值