test , [] , [[]]
因为 shell 和我们通常编程语言不同,更多的情况是和它交互,总是调用别人。 所以有些本属于程序语言本身的概念在 shell 中会难以理解。"基本功" 不好, 更容易 "犯困" 了,我就是一个 :-) 。
以 bash 为例 (其他兼容 shell 差不多):
1. test 和 [ 是 bash 的内部命令,GNU/linux 系统的 coreutils 软件包通 常也带 /usr/bin/test 和 /usr/bin/[ 命令。如果我们不用绝对路径指 明,通常我们用的都是 bash 自带的命令。
2. [[ 是 bash 程序语言的关键字!
$ ls -l /usr/bin/[ /usr/bin/test
-rwxr-xr-x 1 root root 37400 9月 18 15:25 /usr/bin/[
-rwxr-xr-x 1 root root 33920 9月 18 15:25 /usr/bin/test
$ type [ [[ test
[ is a shell builtin
[[ is a shell keyword
test is a shell builtin
绝大多数情况下,这个三个功能通用。但是命令和关键字总是有区别的。命令和 关键字的差别有多大呢?
如果是命令,它就和参数组合为一体被 shell 解释,那样比如 ">" "<" 就被 shell 解释为重定向符号了。关键字却不这样。
在 [[ 中使用 && 和 ||
[ 中使用 -a 和 -o 表示逻辑与和逻辑或。
[[ 中可以使用通配符
arch=i486
[[ $arch = i*86 ]] && echo "arch is x86!"
[[ 中匹配字符串或通配符,不需要引号
[[ $arch_com = i386 || $ARCH = i*86 ]] &&
cat >> $TFS_REPO <<EOF
[tfs-i386]
name=GTES11.3 prelim1
baseurl=${BASEURL}i386/
enabled=1
EOF
分享到:
相关推荐
- 在圆括号 `()` 的例子中,虽然 `var` 在子Shell中被修改为 `"notest"`,但在父Shell中仍然是 `"test"`。 - 而在花括号 `{}` 的例子中,`var` 的值在当前Shell中被永久修改为 `"notest"`。 另外还有一些关于圆括号...
### Shell脚本括号的用途...以上是对Shell脚本中括号使用的详细介绍,包括了小括号、中括号和大括号的各种应用场景及其特点。这些括号的不同用法使得Shell脚本具有强大的功能和灵活性,可以用来处理各种复杂的任务。
在Shell脚本编程中,括号有着特殊的意义和作用,主要分为五种类型:小括号()、双小括号(())、中括号([])、双中括号([[]])以及大括号({})。下面将详细介绍每一种括号的作用。 1. **小括号()** - 命令组:圆...
在Shell中,Map的定义需要使用`declare -A`命令。例如: ```bash # 方式1 declare -A myMap myMap["my03"]="03" # 方式2 declare -A myMap=(["my01"]="01" ["my02"]="02") myMap["my03"]="03" myMap["my04"]="04" ...
在Shell脚本中定义函数很简单,通过`function`关键字或者直接写函数名后跟花括号来实现。例如,`factorial.sh`脚本中的`factorial`函数用于计算阶乘。在脚本内部,通过`function factorial`定义函数,然后在函数...
在Shell脚本中,使用export命令可以将变量导出为全局变量,使之在子Shell中也能访问: ```shell export VARIABLE_NAME=value ``` 或者 ```shell declare -x VARIABLE_NAME=value ``` 五、Shell字符串操作 Shell字符...
和[]等在Shell中进行文件名匹配,这对于批量处理文件非常有用。Shell输入与输出章节则介绍了echo、read、cat、管道、tee等命令以及如何使用重定向来控制标准输入输出流。 命令执行顺序章节则涉及了如何使用逻辑...
以下是对Shell脚本数组用法的详细解释: 1. **数组声明**: - 直接赋值:你可以逐个为数组元素赋值,如`array[0]="Zero" array[1]="One" array[2]="Two"`。 - `declare`声明:使用`declare -a array`来创建一个...
- **逻辑运算**:-a(与)、-o(或)在shell中进行逻辑判断,而在方括号[]中使用&&和||。 **6. Test命令和[ ]表达式** - `test`命令和方括号表达式([ ])都可以进行条件测试,它们在很多情况下是等价的,但语法上...
- **`()`**:用于创建子Shell环境,在括号内的命令会在一个新的子Shell中执行。 - **`{}`**:用于创建一组命令,这些命令在一个单一的Shell环境中执行,不会创建新的子Shell。 #### 八、`$(())`、`$()`与`${}`的...
- **变量引用**:在Shell脚本中引用变量时,直接使用变量名即可,但为了避免变量名与普通文本混淆,推荐使用花括号`{}`进行明确界定。 - **示例**:错误的引用方法与正确的引用方法对比: ```bash num=2 echo ...
在Linux环境中,Shell脚本是一种强大的工具,可以用来自动化各种任务。对于初学者来说,创建一个简单的计算器模拟器是学习Shell脚本语法和流程控制的良好起点。在这个"shell模拟实现计算器加减乘除demo"中,我们将...
3. **函数定义**:理解如何在Shell中定义和调用函数,提高代码复用性。 4. **流程控制**:掌握break、continue等流程控制命令,实现复杂逻辑。 三、Unix命令 1. **文本处理命令**:熟悉grep(搜索)、sed(流编辑...
在Linux系统中,shell脚本是自动化任务的强大工具,而`cp`和`mv`命令则是文件管理的核心组件。当这两个命令与大括号扩展`{,}`结合使用时,它们可以极大地提高工作效率,特别是在处理多个相似文件或目录时。大括号...
基础正则表达式是Shell中最基本的一种形式,它适用于大多数简单的文本匹配需求。 1. **通配符**:在Shell中,通配符通常用于文件名的匹配,例如`*`代表任何字符序列,`?`代表单个字符。但在正则表达式中,这些符号...