在Linux环境下,bash是非常重要的概念,通常使用命令行执行命令的方式,就是通过bash的环境来处理的。bash的内容包括变量的设置和使用、bash操作环境的构建、数据流重定向功能和管道命令。
bash shell和shell
我们知道计算机所有的操作都是由内核来控制的,我们在计算机中输入的命令必须要通过“shell”来与内核通信,好让内核可以控制硬件来正确无误的工作。操作系统其实是一组软件,由于这组软件在控制整个硬件
不管理系统的活动监测, 如果这组软件能被用户随意的操作,若使用者应用不当,将会使得整个系统崩溃。shell的功能只是提供用户操作系统的一个接口,只要能够操作应用程序的接口都能够称为shell。
shell的版本很多,每个linux系统支持的shell版本在/etc/shells中可以查到。
- /bin/sh
- /bin/bash(Linux默认的shell)
- /bin/ksh
- /bin/tcsh
- /bin/csh
- /bin/zs
- …
bash shell是linux中默认的shell版本。
bash shell的功能
- 命令记忆功能
默认的命令记忆功能可以到达1000个,在~/.bash_history文件中记录的是前一次登录以前所执行过的命令,这一次登录所执行的命令都被暂存在临时内存中,当注销系统后,该记忆命令才会记录到.bash_history中。 - 命令与文件不全功能
[Tab]接在一串命令的第一个字后面为命令补全;[Tab]接在一串命令的第二个字后面为文件补齐。 - 命令别名设置功能
- 作业控制、前台、后台控制
- 程序脚本
- 通配符
bash shell变量
变量就是一组文字或符号等,来替代一些设置或者是一串保留的数据。
变量的显示与设置:echo,unset
可以使用echo命令来显示变量。
echo ${变量名}
在bash中,当一个变量名没有被设置时,默认的内容是“空”的,而且变量设置时需要遵守相关的规则:
- 变量与变量内容以一个等号“=”来连接;
- 等号两边不能直接接空格符;
- 变量名称只能是英文字母和数字,但是开头符不能是数字;
- 变量内容有空格符可以使用双引号或单引号将变量内容结合起来。双引号内的特殊字符如$等,可以保有原本的特性;单引号内的特殊字符则仅为一般字符(纯文本)。
- 可以使用转移字符“\”将特殊符号变成一般字符;
- 在一串命令中,如果需要通过其他命令提供的信息,可以使用反单引号“命令
”或“
(命令)”;−若该变量为了增加变量内容时,可用“
变量名称”或${变量}累加内容;
- 若变量需要在其他子程序中执行,需要以export来使变量变成环境变量;
可以使用unset来取消变量。
unset 变量名称
变量键盘读取和声明:read, declare
- read
read用来读取键盘输入的变量。
read [-pt] variable
参数:
-p:后面可接提示符
-t:后面接等待的秒数,读取变量时不会一直等待用户输入
- declare
declare永安里声明变量的类型,如果后面不接任何参数,就会将所有的变量名称与内容调出来。
declare [-aixr] variable
参数:
-a:将后面名为variable的变量定义成为数组类型
-i: 将后面名为variable的变量定义成为整数数字类型
-x: 将后面名为variable变成环境变量
-t:将变量设置为只读类型
变量内容的删除、替代和替换
变量的删除与替代方式如下表所示:
变量的替换方式如下表所示:
与文件系统及程序的限制关系:ulimit
bash中可以限制用户的某些系统资源,包括可以打开的文件数量,可以使用的CPU时间,可以使用的内存总容量等,相关的设置通过ulimit命令进行。
ulimit [-SHacdfltu] [配额]
参数:
-H:严格的设置,必定不能超过这个值
-S:警告的设置,可以超过这个值,但是会有警告信息
-a:列出所有的限制额度
-c:每个内核文件的最大容量
-f:shell可以创建的最大文件容量,单位为KB
-d:进程可以使用的最大断裂内存容量
-l:可用于锁定的内存容量
-t:可使用最大CPU时间
-u:单一用户可以使用的最大进程数量
环境变量
可以使用env命令来查看当前的环境变量。一般的环境变量即含义如下:
- HOME:用户的主文件夹。
- SHELL:目前环境使用哪个shell程序。
- HISTSIZE:历史命令的最大记录条数。
- MAIL:使用mail命令读取的邮件信箱文件(mailbox)。
- PATH:执行文件查找的路径,目录与目录之间以冒号分隔。
- LANG:当前环境的语系数据。
- RANDOM:随机数生成器,生成0~32767之间的数字。
- PS1:命令提示符的设置,有以下符号:
\d:显示出“星期月日”的日期格式;
\H:显示完整的主机名;
\h:仅取主机在第一个小数点之前的名字;
\t:显示时间,为24小时格式的“HH:MM:SS”;
\T:显示时间,为12小时格式的“HH:MM:SS”;
\A:显示时间,为24小时格式的“HH:MM”;
\@:显示时间,为12小时格式的“HH:MM”;
\u:显示目前用户的账号名称;
\v:bash的版本信息;
\w:完整的工作目录名称;
\W:工作目录的最后一个目录名;
\#:执行第几个命令;
\$:提示符,root为#,其他为$。
- $:shell的PID。
- ?:上一个指令的回传码。
- OSTYPE,HOSTTYPE,MACHTYPE:主机硬件与内核的等级。
命令别名:alias,unalias
通过alias设置命令别名,可以简化常用的复杂命令,当alias后面不接任何参数时可以显式当前环境已有的命令别名情况。
alias 简化命令别名=’原命令及参数’
使用unalias可以删除命令别名的设置。
unalias 命令别名
历史命令:history
history命令是对历史命令的一些操作。
history [n]
history [-c]
history [-raw] histfiles
参数:
n:整数,表示列出最近n条命令
-c:清楚目前shell中所有的记录
-r:将histfiles中的命令读入shell的记录中
-a:将新增的记录加入到histfiles中
-w:将目前的记录写入到histfiles中