设为首页 收藏本站
查看: 610|回复: 0

#4 什么是shell与bash的特性

[复制链接]

尚未签到

发表于 2018-8-24 11:10:11 | 显示全部楼层 |阅读模式
  Shell:
  操作接口,为用户提供简单易用的操作界面,
  Bell实验室:bourne shell --> sh
  Bill joy:C shell --> csh --> tcsh
  David korn:korn shell --> ksh
  Gun:bourne again shell --> bash(默认的Linux标准shell)
  Zsh:
  默认系统中所支持的shell:
  ~]# cat /etc/shells
  bash特性:
  一、命令别名(自定义命令)alias(查看别名命令)
  alias命令可以用来定义和显示命令的别名。
  但是使用alias命令定义的别名,其生命期仅为当前shell的生命期;
  对于每个用户来说,都有一个私有的bash配置文件,用于保存别名:
  ~/.bashrc
  注意:
  1.alias命令的效果仅限于当前shell的生命期;
  2.如果修改.bashrc配置文件,其中保存的别名并不会立即生效,只有在重新加载该文件的内容之后,才会生效,且永久生效;
  3.为了能够保证我们设置的别名永久有效,通常两种操作都要做;
  撤销别名:
  unalias:
  unalias:name(别名名称)
  二、命令历史:
  Bash进程会保存其会话中用户曾经执行过的命令,以方便用户重复执行某个命令;
  通过bash提供的历史命令文件来持久保存此前执行过的命令,每个用户都有其自己私有的历史文件;
  登录shell的时候,bash会自动读取~/.bash_history文件中所记录的所有命令;
  history命令:
  -c:清空历史缓冲区中的历史命令;
  -d offset:删除特定历史命令条目;
  重复执行前一个命令的方法:
  1.使用上方向键,回车执行;
  2.Ctrl+p,回车执行;
  3.!-1,回车执行;
  4.!!,回车执行;
  重复执行历史缓冲区中的命令:
  !#(数字)重复执行历史命令中编号为“#”的命令
  !string(字符串):从历史缓冲区中查找最近一次执行过的以“String”开头的命令,并执行;
  !?string(字符串):从历史缓冲区中查找最近一次执行过的包含“String”的命令,并执行;
  !-#(数字):重复执行历史缓冲区中倒数第“#”条命令;
  Ctrl+r:在历史缓冲区中实施搜索,回车执行即可;
  重复使用历史命令中的一部分:
  !$:表示最后一次命令中最后一个参数;
  先按ECS,然后按.:表示最后一次命令中最后一个参数;

  >  !^:表示第一个位置的参数
  !:#(数字):表示最后一次命令中第“#”个位置的参数;
  !#(数字):#(数字):表示在历史缓冲区中第“#”个命令的第“#”个参数
  !string(字符串):^|$|*|#:
  与历史相关的bash变量:
  Histsize;
  Histfilesize;
  Histtimeformat;
  Histtimeformat=“%F %T”(显示时间)
  Histcontrol;
  ignoredups:忽略连续且相同的命令的历史缓存;
  ignorespace:忽略以空白字符开头的命令;
  ignoreboth:以上两个功能都启用;
  三、快捷键
  C-->Ctrl
  M-->Alt
  E-->Esc
  del-->backspace
  在命令行模式下使用的快捷键:
  C-l:clear,清屏;
  C-a:将光标跳转至命令行的行首;
  C-e:将光标跳转至命令行的行尾;
  c-u:删除光标所在位置至行首的命令行信息;
  C-k:删除光标所在位置至行尾的命令行信息;
  C-c:结束前台进程,取消命令的运行;
  四、命令补全机制:
  两个方面的理解:
  命令本身的字符串的补全
  参数的补全
  shell命令的执行过程:
  1.Shell会根据用户键入“enter”来判断用户的输入结束;
  2.shell会将收集的命令信息,根据空白字符来分段(token),第一分段被理解为命令字段;
  3.判断第一字段是内部命令还是外部命令,如果是内部命令,则直接运行,如果是外部命令,通过path变量所指示的路径信息,去查找相关的位置,以确定是否存在同名文件,如果有,就执行;否者就报错;
  4.判断选项是否正确,判断参数是否正确;
  使用tab键可以完成命令补全:
  如果给出的字符串不能作为唯一的标识,则bash不予补全;再次敲击tab键,bash会给出参考列表;如果参考列表中的内容过多,bash会询问是否显示该列表;
  根据提供的参数路径来进行补全,如果参数没有任何提示信息,则默认从工作目录进行查找;
  五、命令行展开:
  ~:bash会自动将其展开为当前登录用户的家目录;
  ~string(字符串):bash会自动将其张开为以“string”为用户名的家目录;
  ~+:调用shell变量“pwd”的值;
  ~-:调用shell变量“oldpwd”的值;
  {}:在花括号中可以填充一个以“,”分隔的路径列表,bash会将其展开为多个独立的路径
  六、命令的执行结果:
  任何一个Linux命令都有两种执行结果;
  其一:命令的正常输出结果;
  跟用户需求相关的返回内容;
  ``(英文状态下~键):反向单引号,反引号
  $():标准的命令引用格式
  wc:统计一个文件中的行数、字数及字节数;
  -c:只显示字节数;
  -l:只显示行数;
  -w:只显示字数;
  其二:命令的执行状态返回值;
  跟命令执行成功与否相关的返回内容;
  保存在bash的一个特殊变量中:$?
  0:命令执行成功
  1,2,127:bash内置状态返回值;
  1:表示小问题
  2:表示严重问题
  127:表示命令本身问问题;
  3-126,128-255:用户自定义状态信息;
  七、引用功能:
  ‘’:强引用
  凡是被单引号引用的内容,bash一律将其视为普通字符,即便其本身有特殊功能和作用也是如此。但单引号本身是个例外。
  “”:弱引用
  被双引号引用的内容中,有些特殊字符仍然会保留其特殊含义,比如说:$、\、”
  八、转义功能:
  \:bash中定义的转义字符:只能使其后一个字符失去特殊意义;
  九、Globbing(文件名通配,简称为glob):
  元字符(基本字符):
  *:匹配任意长度的任意字符,某些特殊位置的“.”字符不能被匹配;
  ?:匹配任意单个字符,必须且只有一个字符被匹配;
  []: 匹配指定范围内的任意单个字符,必须且只有一个字符被匹配
  在“[]”中范围的显示的模式:
  [a-z]:a,A,b,B,c,C...y,Y,z
  [A-Z]:A,b,B,c,C…y,Y,z,Z
  字符集:
  [:lower:]:表示所有小写字字母;
  [[:lower:]]:通配任意单个小写字母;
  [:upper:]:表示所有的大写字母;
  [[:upper:]]:通配任意单个大写字母;
  [:alpha:]:表示所有字母字符;
  [:digit:]:表示所有的十进制数字    10
  [:alnum:]:表示所有的大小写字母以及十进制数字
  [:space:]:表示空白字符
  [:punct:]:表示所有的标点符号
  ^: 取反匹配,[^]表示不要的意思
  十、输入输出重定向:
  在使用计算机的时候,实现某种功能的主题是:程序
  程序=指令+数据
  数据:文件,io
  可以用于输入的设备:文件
  键盘文件、文件系统中的常规文件、网卡设备、声卡设备等;
  可以用于输出的设备:文件
  显示器、文件系统中的常规文件、网卡设备、声卡设备等;
  每一种程序都有三种形式的数据流:
  输入数据流:为程序获取数据的数据流;默认的输入数据流的来源就是键盘;
  输出数据流:将程序所处理的数据结果展示给用户的数据流;默认的输出数据流的终点是显示器;
  错误数据流:将程序无法处理或处理过程中出现问题的结果展示给用户的数据流:默认的错误数据流的终点是显示器;
  从键盘实现的输入数据流称为标准输入;
  到显示器上的输出数据流称为标准输出;
  到显示器上的错误数据流称为标准错误输出,简称标准错误;
  文件描述符:file descriptor,简称:FD
  0:标准输入,stdin
  1:标准输出,stdout
  2:标准错误,stderr
  IO重定向:采用非标准设备文件实现的IO操作;
  简单来说:
  不是从键盘设备完成的数据流输入就可以称为输入重定向或重定向输入;
  不是到显示器设备的正确输出数据流就被称为输出重定向或重定向输出;
  不是到显示器设备的错误输出数据流就被称为错误重定向或重定向错误;
  >:覆盖输出重定向
  ~]# set -C        //开启防误覆盖开关
  在此开关开启后,可以使用“>”符号继续覆盖重定向
  ~]# set +C        //关闭防误覆盖开关
  >>:追加输出重定向
  错误重定向:
  2>:覆盖错误重定向;
  2>>: 追加错误重定向;
  合并标准输入和标准输出的重定向:
  1)&>,&>>   (4.0以上的bash才支持的符号)
  2)command >|>> path/to/somefile 2>&1
  /dev/null:blackhole,bitbucket(位桶 垃圾桶),
  Ls /tmp/a.txt &> /dev/null
  ||(等号)
  Ls /tmp/a.txt > /dev/null 2>&1
  输入重定向:
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-555910-1-1.html 上篇帖子: #6 shell脚本见解与编程 下篇帖子: shell二级菜单
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表