跟我一起写Shell脚本之一----初识Shell

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脚本之旅会更久精彩!

===================================================================================

注意:本文为本人原创,版权所属为个人所有,欢迎转载,但是转载请注明出处。

===================================================================================

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值