跳转至

Shell语法

变量#

  • $0当前脚本的文件名,注意,$10不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
  • $? 上个命令的退出状态,或函数的返回值。
  • $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。
  • $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2
  • $# 传递给脚本或函数的参数个数。
  • $*以单个字符串显示所有向脚本传递的参数
  • "$@" 传递给脚本或函数的所有参数,但使用是要加双引号
funWithParam(){  
    echo "第一个参数为 $1 !"  
    echo "第二个参数为 $2 !"  
    echo "第十个参数为 $10 !"  
    echo "第十个参数为 ${10} !"  
    echo "第十一个参数为 ${11} !"  
    echo "参数总数有 $# 个!"  
    echo "作为一个字符串输出所有参数 $* !"  
}  
funWithParam 1 2 3 4 5 6 7 8 9 34 73

if#

IF高级特性:

双圆括号(( )):表示数学表达式
在判断命令中只允许在比较中进行简单的算术操作,而双圆括号提供更多的数学符号,而且在双圆括号里面的'>','<'号不需要转意。

双方括号:表示高级字符串处理函数
双方括号中判断命令使用标准的字符串比较,还可以使用匹配模式,从而定义与字符串相匹配的正则表达式。

双括号的作用:
在shell中,[ $a != 1 || $b = 2 ]是不允许出,要用[ a != 1 ] || [ b = 2 ],而双括号就可以解决这个问题的,[[ a != 1 || b = 2 ]]。又比如这个[ "a" -lt "a" -lt "a" -lt "a" -lt "b" ],也可以改成双括号的形式(("b" ],也可以改成双括号的形式(("a" -lt "a" -lt "a" -lt "a" -lt "b" ],也可以改成双括号的形式(("b" ],也可以改成双括号的形式(("a"a" -lt "a" -lt "a" -lt "a" -lt "b" ],也可以改成双括号的形式(("b" ],也可以改成双括号的形式(("a" -lt "a" -lt "a" -lt "a" -lt "b" ],也可以改成双括号的形式(("b" ],也可以改成双括号的形式(("a"
 < "a"
 < "b"))

[ -n STRING ] 如果STRING的长度非零则返回为真,即非空是真
[ -z STRING ] 如果STRING的长度为零则返回为真,即空是真
[ STRING1 ]  如果字符串不为空则返回为真,与-n类似
[ STRING1 == STRING2 ] 如果两个字符串相同则返回为真
[ STRING1 != STRING2 ] 如果字符串不相同则返回为真
[ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面则返回为真。
[ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”后面则返回为真。

case#

#! /bin/sh -
name=`basename $0 .sh`
case $1 in
 s|start)
        echo "start..."
        ;;
 stop)
        echo "stop ..."
        ;;
 reload)
        echo "reload..."
        ;;
 *)
        echo "Usage: $name [start|stop|reload]"
        exit 1
        ;;
esac
exit 0

注意:
1、 ) 相当于其他语言中的default。
2、 除了
)模式,各个分支中;;是必须的,;;相当于其他语言中的break
3、 | 分割多个模式,相当于or