• 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. 多行注释
# 第1种
: '
语句1
语句2
语句3
'
# 第2种
: << 字符  #这里的字符可以是数字或者是任意字符都可以
语句1
语句2
语句3
字符
# 第3种
if false; then
语句1
语句2
语句3
fi
# 第4种
((0)) && {
语句1
语句2
语句3
}