SHELL脚本

Posted 数字后端设计及CAD流程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SHELL脚本相关的知识,希望对你有一定的参考价值。

      本来想写Makefile的define命令包等内容,可是里面涉及到很多Shell的命令,所以这里先简单介绍一下SHELL脚本的编写。S。本人并没有太多的SHELL脚本经验,大部分脚本还是用tcl/perl写的。所以这里就只简单介绍一些比较重要或常用的东西。至于更深更有用的东西还请大家指教。大家也可以多看看其他书籍。

      我们接触到的Shell主要是两种,一种是BASH,一种是CSH,两者类似,但是却很不一样。我这里不打算对这进行太多区分,感兴趣的可以自己比较一下。

特殊变量$$

      可能大家经常会在terminal敲入bash/csh这个命令。这就好像就是人畜无害的命令一样。岂不知你已经跳入了第N层的bash/csh中。啥?好像不明白?试试在你的terminal下运行下面命令:

      echo $$

      csh

      echo $$

      exit

      echo $$

看看都输出什么结果。$$表示当前的的PID。在某个PID下定义的变量都只能在该PID内使用。PID是个很有用的东西,比如说你要在当前terminal下执行一个程序,这个程序的log文件就可以加入PID来表示这个是某次运行的结果。

SHELL脚本

特殊变量$?


在CSH(注意,这里是CSH)里面运行以下命令(中间不要加任何其他命令)

    aa=bb

    echo $aa

    echo $?

    unset aa

    echo $aa

    echo $?

看到$?返回的结果了么 第一次返回了0,第二次返回了1。这个特殊变量也很有用,其结果就是上次命令的返回值:0表示正常,1表示异常。

SHELL脚本

test 和 []


       一般检测文件是否存在,两个变量是否相等,有两种方法,一种是用[];另一种是用test命令。如下面两图所示,需要注意的是[] 前后都要有空格!

    SHELL脚本

   SHELL脚本

这里-e用来判断文件是否存在,还有很多option:

      -d 判断是否为目录 -nt/-ot用于判断哪个文件更老,例如:

      test afile -nt bfile

      test afile -ot bfile

     数字的比较

     test 3 -gt 2

     test 3 -lt 2

     test 3 -eq 2

     test 3 -ne 2

     还有-a -o 等同于and/or,例如:

    test -r file -a -x file

    即:test -r file and test -x file

    test -r file -o -x file

    即:test -r file or test -x file

    当然还有字符串比较== != =~ !~等等,大家可以多练习练习。


SHELL脚本

if else 流程控制


SHELL脚本

    如上图所示,第一种是最明白的写法。

写法有千千万,但是为了更好阅读,还是建议写成第二种。当然我说的并不是必须这样做,但是建议大家这样做,以避免一些问题。记住“\”后面千万不能加空格!(如果在makefile里面你随便加空格试试看?)


SHELL脚本

case 流程控制


      大家可照着练习练习,更多的用法还是自己多看看书更好。上面提到的只是BASH里的流程控制命令,CSH里的语法与命令不一样。Makefile里的define定义的命令包使用BASH执行的,所以学习好BASH的命令对Makefile编写至关重要。












以上是关于SHELL脚本的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本--变量(后附简单shell脚本案例)!

shell脚本翻译 急求

shell脚本书写方法

如何在shell脚本里调用另一个shell脚本

shell脚本获取参数&在线执行shell脚本

shell脚本中#是啥意思