Bash (Bourne Again Shell)

来源:互联网 发布:新网域名转到阿里云 编辑:程序博客网 时间:2024/06/05 14:50
首先说一个关系,kernel控制硬件工作(内部的东西人看不懂),而kernel相想让硬件干什么需要用户来说明,用户(人的语言kernel也看不懂)没法直接告诉kernel,于是通过一个shell来传达指令,按照定义好的标准,即计算机指令来沟通。

Bash是一种shell,是sh的加强版本,免费。

1.bash的优点

1) 命令编修能力,可以记录你输入过的指令,按上下键就可以使用
2) 比对补全功能,其实就是联想功能,只要输入指令或者文件路径的前面部分,使用Tab就可以自动显示出来
3) 可以设定别名,你在shell里面输入alias就可以看到当前设定了的一些别名,比如clear太长,你可以直接在shell里面输入alias cl=‘clear’,从此以后,如果你输入cl就能进行清除
4) 可以使用ctrl+c来停止当前程序,这样做可以带来很多方便
5) shell script的强大功能,就是说,你可以把要常用的一些连续指令写成shell script,然后分类等等,这样就可以很方便的进行管理,也可以实现快速和多次调试

2.变量

1)在shell里面输入env就可以知道这个电脑上主要设置了多少环境变量,通常来说,在linux的预设中,使用大写字母来设定的变量一般为系统内定需要的变量,比如说 $PATH,$HOME等等

使用set就能知道系统中全部设置的变量内容

2)设置变量

为什么要设置变量呢???

首先我举一个自己的例子,我的ONE Simulation的文件夹路径是 /Desktop/DTN/simulations/one,很烦啊,每次都要输那么多,想这种东西是天天用,一会儿就要进去一下的,所以这样岂不是浪费生命。于是呢,要是设置一个变量 one=Desktop/DTN/simulations/one,然后以后每次直接输 cd $DTN,这样是不是节约时间了啊,哈哈。

但是呢,有2点需要注意,第一是变量的设置需要遵循一定的规则,第二是,你如果这样设置的话,只是说明在当前这个窗口你可以这样用,如果你新开了一个窗口,这个就无效了。包括alias也是这样。

怎么样才能一劳永逸呢???

答案是export

所以说,如果你要写scripts的话,常常会有一个环境的引用另一个环境的变量,记住一定使用export。
具体怎么用还没有搞清楚

3)
一些符号,主要说4个万用符号

a. 第一个  *,它的作用就是,比如你写了 ls Desktop*,那么不管后面是什么,有多少,都全部显示出来

b. 第二个 ?,它的作用是,代表一个字母 (注意,和*不同的是,它只代表“一个"字母),那么使用了几个就必须是接了几个字母的才能被显示或者找到,比如 test???,说明只有test后面接了3个字母的名字才能被找到

c. 第三个 [],举例子吧,cp  test[1-5]  /tmp,那么如果有test1,test2,test3,test4,test5,统统拷贝到/tmp目录下

d. 第四个 ‘  ’ ,单引号,被它标记的最先被执行。

举一个组合的例子,cp  *[A-Z]*  /tmp,表明,只要这个变量含有任意一个大写字母,就被复制过去

e. &&,举例: command1 && command2,意思是command1若执行成功,就接着执行command2,2个结果都会显示出来

f. ||,举例: command1 || command2,意思是command1执行成功,就不执行command2了

3.绝对路径和相对路径

绝对路径:以根目录开始写入到档案的一种命令写定方式

4.命令重导向

举个例子先   ls -l > test.sh

如果没有右边的部分,那么屏幕上将显示当前文件目录,加了大于符号和test.sh以后,屏幕上将没有输出,而原本属于屏幕的输出将全部被写入test.sh文件中,如果原来test.sh中本身有数据,将会被覆盖。使用2个大于符号不会覆盖,而是接着原来的数据后面写入数据。

使用小于符号,表示从符号右边的文档将参数读入屏幕。这个东西主要是用于script,有一些命令需要你输入,但是如果太多了的话很麻烦。所以你可以写一个脚本,然后让它自己去读脚本显示。

通常来说,符号左边是命令,右边是文档。

但是,说到这里,信息也分为2种,一种是正确的输出,一种是错误的输出。很多用户应该都不想把错误的信息输入到文档中去吧,所以呢?可以通过如下的例子进行操作

ls -al  1> list.txt 2> list.err      这样代表的意思就是,如果是正确的就输入到list.txt里面去,错误的就输入到list.err

ls -al  1>list.txt 2> /dev/null       错误的直接舍弃掉

ls -al  1>list.txt 2>&1     无论正确错误都输入到list.txt中去


这样的话,当屏幕输出的信息很重要时,我们可以存下来;当不希望执行干扰屏幕时,我们可以存到文件中去;正确错误信息需要分类时,我们也可以使用这个。


5.管线命令 (pipe)

既然要往文档中写数据,但是数据也许需要加工几次才有用,比如说last命令显示最近的登录记录,但是也许我只对某一个用户的登录情况感兴趣,于是你得将第一个的结果传给第二个命令,处理以后,你发现原来你感兴趣的只有该用户登录的次数,于是再次传给第三个命令,计算出次数。而起传递作用的,正是管线 “ | "
 
比如上述例子得到次数的命令就应该是 last  |  grep joshua  |  wc -l

介绍一些相关的指令,具体语法暂时不深究,等用到的时候再说

1) cut ,它的作用就是将一些字符或者数据切割一下,通常一般都是前面执行一个啥,然后就得到一份数据,通过管线传给cut

2)sort,排序

3)wc,计算行数,字数,字符数

4)uniq,消除重复行

5)tee

6)tr,用于替换,比如大小写

7)split,也是用于切割,它是用来将文件切割成为文件



原创粉丝点击