bash:
对于一个操作系统来说,shell相当于内核kernel外的一层外壳,作为用户接口。
一般来说,操作系统的接口分为两类:
CLI:command line interface 命令行接口
常见的有:shell、csh、ksh、zsh、bash、tcsh
GUI: graphical user interface 图形化用户接口
常见的有:Gnome 、KDE、 Xfce
bash及其特性:
1、bash是指一个可执行程序,一个用户的工作环境。
2、在每个shell下可以再打开一个shell,新打开的shll可以成为子shell,每一个shell之间是相互独立的。
3、可以使用pstree命令查看当前shell下的子shell个数。
bash的基础特性:
1、命令历史:
shell进程会在其会话中保存此前用户提交执行过的命令:
[root@centos7mage app]# history
定制history的功能,可通过环境变量实现:
HISTSIZE:shell进程可保留的命令历史的条数:
[root@centos7mage app]# echo $HISTSIZE
1000
HISTFILE:持久保存命令历史的文件
[root@centos7mage app]# echo $HISTFILE
/root/.bash_history
HISTFILESIZE:文件保存的命令历史的条数
[root@centos7mage app]# echo $HISTFILESIZE
1000
调用历史命令列表中的命令:
!#:再一次执行历史列表中的第#条命令;
!!:再一次执行上一条命令;
!SREING:再一次执行命令历史列表中最近一个以STRING开头的命令。
条用上一条命令的最后一个参数:
快捷键:ESC+
字符串:!$
控制命令历史记录的方式:
环境变量:HISTCONTROL
[root@centos7mage app]# echo $HISTCONTROL
ignoredups 忽略重复命令(ignorespace:忽略以空格字符开头的命令; ignoreboth:以上两者同时生效)
修改变量的值:
[root@centos7mage app]# HISTCONTROL=ignorespace
[root@centos7mage app]# echo $HISTCONTROL
ignorespace
2、命令补全
shell程序在接收到用户执行命令的要求,分析完成后,最左侧的字符串会被当做命令;
命令处理机制:
查找内部命令;
根据PATH环境变量中设定的目录,自左而右之歌搜索目录下的文件名;
给定的打头字符串如果能唯一标识某命令程序文件,则直接补全;
若给定的打头字符串不能唯一标识某命令程序文件,再敲击tab键一次,会给出列表;
3、路径补全
在给定的起始路径下,与对应路径下的打头字符串来匹配路径下的每个文件;
tab:
如果能唯一标识,则直接补全;
否则,再一次tab,给出列表;
4、命令行展开
~:自动展开为用户的家目录,或指定的用户的家目录;
{}:可承载一个以逗号分隔的路径列表,并能够将其展开为多个路径;
例如:/tmp/{a,b} 相当于/tmp/a /tmp/b
例一:如何创建/tmp/x/y1 , /tmp/x/y2 , /tmp/x/y1/a , /tmp/x/y1/b
[root@centos7mage tmp]# mkdir -pv /tmp/x/{y1/{a,b},y2}
例二:如何创建a_c , a_d , b_c , b_d
[root@centos7mage tmp]# mkdir -pv {a,b}_{c,d}
例三:创建如下目录结构:
/tmp/mysysroot/
├── bin
├── etc
│ └── sysconfig
│ └── network-scripts
├── sbin
├── user
│ ├── bin
│ ├── lib
│ ├── lib64
│ ├── local
│ │ ├── bin
│ │ ├── etc
│ │ ├── lib
│ │ └── sbin
│ └── sbin
└── var
├── cache
├── log
└── run
[root@centos7mage tmp]# mkdir -pv /tmp/mysysroot/{bin,sbin,etc/sysconfig/network-scripts,user/{bin,sbin,local/{bin,sbin,etc,lib},lib,lib64},var/{cache,log,run}}
[root@centos7mage tmp]# tree /tmp/mysysroot/
/tmp/mysysroot/
├── bin
├── etc
│ └── sysconfig
│ └── network-scripts
├── sbin
├── user
│ ├── bin
│ ├── lib
│ ├── lib64
│ ├── local
│ │ ├── bin
│ │ ├── etc
│ │ ├── lib
│ │ └── sbin
│ └── sbin
└── var
├── cache
├── log
└── run
19 directories, 0 files
5、命令的执行状态结果
命令执行的状态结果,bash通过状态返回值来输出此结果:成功为0、失败为1-255。
命令只想完成后其状态返回值保存在bash的特殊变量$?中:
[root@centos7mage tmp]# ls /etc
[root@centos7mage tmp]# echo $?
0
[root@centos7mage tmp]# ls /etccccc
ls: cannot access /etccccc: No such file or directory
[root@centos7mage tmp]# echo $?
2
[root@centos7mage tmp]# lss /etc
-bash: lss: command not found
[root@centos7mage tmp]# echo $?
127
6、引用命令的执行结果:
$(COMMAND)
[root@centos7mage ~]# mkdir $(date +%Y-%m-%d)
[root@centos7mage ~]# ls
2018-10-11
强引用:''
弱引用:""
命令引用:``
7、快捷键:
Ctrl + a:跳转至命令行首部;
Ctrl +d:跳转至命令行尾部;
Ctrl +u:删除命令行首到光标之间的所有字符;
Ctrl +k:删除光标所在处至行位的所有字符;
Ctrl +l:清屏,相当于clear命令。