一看就会的SHELL语法

        有人说Shell语法很怪,那些字符串,那些分号,写Shell脚本,遇到最多的问题就是语法错误,很打击我们学习Shell脚本的热情。其实Shell脚本的语法是很简单的,就像 Unix系统上一切皆文件,在Shell中则是一切皆命令,我们抱着这个原则,学习Shell脚本,我相信大家会事半功倍。下面是我自己的学习总结,希望对大家有帮助。

Shell学习总结: 一切皆命令,命令之间用换行\n或;分隔,命令的参数以空格区分

  • test condition
        前言: 主要存在 "test" command 和 "[" command 两种测试命令,其中 "["比较特殊 ,"["的参数跟在 “[” 后,以空格分开,最后以 "]" 结束
         章节:

          <Number Test Opt>
                形式:[ ARG1 OP ARG2 ]
                说明:ARG1和ARG2应该是整数或者取值为整数的变量,OP是-eq(等于)-ne(不等于)-lt(小于)-le(小于等于)-gt(大于)-ge(大于等于)之中的一个
                举例:
                        var1=1
                        var2=1
                        [ $var1 -eq $var2 ]
                        echo $?  // 注意,所有的命令的整形返 回值(也就是通过return )只能通过$?获取,其他类型的返回值参考函数章节

          <Logical Test Opt>
                形式:[ ! OP EXPR ]
                说明:EXPR可以是上表中的任意一种测试条件,!表示逻辑反,-a表示逻辑与,-o表示逻辑或
                举例:
                        [ ! $var1 -eq $var2 -a $var1 -lt $var2 ]

          <Other Test Opt>
                说明:
                        [ -d DIR ]     如果DIR存在并且是一个目录则为真
                        [ -f FILE ]    如果FILE存在且是一个普通文件则为真
                        [ -z STRING ]  如果STRING的长度为零则为真
                        [ -n STRING ]  如果STRING的长度非零则为真
                        [ STRING1 = STRING2 ]  如果两个字符串相同则为真
                        [ STRING1 != STRING2 ] 如果字符串不相同则为真
                举例:                    
                    var1=
                    var2="e"
                    [ -z "$var1" -a -f "cmd.sh" ]
                    echo $?
  • if/fi
        if test_condition [\n|;] then
                command1[\n|;]
                command2[\n|;]
        fi
  • for/done
       for entry in LIST[\n|;] do
               command1[\n|;]
               command2[\n|;]
       done
  • while/do/done
        while [ testCondition ]; do
            command1[\n|;]
            command2[\n|;]
        done
  • 常用的位置参数和特殊变量
$0 相当于C语言main函数的argv[0]
$1、$2... 这些称为位置参数(Positional Parameter),相当于C语言main函数的argv[1]、argv[2]...
$# 相当于C语言main函数的argc - 1,注意这里的#后面不表示注释
$@ 表示参数列表"$1" "$2" ...,例如可以用在for循环中的in后面。
$? 上一条命令的Exit Status
$$ 当前Shell的进程号


  • 函数
            [function] Name()
            {
                    command1[\n|;]
                    command2[\n|;]
            }

        总结:
                1、 函数定义中没有返回值也没有参数列表,$0,$1 表示函数参数, return NUMBER 只能返回整数值,用来表示命令执行是否成功,0表示成功,非0表示失败,如果要返回非整数值
                      可以采用将结果输出到标准输出,例如:echo "yellia";

                2、Shell中的函数调用不写括号
                3、Shell脚本中的函数必须先定义后调用
  • 引号
            双引号 ""
                    总结:在 “” 中的字符,除$,`,\外,所有其他的字符都当做普通字符对待
            单引号 ''
                    总结:在‘’中的字符,都是普通字符
            反引号 ``
                    总结:执行一条命令
            反斜线 \
                    总结:屏蔽特殊字符,将其解释为普通字符            













你可能感兴趣的:(shell)