码迷,mamicode.com
首页 > 系统相关 > 详细

第一章 初识shell程序

时间:2017-04-03 22:58:38      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:机器   命令解释   执行文件   env   系统   开发   灵活   优先级   显示   

1.执行shell脚本的三种方法:

  1.1 使文件具有可执行权限,直接运行文件。

    1.1.1 给文件加上x权限

    1.1.2 ./test.sh   

  1.2 直接调用命令解释器执行程序

    1.2.1 source test.sh  或者 . test.sh   点后边有空格

  1.3 使用source执行文件

    这种方式在执行脚本时,不会创建子进程,直接在父进程中执行。而上面两种都会创建子进程执行脚本。

    在脚本执行过程中,并没有进程创建和消亡。当需要修改当前shell本身变量时,使用source命令。

2.linux shell 的命令种类

  2.1 可执行的命令有3种:内建命令、shell函数和外部命令。

    (1)内建命令就是shell程序本身包含的命令,执行这些命令时,没有进程的创建和消亡。

    (2)shell函数是一些列程序代码,以shell语言写成,它可以向其他命令一样被引用。

    (3)外部命令是独立于shell的可执行程序。如find、grep、echo.sh。

3.变量 

  3.1 linux中变量不区分类型和限制大小,都属于字符串。

  3.2 变量分为两分种:局部变量和全局变量

    3.2.1 局部变量在定义时需要用local声明 local aa=10

    3.2.2 环境变量是全局变量的一种,全局变量在全局范围内可见,在定义是不需要声明

      环境变量:在通常的情况下,每个进程都是有自己的“环境”的,这个环境是由一组变量组成,这些变量中存在进程可能需要引用的信息

      定义环境变量:export 

         主要参数: -f  // 代表【变量名称】中为函数名称

             -n  // 删除指定的变量。实际上并没有删除,只是不会输出到后续的执行环境中。

             -p  // 列出所有的shell赋予程序的环境变量

        行为模式: export命令修改当前shell进程的环境变量。若将export命令置于脚本中被调用执行,则export命令对父shell进程的环境变

                          量没有影响。有效期仅维持到当前进程消亡为止,如果想要永久保存,可以将export语句写入shell登录启动文件中。

        bash的启动/登录文件:

              /etc/profile      //系统范围的默认值,大部分用来设置环境

              /etc/bashrc      //特定于bash的,系统范围函数与别名

              $HOME/.bash_profile   //用户定义的,环境默认设置,在每个用户的home目录下都可找到

              $HOME/.bashrc    //用户定义的bash初始化文件,在每个用户的home目录下。只有交互式的shell和用户脚本

                           才读取这个文件

              $HOME/.bash_logout //登录文件,用户定义的指令文件,在每个用户的home目录下。在登录shell的时候会被读取。

      临时定义环境变量:env

         -i  //使shell在执行脚本时,清空所有由父shell继承来的环境变量

         -u //从环境变量中删除一个变量

      set  //查看所有变量,包括本地变量和全局变量

      unset  

        -v  //默认是这个选项,删除变量

        -f  //删除指定的函数

4.常见的环境变量:

  HOME      用户的专属目录,在linux 中用“~”扩展

  PATH       外部命令的搜索路径

  HISTSIZE    保存你是命令的条数

  LOGNAME    当前用户的登录名

  HOSTNAME   是指主机名

  SHELL       当前用户使用的shell类型

  LANG/LANGUAGE语言相关的环境变量

  MAIL      当前用户的邮件存放目录

  PS1       基本提示符,root用户是“#”,普通用户是“$”。也是开头显示的路径

  PS2       附属提示符,默认是“>”

5.linux shell 是解释型语言

  5.1 翻译的方式有两种,一种是编译,另一种是解释。两种方式只是翻译的时间不同,编译型语言在程序执行之前,需要一个专门的编译过程,

      把程序编译成机器语言的文件。

    解释型语言则不同,它是在程序执行时进行翻译。

    许多大中型的程序都是用编译语言写的,如C/C++.JAVA等。这种有点就是高效。缺点是难以执行上一层的一些简单操作,因为编译语言

      运行与机器底层

    脚本语言都是解释性语言。如shell、Python、AWK等。这种执行层面高于编译型语言,因此可以轻松地进行一些高级操作。

6.小结:

  6.1 Linux Shell脚本应该以“#!”开始,这个机子告诉命令行shell应该选择哪个解释器来解释这个脚本。这种机制提供了一种编程规范,提高编

    写脚本的灵活性,例如,你可以选择使用其他语言来编写脚本

  6.2 Linux Shell运行在环境中。环境变量在用户登录启动第一个shell(登录shell)时从启动文件中读取。不同shell的启动文件不相同。环境变

    量在运行过程中可以通过export命令改变。env命令为了运行命令,能够临时创造全新的环境变量。

  6.3 Linux Shell运行时,会创建一个和父进程一模一样的子进程,子进程的环境变量继承父进程。所有子进程中对其环境变量的操作都不会影响

    到父进程。例如,cd命令的执行仅仅改变子进程的环境变量。

  6.4 $PATH是linux的环境变量之一。$PATH往往包含了linux各个可执行文件的所在目录,当shell接受到命令发现此命令为非内部命令,并给出

    了完整路径时,就会一次在$PATH变量中以从前到后的顺序搜寻命令文件,直到找到为止。

  6.5 可以将环境变量的改变用export写入/etc/profile或$HOME/.profile中。后者的优先级高于前者。例如,export PATH=$HOME/bin:$PATH,

    即向$PATH路径中添加$HOME/bin目录,这样,在用户每次登陆的时候都会自动加载环境变量的改变。

  6.6 编译型语言的执行效率高于解释型语言。但是解释型语言在开发的容易度、可移植性和简洁性等方面都高于编译型语言。因为linux shell运行与

    内核之上,因此可以方便地进行一些文件系统的高级操作。具体使用哪种语言,则视程序的需求而定。

  6.7 UNIX/Linux 的shell语言是被广泛使用的脚本语言,常见于系统维护中。如果合理的使用脚本维持在POSIX接口支持的范围内,则可能获得高度

    的可移植性。及时有问题也可以通过很小的改动来完成想要做的事情。

 

第一章 初识shell程序

标签:机器   命令解释   执行文件   env   系统   开发   灵活   优先级   显示   

原文地址:http://www.cnblogs.com/sangmu/p/6663787.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!