Bash特性之一:命令行展开
~ :展开为对应用户的家目录。比如 cd ~UserName
{,,,,,}  : 他能在命令行展开的时候展开为多个路径。
创建 x/y   x/z   x/z/1   x/z/2
则用:mkdir -pv x/{y,z/{1,2}}


Bash特性之二:shell引用

Shell中的引用.

'  ':强引用,变量替换不会进行
" ":弱引用,能够执行变量替换
` `:命令替换,引用命令的执行结果;命令替换的另外一符号:$(命令);
变量替换:${变量名},只要能够替换就能操作

Bash特性之三:命令历史

命令历史
      bash保存的过去曾经执行过的命令的列表;
      当前shell进程的保存在缓冲区中;
      缓冲区中的命令会在shell退出时保存至文件中, .bash_history
      使用上下箭头键可以翻看此前曾经执行过的命令;  

   #history 快捷方式

   #!#-> #为命令历史列表中的命令编号;可执行第#条命令;

   #!!->执行上一条命令

   #!-#-> 执行历史命令列表中的倒数第#条命令;

   #!$->引用上个历史命令的最后一个参数;ESC->.

   #!string->执行命令历史列表中最近一次以string开头的命令;

   #history–c –>清空命令历史

   #history–d #->清除指定的历史命令条目

   #history–a ->追加当前会话的命令历史到历史文件中

   #historyn ->数字,要列出最近的n条命令列表

   #history–w ->将目前的history记忆内容写入HISTFILES

   #history-r ->将HISTFILES的内容读到目前这个shell的history中


   命令历史相关的环境变量:
       HISTSIZE:命令历史中可以保存的命令的个数;
       HISTFILE: 命令历史文件;
       HISTFILESIZE:命令历史文件可以保存的命令的个数;
       HISTCONTROL: 控制命令历史的生成;
               ignoredups:   忽略记录重复的命令;连续的相同命令才为重复;
               ignorespace:  不记录以空白字符开头的命令;
               ignoreboth:   同时具有上面两种特性;

       使用方法:
           export HISTCONTROL=参数
           撤销HISTCONTROL的控制:#unset HISTCONTROL


Bash特性之四:别名机制

       #alias    不带任何选项显示当前系统定义的别名条目
       #\ls      不使用别名机制,命令本身
如何定义别名:
       #alias 别名='原始命令'(如果原始命令没有空格可不加引号)

               例如:#alias cdnet='cd /etc/sysconfig/network-scripts'

       #unalias 别名  ->撤销自定义的别名

如需要使其永久生效可写入局部配置文件中:~/.bashrc(每个用户可自定义)


Bash特性之五:Globbing,文件名通配

   * :匹配任意长度的任意字符    
   ?:  匹配任意单个字符
   [ ]:匹配指定字符范围内的任意单个字符
   [a-z]  --->不区分大小写  --->[[:lower:]] 所有小写字母
   [A-Z] --->不区分大小写  --->[[:upper:]] 所有大写字母
   [0-9]                                    [[:digit:]] 所有数字
   [a-z0-9A-Z]                          [[:alnum:]] 所有字母和数字    
                                               [[:alpha:]] 所有大小写字符
                                               [[:space:]] 空白字符
                                               [[:punct:]] 特殊符号、标点符号
[^]:匹配指定字符范围外的任意单个字符;
如:非数字:[^0-9]  

Bash特性之六:Bash 在命令行快捷键

   Ctrl+a: 跳至命令行首
   Ctrl+e:
跳至命令行
   Ctrl+u: 删除命令行首至当前光标所在处的内容
   Ctrl+k: 删除当前光标所有处至命令行尾的内容
   Ctrl+l: 清屏,相当于clear命令
   Ctrl+c: 取消或终止;
   Ctrl+z: 将当前命令送至后台


Bash特性之七:Bash补全
       命令补全:    
           shell命令:内容,外部
                   外部:在系统某路径下有一个可执行程
           PATH,是一组由:分割的路径
           使用Tab键执行补全
       路径补全:在给出的打头的路径补全;如果没有打头的路径,则为当前;


Bash特性之八:提供编程环境

程序=指令+数据
       变量:
           弱类型语言:
               1、不强制区分变量的类型,无论存储何种数据,均以字符格式进行;
               2、无须事先声明;用到时,直接使用,直接赋值;
           bash: 动态编程语言,是弱类型语言;


Bash特性之九:Bash中的变量

变量的类型:
   1.本地变量:只对当前shell进程有效,对其子shell以及其它shell都无效;
       定义变量:[set]Var_Name="Value"
       引用变量:${Var_Name}
       撤销变量:unset Var_Name    
       不带任何参数的"set"命令  将会显示当前系统中的变量
   2.局部变量:仅对局部代码生效
               local Var_Name="Value"
   3.环境变量:对当前shell进程及其子shell有效;
               export Var_Name="Value"
               Var_Name="Value"
               export Var_Name
               导出
   4.位置变量:在脚本中直接应用
               $1......
   5.特殊变量:
           $0:    (脚本名自身)
           $#     (传递到脚本的参数列表)
           $*      (以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个)
           $$     (脚本运行的当前进程ID号)
           $!      (后台运行的最后一个进程的ID号)
           $@    (使用时加引号,并在引号中返回每个参数)
           $-      (显示shell使用的当前选项,与set命令功能相同)
           $?     (显示命令的最后退出状态,0表示没有错误,其它任何值都表明有错误)

变量的命名要求:
   变量在赋值时不能使用$;
   变量名只能包含字母、数字和下划线,而且不能以数字开头;
   变量名区别大小写;

环境变量:用来bash的工作特性,用于保存当前会话的属性信息;
#env,export,printenv
显示当前系统所有环境变量



Bash特性之十:输入输出重定向

I/O:设备的寄存器

文件描述符:file descript,FD

INPUT:标准输入(standardinput->stdin),文件描述符0

OUTPUT:标准输出(standardoutput-stdout),文件描述符1

显示器容纳两个数据流:

标准错误输出的错误流:stderr,文件描述符2

I/O重定向:

1.<->输入重定向符号

<< EOF

->此处创建文件Here Docunment(常用于在脚本中创建文件或生成菜单)

2.>->覆盖输出重定向符号

>>->追加输出重定向符号

例如:ls /var>/tmp/var.out

ls/etc >> /tmp/var.out ->追加

#set-C ->禁止使用覆盖重定向至已存在的文件

#set+C ->关闭上述特性

>|->强制输出,在-C特性下,强制使用覆盖重定向


/dev/null:bitbucket,位桶,数据黑洞

例如只想知道ls命令是否成功,而不需要显示结果

则:ls /etc> /dev/null | echo $?

2>->错误覆盖重定向

2>>->错误追加重定向

例如:lss /etc2> /tmp/etc.err

同时重定向标准输出和错误输出:

COMMNAD> /path/to/outfile 2> /path/to/errfile

无论成功与否,结果都保存在同一个文件中

COMAMAD&> /path/to/somefile

将错误和标准输出定向到同一个文件:

COMMAND> /path/to/somefile 2>&1