zoukankan      html  css  js  c++  java
  • 第一章 初识shell程序

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

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

        1.1.1 给文件加上x权限

        1.1.2 ./test.sh   

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

        1.2.1 sh test.sh

        1.2.1 和方法1的不同之处在于,这里需要知道shell类型,而方法1可以自己识别shell类型

      1.3 使用source执行文件

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

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

        在脚本执行过程中,并没有进程创建和消亡。当需要修改当前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接口支持的范围内,则可能获得高度

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

  • 相关阅读:
    Codefroces 920F SUM and REPLACE(线段树)
    POJ 2155 Matrix (2维树状数组)
    POJ 3067 Japan (树状数组求逆序对)
    Codeforces 919D Substring (拓扑排序+树形dp)
    拓扑排序
    Codeforces 889F Letters Removing(二分 + 线段树 || 树状数组)
    线段树扫描线(2---算矩形的相交面积)
    线段树扫描线(1---算矩形的总面积)
    hdu 6168 Numbers
    Educational Codeforces Round 27 A B C
  • 原文地址:https://www.cnblogs.com/sangmu/p/6663787.html
Copyright © 2011-2022 走看看