shell是一门脚本语言。通常脚本语言有以下特性:

    不需要编译,由解释器解释执行。
    弱类型语言
    变量通常不需要事先声明

常见的解释型语言有:

    bash
    perl
    python
    ruby
    ....

bash的变量类型:

    本地变量:
              格式:    set VAR_NAME=value   #设置变量
                        unset VAR_NAME       #销毁变量
                        ${VAR_NAME}          #引用变量
              作用范围:
                        当前shell进程有效
                        
    局部变量:
              格式:     local VAR_NAME=value  #设置变量
                         unset VAR_NAME        #销毁变量
                         ${VAR_NAME}           #引用变量
              作用范围: 
                         在当前shell进程的局部范围内有效
                         
    环境变量:
              格式:      export VAR_NAME=value  #设置变量
                         unset VAR_NAME         #销毁变量
                         ${VAR_NAME}            #引用变量
              作用范围:
                         当前shell及其子shell有效
                         
    位置变量: $1,$2,.......
    
    特殊变量: $$,$?,$#,[email protected]

bash脚本独立执行的条件:

                      1,要有执行权限
                      2,定义好shebang,即脚本的第一行。也就是指定脚本的解释器。例如:
                         #!/bin/bash

bash的配置文件:

              Profile类:
                        作用:声明环境变量  执行程序或脚本
                        文件:/etc/profile  
                              /etc/profile.d/*.sh
                              ~/.bash_profile
                         
              bashrc类:
                        作用:定义本地变量  定义命令别名
                        文件:/etc/bashrc
                              ~/.bashrc

bash脚本调试的常用指令:

              检查脚本的语法错误,不执行脚本:
                           bash -n /path/to/script_file.sh
                           
              调试执行脚本:
                           bash -x /path/to/script_file.sh

bash变量命名规范:

               只能包含字母,数字和下划线
               不能以数字开头
               不能超过20个字符
               严格区分大小写
               要做到见名知义
               命名规范,风格统一

shell是一门脚本语言,同时也是一门面向过程的语言。面向过程语言的语言控制结构一般有以下三种:

               顺序结构:
                        默认法则,从上往下逐条执行
               选择结构:
                        增加了条件判断,只执行条件满足的分支语句块
               循环结构:
                        将同一代码块反复执行n次;
                        循环必须要有退出条件,否则,就成为死循环

bash的常用特性:

              变量
              快捷键
              命令别名
              命令行展开
              管道
              输入输出重定向
              编程
              命令行补齐
              路径补齐

bash的常用快捷键:

               编辑命令类:
                          Ctrl+a:  移至命令行首
                          Ctrl+e:  移至命令行尾
                          Ctrl+f:  按字符向右移动
                          Ctrl+b:  按字符向左移动
                          Alt+f:   按单词向右移动
                          Alt+b:   按单词向左移动
                          Ctrl+xx: 在命令行首和当前光标之间移动
                          Ctrl+u:  从当前光标处删除至命令行首
                          Ctrl+k:  从当前光标处删除至命令行尾
                          Ctrl+w:  从当前光标处删除至字首
                          Alt+d:   从当前光标处删除至字尾
                          Ctrl+d:  删除当前光标处的字符
                          Ctrl+h:  删除当前光标前的字符
                          Ctrl+y:  粘贴至当前光标后
                          Alt+c:  将当前光标所在的字符更改为大写字符
                          Alt+u:   从光标处至单词尾部全部更改为大写字符
                          Alt+l:   从光标处至单词尾部全部更改为小写字符
                          Ctrl+t:  交换光标处和之前的字符
                          Alt+t:   交换光标处和之前的单词
                          Alt+Backspace:  与Ctrl+w类似,分隔符有些差异
                   
                历史命令类:
                          Ctrl+r:  逆向搜索命令历史
                          Ctrl+g:  从历史命令搜索模式退出
                          Ctrl+p:  历史命令中的上一条命令
                          Ctrl+n:  历史命令中的下一条命令
                          Alt+.:   使用上一条命令的最后一个参数  等同于ESC+.
               
                控制命令类:
                          Ctrl+l:  清屏  等同于clear
                          Ctrl+o:  执行当前命令,并重复上一条命令
                          Ctrl+s:  阻止屏幕输出
                          Ctrl+q:  允许屏幕输出
                          Ctrl+c:  终止命令
                          Ctrl+z:  挂起命令
                          
                Bang(!)命令:
                          !!:      执行上一条命令
                          !ba:     执行命令历史中最近以ba开头的命令
                          !ba:p :  仅打印输出,并不执行
                          !$:      上一条命令的最后一个参数,与Alt+.同
                          !$:p  :  打印输出!$的内容
                          !*:      上一条命令的所有参数
                          !*:p     打印输出!*的内容
                          ^var:    删除上一条命令中的var
                          ^var^usr:将上一条命令中var替换为usr
                          ^var^usr^:将上一条命令中所有的var替换成usr  
                          
               注:Bash默认工作在emacs编辑模式下。
                   set -o vi     切换至vi模式
                   set -o emacs  切换至emacs模式

bash中的引号:

              双引号:弱引用 可实现变量替换
              单引号:强引用 不替换 而显示字符串本身
              反引号:命令引用 也可以使用$() 例如:
                      echo "The time is `date +%T`"
                      echo "The time is $(date +%T)"

bash中的命令别名:

               定义别名的好处:
                              简化命令  例如:
                                      alias rm='rm -i'
                              保持使用习惯 例如:
                                      alias cls='clear'
               撤销别名:
                         unalias cls
                         
               别名的作用范围是当前shell
               
               要想让别名永久有效,需要定义在配置文件中   
               
               如果不想使用别名,除了撤销别名之外,还可以使用\  例如:
                          alias cat='cat -n'
                          cat /etc/rc.d/rc.sysinit
                          \cat /etc/rc.d/rc.sysinit     #执行原来的cat命令  不带-n 参数

bash的重定向功能:

      标准输入:默认是键盘
      标准输出:默认是监视器
      错误输出:默认是监视器
      
      File discriptor,FD 文件描述符
      
      标准输入fd: 0
      标准输出fd: 1 
      标准错误输出fd:2
     
      输出重定向:
                  >   覆盖重定向  目标存在则覆盖 目标不存在则新建
                  >>  追加重定向  目标存在则追加 目标不存在则新建
                  
      错误输出重定向:
                  2>  覆盖重定向
                  2>> 追加重定向
                  
      同时重定向标准输出和错误输出:
                 COMMAND > /path/to/stdout  2>/path/to/error
                 
      标准输出和错误输出到同一个文件:
                 &>
                 &>>
                 
                     COMMAND &>/path/to/somewhere
                     COMMAND >/path/to/somewhere 2>&1
                     
      输入重定向:
                 <
                     COMMAND </from/somewhere
                     
                 <<
                     wc << EOF
                     >test string 1
                     >test string 2
                     >test string 3
                     >test string 4
                     >EOF
                     
                     #常用于生成用户选择列表
                     
       数据黑洞:/dev/null  吞噬所有数据 不会返回任何结果
                  ls  /etc >/dev/null

bash的管道功能:

              作用:将一个命令的输出发送至另一个命令的输入
                     rpm -qa | sort
              
                  #命令中可以使用数量不限的管道数(行长度最多是255字符)
                     rpm -qa | sort | more
                     rpm -qa | sort >rpm.list