• 第48天-shell(2013.09.25)


      1.python 皮冻  perl   php

      2.shell的作用是解释执行用户的命令,(交互式)

      3.UNIX系统上的很多种shell:

          (1).sh(bourne shell) : 由Steve Bourne开发,各种UNIX系统都配有sh

          (2).csh(C shell):  由Bill joy开发,随BSD UNIX 发布,它的流程控制语句很像C语言,支持很多Bource Shell所不支持的功能 : 作业控制,命令历史,命令行编辑

          (3). ksh(Korn shell) : 由David Korn开发,向后兼容sh的功能,并且添加了csh引入的新功能

          (4).tcsh(TENEX C shell): 是csh的加强版本, 引入了命令补全等功能,在FreeBSD, Mac, OS X等系统上替代了csh

          (5).bash : 由GNU开发的shell,主要目标是与POSIX标准保持一致,同时兼顾对sh的兼容。

              bash和sh的不同 :一方面, bash扩展了一些命令和参数,另一方面bash并不完全兼容sh, 所以bash需要模拟sh的行为:当我们通过sh这个程序名启动bash时,bash可以假装自己是sh,不认扩展的命令,并且行为和sh保持一致。

      4.shell执行交互式命令。

          一般情况下shell会fork并exec该命令。

          内建命令除外,执行内建命令时相当于shell进程中的一个函数的调用,并不创建新的进程,例如:cd,alias , umask, exit

          小提示 :凡是which命令查不到程序文件所在位置的命令都是内建命令。  查看内建命令应该 :man bash-builtins

      5.shell脚本中使用#表示注释。但如果#位于第一行开头,并且是#!则例外 :表示该脚本使用后面指定的解释器解释执行

      6. 对于命令 : 手动输入时,,内建是内建,普通是普通

            写成脚本之后,内建变普通  

            写成脚本之后,使用source或'.'执行脚本,内建是内建,普通是普通

      7.命令行下输入命令用()括起来,会fork出一个子进程,多个命令使用 ";"隔开

      8.shell变量由全大写字母加下划线组成,由两种类型的shell变量:

            环境变量 : 可以从父进程传到子进程,可以使用printenv命令显示当前shell进程的环境变量

            本地变量 : 只存在于当前shell进程,用set命令可以显示当前shell进程中定义的所有变量(本地变量和环境变量)和函数     

      9.shell中定义和赋值一个变量: VNRNAME=value :注意等号两边都不能有空格,否则会被shell解释成命令和命令行参数。

        一个变量定义后仅存在于当前shell进程,是本地变量,可以使用export命令把本地变量导出为环境变量。

        使用unset命令可以删除已定义的环境变量或本地变量 

      10. 如果一个变量叫VARNAME,用${VARNAME}可以表示它的值,在不引起歧义的情况下可以用$VARNAME表示它的值

      11.通配符(wildcard):? []

    * 匹配0个或多个任意字符
    匹配一个任意一个字符
    [若干字符] 匹配方括号中任意一个字符的一次出现

      12.命令代换:

          由反引号括起来的也是一条命令,shell先执行该命令,然后将输出结果立刻代换到当前命令行中    

    1 cxw@cxw-Lenovo-G470:~/Dropbox/CXW/New/9_24_shell_jiaoben$ DATE=`date`
    2 cxw@cxw-Lenovo-G470:~/Dropbox/CXW/New/9_24_shell_jiaoben$ echo ${DATE}
    3 2013年 09月 25日 星期三 15:25:43 CST
    4 cxw@cxw-Lenovo-G470:~/Dropbox/CXW/New/9_24_shell_jiaoben$ DATE=$(date)
    5 cxw@cxw-Lenovo-G470:~/Dropbox/CXW/New/9_24_shell_jiaoben$ echo ${DATE}
    6 2013年 09月 25日 星期三 15:26:31 CST
    7 cxw@cxw-Lenovo-G470:~/Dropbox/CXW/New/9_24_shell_jiaoben$ 

       13.算术运算 :$(()) 中的shell变量取值将转换成整数

          只能用于+-*/和()运算符,并且只能用于整数运算

          提示 : ()运算符是函数调用运算符

      14.转义字符

          创建以-开头的文件名。 :  touch ./-hello  和   touch -- -hello

      另一种用法, 表示续行

      15.shell脚本中的单引号和双引号一样都是字符串的界定符,但字符串中不能出现单引号,如果么有引号输入回车,会给出续行提示符,要求用户配对单引号。

          单引号和双引号 :用于保持引号内所有字符的字面值(和回车也不例外)

          对于双引号来说 :以下情况除外 :

                      反引号仍表示命令替换

                      $表示$的字面值

                      \`表示`的字面值

                      "表示“的字面值

                      \表示的字面值

                  除以上情况之外,在其他字符面前的无特殊含义,之表示字面值

      16.启动脚本 :作为交互登录shell启动,或者使用--login参数启动

          启动bash会自动执行以下脚本 :

            1.首先执行/etc/profile,系统中每个用户登录时都要执行这个脚本。

                  如果系统管理员希望某个设置对所有用户都有效,可以写在这个脚本里

            2.然后一次查找当前用户主目录下的~/.bash_profile,~/.bash_login和~/.profile三个文件,找到第一个存在并且可读的文件来执行,

                  如果希望某个设置只对当前用户生效,可以写在这个脚本里,由于这个脚本在/etc/profile之后执行,。当前用户的设置会覆盖系统中全局的设置。

                  ~/.profile这个启动脚本是sh规定的,bash规定首先查找以~/.bash_开头的启动脚本,如果么有则执行~/.profile,是为了和sh保持一致

            3,在退出登录时会执行~/.bash_logout脚本(如果它存在的话)

      17.以交互非登录shell启动

          比如在图形界面开一个终端窗口,或者在登录shell提示符下再输入bash命令,就得到一个交互非登录的shell,这种shell在启动时自动执行~/.bashrc脚本

          为了使登录shell也能自动执行~/.bashrc,通常坐在~/.bash_profile中调用~/.bashrc

      18.shell脚本的语法: 

            条件测试:test[

            返回状态 :结果为真,返回0, 结果为假,返回1

    [-d DIR]  如果DIR存在并且是一个目录则为真
     [-f FILE] 如果FILE存在且是一个普通文件则为真 
     [-z STRING] 如果STRING的长度为零则为真 
     [-n STRING]  如果STRING的长度为非零则为真 
     [STRING1=STRING2] 如果两个字符串相同则为真 
     [STRING1 != STRING2] 如果两个字符串不相同则为真 
     [ARG1 OP ARG2] ARG1和ARG2应该是整数或者取值为整数的变量,
    上面的OP -eq(等于),-ne(不等于),-lt(小于), -le(小于等于), -gt(大于), -ge(大于等于)其中的一个

            测试条件之间还可以做与,或,非逻辑运算

    [! EXPR] EXPR可以是上表中的任意一种测试条件,!表示逻辑反
    [EXPR1 -a EXPR2] EXPR1和EXPR2可以是上表中的任意一种测试条件,-a表示逻辑与
    [EXPR1 -o EXPR2] EXPR2和EXPR2可以是上表中的任意一种测试条件,-o表示逻辑或

      19.如果$VAR变量事先没有定义,则被Shell展开为空字符串

      20. : 是一个特殊命令,称为空命令,该命令不做任何事

          &&相当于if...then...  ||相当于ifnot...then...  &&和||用于链接两个命令,而上面的-a和-o用于在测试表达式中链接两个测试条件

            if的结尾是fi  case的结尾是esac  ;;表示break

            $1表示参数列表的第一个参数

              for ...in ...;do

                .......

              done

             末尾有~的文件表示临时文件

            while [...]; do

             .....

            done

      21。常用的位置参数和特殊变量

    $0 相当于c语言main函数的argv[0]

    $1

    $2

    .....

    称为位置参数, 相当于C语言main函数的argv[1],argv[2]
    $# 相当于C语言main函数argc - 1
    $@ 表示参数列表“$1‘"$2"...
    $? 上一条命令的Exit Status
    $$ 当前shell的进程号

          shift命令左移  不带参数的shift表示shift 1

      22.函数,

      23. shell脚本的调试方法

          -n  读一遍脚本中的命令但不执行,用于检查脚本中的语法错误

          -v  一边执行脚本,一边将执行过的脚本命令打印到标准错误输出

          -x  提供跟踪执行信息,将执行的每一条命令和结果依次打印出来

        使用这些选项的三种方法,

            1.在命令行提供参数,

            2.在脚本的开头提供

            3.在脚本中用set命令启用或禁用参数

  • 相关阅读:
    Android 文件操作
    win7 jar文件打不开解决的办法
    工作年限
    mvc wcf 并发提示,存储Application,验证是否有用户在操作
    WCF理论 【转载】
    jQuery
    Entity Framework 新增实体,新增抽象实体
    Entity Framework 的枚举类型
    vs2013+sql server2012 +win8.1+entity framework + linq
    Entity Framework 的事务
  • 原文地址:https://www.cnblogs.com/cxw825873709/p/3337374.html
Copyright © 2020-2023  润新知