Linux之bash介绍
Shell的介绍
shell是⼀个程序,可以称之为壳程序,⽤于⽤户与操作系统进⾏交互。⽤来区别与核,相当于是⼀个命令解析器,Shell有很多中,这⾥列出其中⼏种
- Bourne SHell(sh)
- Bourne Again SHell(bash)
- C SHell(csh)
- KornSHell(ksh)
- zsh
各个shell的功能都差不太多,在某些语法的下达下⾯有些区别,Linux预设就是bash。这⾥主要介绍bash
bash
bash命令是sh命令的超集⼤多数sh脚本都可以在bash下运⾏,bash主要有如下这些功能
bash功能
记录历史命令:bash可以记录曾经的命令,保持在~/.bash_history⽂件中,只保存上次注销登录之后的命令
tab键⾃动补全:使⽤tab见可以⾃动不全命令或者⽬录i
alias命令别名:可以使⽤alias ll='ls -al'来设置命令的别名
⼯作控制:可以将某些任务放在后台去运⾏,这⾥不多种介绍
程序脚本:可以执⾏shell脚本⽂件
通配符:在查相关⽂件或者执⾏相关命令时,可以使⽤通配符*
内建命令type:可以使⽤type 命令来查看某个命令是否为内建在bash当中的命令「
bash变量
bash中变量有两种,分别是环境变量和⾃定义变量,可以理解为全局变量和局部变量,在理解他们的区别前,需要知道副程序和⼦程序,举个例⼦,当前的bash我们称之为⽗程序,⽽在这个bash下执⾏的任
何程序,都称之为⼦程序。那全局变量和局部变量的区别就是,全局变量在⼦程序中仍然有效,局部变量只在当前程序中⽣效。(注意,⼀旦退出⽗程序这个bash的话,⽆论是全局变量还是局部变量都失效了,再次打开bash时,该变量是不存在的)
变量范围
变量的设定
变量的设定有⼏个规则,这⾥列举如下:
- 设定变量通过=来链接,例如name=sujinzhou,两边不能有空格,如果有空格的话,需要⽤引号
- 变量名只能是英⽂名和数字,只能是英⽂开头
- 如果变量内容被引号扩起来的话,双引号和单引号是有区别的
- 双引号⾥⾯的特殊字符,会保持原有的特性。
- 单引号⾥⾯的特殊字符,只会是字符
- 使⽤\将特殊字符转换为⼀般字符
- 使⽤“这个符号扩起来的命令会先计算这个命令⾥⾯的内容,这个指令等价于$()
- 给原有的变量添加值时,使⽤变量,"变量,"变量”再加具体的内容
变量类型
bash中变量类型有两种,⼀种是普通的字符串,⼀种是整数;设置变量的类型使⽤的是declare命令,delcare的命令格式如下declare -[axir] variable
参数的意思:
- -a:将variable定义为数组
- -i:将后⾯的变量设置为整数类型
- -x:与export⼀样,将后⾯的变量设置为环境变量
- -r:将后⾯的变量设置为只读变量
如果declare命令没有接任何变量的话,则表⽰显⽰所哟的
定义数组
var[index]=content
变量的删除
删除变量使⽤如下命令
- unset 变量名
变量的查看
查看单个命令的内容,可以使⽤echo命令,使⽤echo $变量名就可以查看变量内容,另外如果要查看所有变量有3个命令,分别是如下⼏个命令,每个命令⼜有区别。
- echo $变量名:⽤于显⽰制定变量
- env:⽤来查询环境变量,
- set:显⽰shell变量,包括私有变量与⽤户变量,不同的shell有不同的私有变量,在shell中设置变量之后,可以通过set查到
- export:显⽰当前导出成⽤户变量的shell变量,也是⽤来查询环境变量的,shell的私有变量不会出现
Bash shell的操作环境
在shell中设置的变量,⽆论是环境变量还是⾃定义变量,在bash中注销登录之后,就失效了。下次登录时,是没有这些变量的,如果想要这些变量永久⽣效,是需要下如配置⽂件的,bash在启动时,会读取这个配置⽂件,来设置当前shell的各种变量。shell分为两种,分别是login shell和nonlogin shell,这⾥先说login shell;login shell是需要输⼊⽤户名和密码的,⼀般情况下,login shell在登录之后,会去读取两个⽂件,来设置当前shell的环境变量,分别是
1. /etc/profile:这个配置⽂件是默认配置⽂件,是系统整体的设置
2. ~/.bash_profile或者~/.bash_login或者~/.profile:这个是⽤户的⾃定义设置⽂件
shell在读取/etc/profile中的⽂件之后,会去读取⽤户⾃定义的设置⽂件,按照顺序读取上⽂中所说的⾃定义设置⽂件,只要到其中任何⼀个,就不再继续。在⽤户⾃定义的配置⽂件中,都会调⽤~/.bashrc这个⽂件,来配置当前的这个shell
/etc/profile或者~/.bash_profile都是在登录的时候才去读取,如果将⾃⼰的⼀些设置到这些⽂件之后,⼀般都需要重新登录⼀次shell才会⽣效,也可以使⽤source这个命令,来读取配置⽂件的内容到当前的这个shell
数据流重导向
数据重导向,表⽰将数据从⼀个地⽅导向到另外⼀个地⽅,在linux的bash中,有两种输出,分别是
标准输出:输出在屏幕当中的正常的提⽰信息,或者正常的返回值
错误输出:命令执⾏出错时,显⽰在屏幕当中的出错信息
有时候,我们需要将标准输出或者错误输出保留到某个⽂件中,⽅便以后你查询,这种情况下,就需要数据流重导向,也就是将输出到屏幕的信息导向到⼀个⽂件中。⽽导向⼜分为标准输出导向和错误输出导向
标准输出重导向:代码为1,使⽤>或者>>
错误输出重导向:代码为2,使⽤2>或者2>>
在linux中⼀个特殊的装置,是/dev/null,所有将导向到这个装置的数据都会被丢弃,相当与删除数据。
有时候,我们需要将标准输出和错误输出导出到⽂件中,则可以使⽤符号 2>&1,这个符号是连在⼀起的,表⽰将错误和标准输出⼀起输出。
除了输出之外,还有输⼊,
- 标准输⼊重导向:代码为0,使⽤<
某些由键盘输⼊的数据,可以使⽤标准输⼊重导向,从⽂件中输⼊数据。
管线命令
常⽤的关系命令有如下⼏个,具体的⽤法可以查询man⽂件
- 选择命令
- cut
- grep
- 排序命令
- sort
- wc
-
uniq
- 双向重导向
- tee
- 字符转换命令
- tr
- col
- join
- paste
- expand
- 分割命令
- split
其他
命令别名
alias //显⽰所有的命令别名
alias rm='rm -i' //设置命令别名
unalias rm //删除命令别名
历史命令
使⽤history命令,可以显⽰当前shell的内存中保存的历史记录命令,这⾥每个shell的历史记录命令是独⽴的,bash在退出的时候会⾃动将内存中的历史命令写⼊到histfiles中,也可以⼿动将当前shell内存中的历史命令同步回histfiles中,如果想从当前shell A读取另⼀个shell B中的历史命令了,需要在B这个Shell中先使⽤命令history -w将内存中的命令写⼊到histfiles中,然后在A这个shell中使⽤history -r来将histfiles中的命令读取到内存中
history n //显⽰最近的n笔命令的意思
history -c //将shell中所有的history命令全部删除
history -a //将⽬前新增的指令加⼊到histfiles中,如果不存在,则加⼊到~/.bash_history中
history -w //将内存中的history指令保持到histfile中
history -r //将histfile中的指令读取到这个shell中
历史命令的读取与记录如下:
当使⽤bash登录后,去~/.bash_history中读取历史命令
注销当前bash时,会将最近的HISTFILESIZE笔命令更新到~/.bash_history中,也可以使⽤history -w命令来强制更新
可以使⽤!来执⾏历史命令,如下:
退出grep命令!2 //执⾏历史命令中的第⼆个命令
!command //从最见的命令往前搜,查以command开头的命令
!! //执⾏上⼀个指令
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论