小威
...

  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命令启用或禁用参数

posted on 2013-09-25 20:33  小威_  阅读(235)  评论(0编辑  收藏  举报