(每天进步一点点-001)bash命令学习-case语法

case $- in
    *i*) ;;
    *) return;;
esac

1. 这是case 指令

2. $- 

在Unix/Linux的Shell脚本中,$- 是一个特殊的变量,用于表示当前shell的一些设置和标志。它包含了当前shell的启动选项(options)。这个变量的值是一个包含一系列字符的字符串,每个字符代表一项选项。

以下是一些常见的选项及其含义:

  • i: 表示shell是交互式的(interactive)。
  • m: 表示shell启动时启用了“监视”(monitor)模式。
  • u: 当变量被引用但未设置时,会报错。
  • x: 启用脚本调试模式,会在执行每个命令之前打印该命令。

例如,如果 $- 的值是 himu,那么它表示当前shell是交互式的,启用了监视模式,当未设置变量时会报错。

3.  *i*)

在Shell的case语句中,*i*) 中的括号 () 不是用于表示任何特殊操作,而是用于定义一个模式(pattern)。在这里,*i* 是一个通配符模式,用于匹配包含字母"i"的任意字符串。

具体解释:

  • *: 这是通配符,表示零个或多个字符。
  • i: 这是普通字符,表示字母 "i"。

因此,*i* 匹配任何包含字母 "i" 的字符串,而括号用于将这个模式组合在一起,告诉Shell这是一个整体的匹配条件。

case语句中,每个模式之间使用 )| 来分隔。在你的例子中,只有一个模式 *i*),它表示匹配任何包含字母 "i" 的字符串。如果这个模式匹配成功,就会执行与之关联的命令(在这里是 ;; 表示什么也不做,直接跳出 case 语句)。

4. ;;

在Shell脚本中,;;case语句中的一个控制流关键字,表示匹配成功后的结束。在上下文中,它用于表示如果case语句中的某个模式匹配成功,就执行相应的操作并退出case块。

具体来说,对于给定的case模式,如果其条件为真,那么执行相应的命令,然后使用;;表示结束该分支。如果没有使用;;,程序将继续执行下一个分支,而不管前一个分支是否匹配成功。

5. case语法简介

case expression in
    pattern1)
        # code to execute if expression matches pattern1
        ;;
    pattern2)
        # code to execute if expression matches pattern2
        ;;
    pattern3|pattern4)
        # code to execute if expression matches either pattern3 or pattern4
        ;;
    *)
        # code to execute if no patterns match
        ;;
esac

简单例子

#!/bin/bash

fruit="apple"

case $fruit in
    "apple")
        echo "It's an apple."
        ;;
    "banana"|"orange")
        echo "It's a banana or an orange."
        ;;
    *)
        echo "It's something else."
        ;;
esac

In this example, the script checks the value of the variable fruit against different patterns and executes the corresponding code block based on the match.

你可能感兴趣的:(bash,学习,开发语言)