接触Linux也蛮久了,通常是用Linux来跑一跑必须在linux上运行的程序,所以只了解一些简单的linux的命令行。但是每次查阅linux相关资料,总发现linux和shell捆绑在一起,我没有学过shell语言,我很好奇难道一定要学shell才能玩转linux么?shell作为一种编程语言,我可以用pyhton替代呀,为什么要学呢?我只要简单掌握几个awk之类的命令不就可以了么?
今天意外搜到一句话,解决了我关于shell和linux命令行之间的困惑:
相同点:
①基础命令行和Shell都可以操作Linux系统,区别在于
不同点:
①基础命令行(ls、cd等),是一种单一的操作。
②Shell可以比基础命令行更复杂,是一种组合型的操作。相比基础命令拥有了面向过程的概念。
至此,我思考了shell的优势,是比较轻量,可以单次操作,但是写法上确实有点诡异难以读懂。
举例——命令行可以一起执行多个命令:
- 每个命令之间用;隔开
说明:各命令的执行结果,不会影响其它命令的执行。换句话说,各个命令都会执行, 但不保证每个命令都执行成功。
cd /home/PyTest/src; python suning.py
如果要在python里面写这个程序,那可能得花几分钟吧
- 每个命令之间用&&隔开
说明:若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的。
cd /home/PyTest/src&&python suning.py
- 每个命令之间用||或者|隔开
说明:||是或的意思,只有前面的命令执行失败后才去执行下一条命令,直到执行成功 一条命令为止。
管道可以将一个命令的输出导向另一个命令的输入,从而让两个(或者更多命令)像流水线一样连续工作,不断地处理文本流。在命令行中,我们用|表示管道
cd /home/PyTest/123 || echo "error234"
cd /home/PyTest/123 | echo "error234"
了解了以上之后,再去读比较官方的解答就好懂多了:
shell翻译成壳的意思,它是包裹在linux内核外层的,一个可通过一系列的linux命令对操作系统发出相关指令的人机界面。 shell可以通过其条件语句和循环语句等,把一系列linux命令结合在一起,形成一个相当于面向过程的程序,shell script,来实现一些较为复杂的功能。
由定义可知, shell相当于经过装饰的命令行,和命令行一样,都能操作linux。但是shell是面向过程的,相当于有了一定的逻辑和过程,而命令行只是单一的操作。