认识与学习Bash
一、认识Bash这个Shell
1.1 Shell
操作系统的内核(kernel)管理整个计算机硬件,这个内核需要被保护。用户通过Shell跟内核沟通,使其完成我们所需的任务。
壳程序(Shell)的功能只是提供用户操作系统的一个界面,即只要能够操作应用程序的软件都能够称为壳程序。
- 狭义的壳程序:命令行方面的软件
- 广义的壳程序:图形用户界面模式的软件等
[admin@localhost ~]$ cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
用户默认取得哪一个Shell?
[admin@localhost ~]$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
...
admin:x:1000:1000:admin:/home/admin:/bin/bash
...
Bash(Bourne Again Shell)
,这是Bourne Shell的增强版本,也是基准于GNU架构下发展出来的。
1.2 Bash shell的功能
- 历史命令(history)
.bash_history
记录的是前一次登陆以前所执行过的命令,而至于这一次登陆所执行的命令都被缓存在内存中,成功注销系统后才会记录到.bash_history
当中。
- 命令与文件补全功能([Tab]按键)
- 一串命令第一个字后面,命令补齐
- 一串命令第二个字后面,文件补齐
- bash-completion软件,选项/参数补齐
- 命令别名设置功能(alias)
alias lm='ls -al'
- 任务管理、前台、后台控制:(job control、foreground、background)
- 程序化脚本:(shell scripts)
- 通配符:(Wildcard)
1.3 查询命令是否为Bash shell的内置命令:type
[admin@localhost ~]$ type ls
ls is aliased to `ls --color=auto'
[admin@localhost ~]$ type -t ls
alias
[admin@localhost ~]$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
ls is /usr/bin/ls
[admin@localhost ~]$ type cd
cd is a shell builtin
1.4 命令执行与快速编辑按钮
[admin@localhost ~]$ cp /var/spool/mail/root /etc/crontab \
> /etc/fstab /root
注意:[Enter]
键紧接着反斜杠(\
),两者中间没有其他字符,因为仅转义紧接着的下一个字符而已。
二、Shell的变量功能
2.1 什么是变量?
变量就是以一组文字或符号等,来替换一些设置或一串保留的数据。
2.2 变量的使用与设置:echo、变量设置规则、unset
-
变量的使用:echo
[admin@localhost mail]$ echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/admin/.local/bin:/home/admin/bin [admin@localhost mail]$ echo $SHELL /bin/bash [admin@localhost mail]$ echo $HOME /home/admin [admin@localhost mail]$ echo $MAIL /var/spool/mail/admin
注意:在bash当中,当一个变量名称尚未被设置时,默认的内容是【空】
-
变量的设置规则
- 变量与变量内容以一个等号【=】来连接
myname=Sino
- 等号两边不能接空格
- 变量内容若有空格可使用双引号或单引号将变量内容结合起来
- 双引号内的特殊字符如
$
等,可以保有原本的特性[admin@localhost mail]$ var="lang is $LANG" [admin@localhost mail]$ echo $var lang is en_US.UTF-8
- 单引号内的特殊字符则仅为一般字符(纯文本)
[admin@localhost mail]$ var='lang is $LANG' [admin@localhost mail]$ echo $var lang is $LANG
- 可用转义符【
\
】将特殊符号(如[Enter]
、$
、\
、空格
、'
等)变成一般字符[admin@localhost mail]$ myname=Sino\ Zhao [admin@localhost mail]$ echo $myname Sino Zhao
- 在一串命令的执行中,还需要借由其他额外的命令所提供的信息时,可以使用反单引号【`命令】或【$(命令)】
[admin@localhost mail]$ version=$(uname -r) [admin@localhost mail]$ echo $version 3.10.0-1160.el7.x86_64 [admin@localhost mail]$ version=`uname -r` [admin@localhost mail]$ echo $version 3.10.0-1160.el7.x86_64
- 若该变量为扩增变量内容时,可用
"$变量名称"
或${变量}
累加内容[admin@localhost mail]$ PATH="$PATH":/home/bin [admin@localhost mail]$ PATH=${PATH}:/home/bin
- 若该变量需要在其他子程序执行,则需要以
export
来使变量变成环境变量export PATH
- 子进程:目前这个Shell的情况下,去启用新的一个Shell,新的Shell就是子进程
- 通常大写字符为系统默认变量,自行设置变量可以使用小写字符,方便判断
- 取消变量的方法为使用:unset:【unset 变量名称】
- 可用转义符【
- 变量与变量内容以一个等号【=】来连接