这应该是最后一期了

大概总结一下bash

说实话我跳过了很多暂时用不上的部分……见谅

关于shell和bash

一般用户只能通过shell来跟操作系统的内核进行通信,以让内核达到我们所想要达到的工作

只要能够操作应用程序的接口都能够称为shell。狭义的shell指的是命令行方面的软件(命令行窗口)当然bash就是其中一种,Linux的默认shell就是bash

bash shell的一些功能

摘抄了其中的一部分

  • 命令记忆能力:即为可以记住你之前一段时间使用过的一定数量的命令,可以按方向键的↑来查看
  • 命令和文件补全的功能:可以使用[tab]自动补全,[tab]接在一串命令的第一个字的后面,则为命令补全[tab]接在一串命令的第二个字的后面,则为文件补全
  • 命令别名设置功能(alias):类似于设置快捷方式

命令的执行

书上的例子——将三个文件复制到一个目录(分两行执行命令)

1
2
cp /var/spool/mail/root /etc/crontab \[enter]
> /etc/fstab /root

这里的enter是转下一行的意思(因为被转义了)一般的enter是执行命令的意思,这个>是系统自动出现的,不需要用户手动输入

shell的变量功能

输出变量内容(以PATH环境变量为例)

1
2
echo $PATH
echo ${PATH}

设置某个变量的内容

1
2
3
4
5
echo $myname
(无内容)
myname=111
echo $myname
111(myname赋予了内容,输出了111)

取消变量的方法

1
unset 变量名

反引号(``)的作用

在一串命令当中,在``当中的命令会被先执行,而其执行出来的结果将作为外部的输入信息

另外,``与$()两者是可以相互替代使用的

环境变量

环境变量一般的变量不一样,环境变量会随着父进程继承到子进程(在一个bash shell里面再开一个bash shell,那么这个新开的shell即为子进程,原来的shell即为父进程

可以使用export来将一般的变量转化为环境变量

1
export 变量名称

可以大致理解为

  • 环境变量=全局变量
  • 自定义变量=局部变量

命令别名

类似于定义变量

例如

1
alias ll='ls -al' 

bash shell的操作环境

通配符与特殊符号

  • *:代表0个到无穷多个任意字符
  • ?:代表一定有一个任意字符
  • []:同样代表一定有一个在中括号内的字符(非任意字符)。例如[abcd]代表一定有一个字符(这四个字符当中的其中一个)
  • [~]:例如[0~9]代表0到9之间的所有数字
  • [^]:例如^abc代表一定有一个字符(非a,b,c的其他字符即可)

一些统配符的使用例子

1
2
3
4
5
6
7
8
9
10
11
ll /etc/cron*
找出/etc下面以cron为开头的文件名

ll /etc/?????
找出/etc下面文件名刚好是5个字符的文件名(一个?代表一位)

ll /etc/*[0-9]*
找出/etc/下面文件名含有数字的文件名

ll /etc/[^a-z]*
找出/etc/下面文件名开头不为小写字母的文件名

bash的一些特殊符号(节选)

  • #:注释符号
  • \:转义符号——将特殊字符还原成一般字符
  • ;:连续命令执行分隔符
  • &:作业控制(job control)将命令变成背景下工作
  • > ,>>:数据流重定向,输出导向,分别是“替换”“累加”
  • <,<<:数据流重定向,输入导向

数据流重定向

数据流重定向即为将某个命令执行后应该要出现在屏幕上的数据传输到其他的地方

  • 标准输入(stdin):代码为0,使用<<<
  • 标准输出(stdout):代码为1,使用>>>
  • 标准错误输出(stderr):代码为2,使用2>2>>

一个范例

1
2
3
4
ll / > ~/rootfile
(屏幕无信息)
ll ~/rootfile
(下面会显示新文件的具体属性信息)

使用>>>的时候,若该文件不存在,则会自动创建这个新文件

>和>>的区别

  • 1>:以覆盖的方法将正确的数据输出到指定的文件或设备
  • 1>>:以累加的方法将正确的数据输出到指定的文件或设备
  • 2>:以覆盖的方法将错误的数据输出到指定的文件或设备
  • 2>>:以累加的方法将错误的数据输出到指定的文件或设备

将标准输出和标准错误输出存到不同的文件下

范例

1
find /home -name .bashrc > list_right 2> list_error

/dev/null垃圾桶黑洞设备与特殊写法

1
2
将错误的数据丢弃到其他文件,屏幕上显示正确的数据
find /home -name .bashrc 2> /dev/null

将正确和错误的数据都写入同一个文件当中

1
2
3
4
5
错误写法
find /home -name .bashrc > list 2> list(会造成数据次序的错乱)

正确写法
find /home -name .bashrc > list 2>&1

用stdin将数据输入到新文件里

1
2
3
cat > catfile < ~/.bashrc
ll catfile ~/.bashrc
(ll会回显出2行几乎一模一样的数据)

命令执行

一次执行多个命令

1
cmd1; cmd2; cmd3

&&和||的使用

  • cmd1 && cmd2:若cmd1执行完毕且条件为真(true)则开始执行cmd2,若cmd1执行完毕且条件为假(false)则cmd2不执行
  • cmd1 || cmd2:若cmd1执行完毕且条件为真(true)则cmd2不执行,若cmd1执行完毕且条件为(false)则开始执行cmd2

一些感想

这本书写的很细致,写的也很通俗易懂,学到了一些Linux的基本知识,其实前前后后也就看了100页左右……就这样了