TypechoJoeTheme

MetMan's Blog

网站页面

Shell if和case语法

MetMan博 主
2024-04-19
/
0 评论
/
92 阅读
/
381 个字
/
百度已收录
04/19
本文最后更新于 2024年08月02日,已超过 48天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

在学习完前面Shell退出状态和test命令内容后,再来学习if语句就简单了。

if语法如下

if pipeline
then 
    statements1 
[ elif pipeline  #方括号表示可选部分
then 
    statements2 ]
[ else
    statements3 ]
fi

if结构中使用pipeline,可以是

  • 简单的命令组合
  • test命令
  • 管道命令

根据命令的退出状态决定if执行分支。

示例:

if [ -f oldfile ]   # 如果存在文件oldfile
then 
    mv oldfile newfile 
fi

if语句退出状态

整个if/fi结构退出状态是真正执行的语句statements最后一个命令执行退出状态。如果没有命令执行,退出状态为0.

Shell脚本中可以使用:冒号作为占位命令,实际不做任何事。

case语句

判断一个变量可能是多个值情况时,可以使用if/elif/elif/../fi结构来完成,但也可以使用case语句实现,更加简单明了。

题外话:在C语言中switch case语句一般比if语句效率更高,编译器可能会使用表驱动优化技术。

示例:

  • 判断是工作日还是周末
#!/bin/bash

today=${1:-"Mon"}  

case $today in
        "Mon"|"Tues"|"Wed"|"Thurs"|"Fri")
            echo today is weekday
            ;;
        "Sat"|"Sun")
            echo today is weekend
            ;;
        *)
            echo Wrong input
            exit 1
            ;;
esac

可以使用|支持组合多个值,相当于“或”。

可以使用*用于前面条件都不满足情况的处理,相当于"default"。

;;用于满足该条件的执行命令终止符。

  • 下面是一个典型的解析命令行参数的shell脚本示例。
# bash内置命令getopts用于处理命令行参数
# getops optstring name
# 选项后面跟冒号: 表示该选项需要参数,开头加冒号表示允许不支持的参数,脚本仍能正常执行
while getopts ":p:c:y:l:mh" opt; do
  case $opt in  # opt存放getopts解析的选项,OPTARG存放带冒号选项的参数值
    p)
      export PREFIX=$OPTARG
      ;;
    c)
      config=$OPTARG
      ;;
    y)
      yaml=$OPTARG
      ;;
    l)
      library=$OPTARG
      ;;
    m)
      export MODULES=true
      ;;
    h|\?|:)
      usage
      ;;
  esac
done
shellbash
朗读
赞(0)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

MetMan's Blog

本文链接:

https://blog.metman.top/index.php/archives/96/(转载时请注明本文出处及文章链接)

评论 (0)

互动读者

标签云

最新回复

暂无回复

登录
X
用户名
密码