【问题标题】:Should I be using a case statement or an if/else [closed]我应该使用 case 语句还是 if/else [关闭]
【发布时间】:2020-11-28 02:16:37
【问题描述】:

我正在用 unix 编写一个脚本,它将读取一个文本文件,每条记录有六个字段,由管道分隔。 我不知道我应该使用 case 语句还是 if/else 语句。

  • 如果$JOB 的值为P,则应将NEW_NICE 设置为3
  • 如果$JOB 的值为S,则应将NEW_NICE 设置为6
  • $JOB 的所有其他值应将NEW_NICE 设置为7

我有点想使用 case 语句,因为它会更简单,但我也不确定它会是什么样子。

【问题讨论】:

    标签: shell if-statement unix case


    【解决方案1】:

    我不会告诉你使用哪一个,因为这是一个偏好问题。哪一个都好。让我们进行一些比较购物,以便您可以并排看到它们。

    (最好避免使用全大写的变量名,以免与任何始终为大写的shell 内置变量发生冲突。我在下面使用jobnew_nice。)

    case 语句的外观如下。默认情况下使用*)

    case "$job" in
        P) new_nice=3;;
        S) new_nice=6;;
        *) new_nice=7;;
    esac
    

    这里有两个带有if 语句的版本。在 Bash 中,您可以使用双括号来避免引用 "$job":

    #!/bin/bash
    
    if [[ $job == 'P' ]]; then
        new_nice=3
    elif [[ $job == 'S' ]]; then
        new_nice=6
    else
        new_nice=7
    fi
    

    如果您的目标是纯 sh,那么您必须使用单括号并引用 "$job"

    如果看起来更好,您也可以将else 外壳移到顶部。如果7 是默认值并且36 是不太常见的覆盖,那就太好了。

    #!/bin/sh
    
    new_nice=7
    if [ "$job" = 'P' ]; then
        new_nice=3
    elif [ "$job" = 'S' ]; then
        new_nice=6
    fi
    

    【讨论】:

    • 我个人赞成案例陈述,因为它对我来说更容易理解。非常感谢您的详细解释
    • 在最后一个示例中,最好使用= 而不是== 以与[ 的POSIX 标准化版本兼容。就个人而言,我建议也使用[[ 来养成习惯。
    • @CharlesDuffy 正确,已修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2020-11-02
    • 2017-09-05
    • 2010-11-01
    • 2019-08-20
    相关资源
    最近更新 更多