- shell 开发与其他语言的区别项:
区别项 | 说明 |
---|---|
定义变量,变量名前不加美元符号;使用变量,必须在变量名前加美元符号 | |
定义变量时,变量名和等号之间、等号与变量值之间,都不能有空格 | |
表达式和运算符之间要有空格 | |
shell 的流程控制不可为空 | |
关系运算符(-eq、-ne等)只支持数字,不支持字符串,除非字符串的值是数字 | |
字符串运算符(=、!=等) | “=”:检测两个字符串是否相等 |
特变逻辑运算符”[]”,必须保证运算符与算数之间有空格 | |
双括号”(())”运算符,可以取代 [[]]、[]、test、let、expr | |
调用函数仅使用其函数名即可 | |
在函数体内部,通过 ${n} 的形式来获取参数的值。注意:当n>=10时,比较加大括号(使用${n})来获取参数 | |
函数返回值在调用该函数后通过 $? 来获得 |
- 文件描述符
文件描述符 | 含义 |
---|---|
0 | 标准输入(STDIN) |
1 | 标准输出(STDOUT) |
2 | 标准错误输出(STDERR) |
- 双括号”(())”运算符
语法:
((表达式1,表达式2…))
特点:
1、在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等。
2、在双括号结构中,所有变量可以不加入:“$”符号前缀。
3、双括号可以进行逻辑运算,四则运算
4、双括号结构 扩展了for,while,if条件测试运算
5、支持多个表达式运算,各个表达式之间用“,”分开
-
报错:使用
expr index
命令,报错:expr: syntax error
解决:mac 中没有expr index
命令,官方回答:https://discussions.apple.com/thread/923299 -
报错:语句
if test $num1 eq $num2
报错:eq: binary operator expected
解决:关系运算符前面要有分隔符“-” -
shell 中的注释
- 单行注释
# 单行注释
- 多行注释
# 第1种
: '
语句1
语句2
语句3
'
# 第2种
: << 字符 #这里的字符可以是数字或者是任意字符都可以
语句1
语句2
语句3
字符
# 第3种
if false; then
语句1
语句2
语句3
fi
# 第4种
((0)) && {
语句1
语句2
语句3
}