来看看 发表于 2018-8-22 12:18:07

Shell编程入门进阶之Bash Shell特性

  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,文件名通配
  * :匹配任意长度的任意字符
  ?:匹配任意单个字符
  [ ]:匹配指定字符范围内的任意单个字符
  --->不区分大小写--->[[:lower:]] 所有小写字母
   --->不区分大小写--->[[:upper:]] 所有大写字母
                                      [[:digit:]] 所有数字
                          [[: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都无效;
  定义变量: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.输入重定向符号
  此处创建文件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

页: [1]
查看完整版本: Shell编程入门进阶之Bash Shell特性