1、什么是Shell?
让我们先来看看百度下看看Shell的解释:
Shell脚本与Windows/Dos下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。
Shell既是一种命令语言,又是一种程序设计语言。
作为命令语言,它类似于Windows下的cmd.exe,可以交互式地解释和执行用户输入的命令;
作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,但是Shell是不需要进行编译的,它是从脚本程序中一行一行的读取并执行命令。
Shell有两种执行命令的方式:
交互式(Interactive),用户输入一条命令,Shell就解释执行一条;
批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。
2、Shell的种类
Linux系统下有多种Shell,常见的有:
Bourne Again Shell (简称bash,Linux系统默认的shell)
Bourne Shell(简称sh,已经被 /bin/bash 所取代)
C-Shelll(简称csh)
Korn Shell(简称ksh)
我们可以通过查看系统下的/etc/shells来查看我们的Linux系统支持哪些shell。
以下是我安装的Ubuntu16.04下看到的结果:
~$ cat /etc/shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
当我们登陆Linux系统的时候,系统就会提供一个Shell供我们使用。而使用哪个shell,就在/etc/passwd里有记录:
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
我们也可以通过如下命令查看当前我们使用的是哪个shell:
$ echo $SHELL
/bin/bash
可见我的系统使用的shell是bash。
虽然各个shell功能差不多,但是某些语法会有些差异。我们还是选择Linux默认的shell --- bash 进行学习。
3、第一个Shell脚本
也许你已经用过、甚至看过很多Shell脚本,也许你已经写过N多Shell脚本,但是我们的脚本之旅还是从那个经典的“hello world!”故事开始吧。
我们新建文件001_HelloWorld.sh,然后输入如下内容:
#!/bin/bash
echo "Hello World!"
保存后,执行得到结果:
$ sh 001_helloworld.sh
Hello World!
恭喜你,如果能看到这行打印,说明你已经一只脚踏进了shell脚本的殿堂,接下来你将一步步写出复杂多变的脚本,简化你的工作,提高你的效率,从而抽出更多的时间做更多更重要的事情(比如运动、投资、交朋友、甚至带娃。。)
4、shell中source、sh、bash、./执行脚本的区别
刚才我们写的第一个脚本,你会发现执行的方式有很多种,都能得到期待的打印结果:
$ bash 001_helloworld.sh
Hello World!
$ sh 001_helloworld.sh
Hello World!
$ source 001_helloworld.sh
Hello World!
$ chmod +x 001_helloworld.sh
$ ./001_helloworld.sh
Hello World!
那么他们的差别是什么呢?
1) ./001_helloworld.sh的执行方式等价于sh ./001_helloworld.sh或者bash ./001_helloworld.sh,此三种执行脚本的方式都是重新启动一个子shell,在子shell中执行此脚本;
2)./001_helloworld.sh需要脚本文件有执行权限,其它几个方式都不需要脚本文件有执行权限;
3)source ./001_helloworld.sh和 . ./001_helloworld.sh的执行方式是等价的,即两种执行方式都是在当前shell进程中执行此脚本,而不是重新启动一个shell 而在子shell进程中执行此脚本。
等到学到变量的章节的时候,我们还会进一步深入探讨以上的第3)条差别。
5、用sh -x来追踪调试
"-x"选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具。“-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示出来,并且在行首显示一个"+"号。 "+"号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。 “-x”选项使用起来简单方便,可以轻松对付大多数的shell调试任务,应把其当作首选的调试手段。
我们将刚才的001_helloworld.sh修改如下(追加几行打印,方便我们更清楚的查看调试结果):
#!/bin/bash
echo "Hello World!"
echo "Hello World2!"
echo "Hello World3!"
然后用sh -x来运行:
$ sh -x 001_helloworld.sh
+ echo Hello World!
Hello World!
+ echo Hello World2!
Hello World2!
+ echo Hello World3!
Hello World3!
可以看到执行到某一行,都会前面加一个+号,把这行命令打印出来。这对我们的调试很有用。
sh还可以跟-c、-n,这两个参数的具体内容之后会详细讲解。
好了,今天初识Shell就到这里了,接下来的Shell脚本之旅会更久精彩!
===================================================================================
注意:本文为本人原创,版权所属为个人所有,欢迎转载,但是转载请注明出处。
===================================================================================