跟我一起写Shell脚本之二----初识Shell(2)

1、交互式

上次提到,Shell有两种执行命令的方式:

交互式(Interactive),用户输入一条命令,Shell就解释执行一条;

批处理(Batch),用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。

 

而我们举了一个例子001_HelloWorld.sh,就是第二种方式:批处理方式。

 

其实我们也可以用交互式来进行。比如我们在控制台输入:

 

echo "Hello World!"

一样可以得到:

$ echo "Hello World!"
Hello World!

之后的讲解中,为了方便说明清楚,我们会将二者结合使用。

2、#!/bin/bash、#!/bin/sh开头的意义

在我们的例子001_HelloWorld.sh中我们发现,第一行是

#!/bin/bash

如果将这一行去掉,我们用sh, bash, source, ./进行执行,结果没什么两样。那么这一行的意义是什么呢?

其实这句话的意思是告诉执行器需要调用/bin/bash来执行。如果有些用户使用的是csh,那么缺少第一行的“#!/bin/bash的shell脚本执行结果就可能存在语法不兼容的问题,导致结果异常或者根本不能执行。

 

3、bash和sh的区别

从我的Ubuntu16.04上可以看到:

$ ls -al /bin/sh
lrwxrwxrwx 1 root root 4 10月  7 08:14 /bin/sh -> dash
$ ls -al /bin/bash 
-rwxr-xr-x 1 root root 1037528 7月  13  2019 /bin/bash

可见sh并不是指向bash,而是dash。

 

以下是网上搜到的答案:

GNU/Linux操作系统中的/bin/sh本是bash (Bourne-Again Shell) 的符号链接,但鉴于bash过于复杂,有人把bash从NetBSD移植到Linux并更名为dash (Debian Almquist Shell),并建议将/bin/sh指向它,以获得更快的脚本执行速度。Dash Shell 比Bash Shell小的多,符合POSIX标准。

所以也就是在Ubuntu中可以认为/bin/sh就是/bin/dash。

Ubuntu继承了Debian,所以从Ubuntu 6.10开始默认是Dash Shell。

/bin/sh与/bin/bash虽然大体上没什么区别,但仍存在不同的标准。标记为#!/bin/sh的脚本不应使用任何POSIX没有规定的特性 (如let等命令, 但#!/bin/bash可以)。Debian曾经采用/bin/bash更改/bin/dash,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度。但是后来经过shell脚本测试存在运行问题。因为原先在bash shell下可以运行的shell script (shell 脚本),在/bin/sh下还是会出现一些意想不到的问题,不是100%的兼用。

 

说了这么多,估计有点晕了,我们到底该使用sh还是bash?我觉得不用过多纠结,不需要关注性能的我们,可以直接使用bash。

 

4、shell的type命令

type命令
type命令 用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令。
命令类型:
  alias:     别名
  keyword:   关键字,Shell保留字
  function:  函数,Shell函数
  builtin:   内建命令,Shell内建命令
  file:      文件,磁盘文件,外部命令
  unfound:   未找到
  
语法:
tpye [选项] [参数]
选项:
-t:   输出"file"、"alias"或者 "builtin",分别表示给定的指令为:"外部指令"、"命令别名" 或者 "内部指令";
-p:   如果给出的指令为外部指令,则显示其绝对路径;
-a:   在环境变量“PATH”指定的路径中,显示给定指令的信息,包括命令别名。
参数:
指令:要显示类型的指令

在我的Ubuntu机器上运行:

$ type ls
ls is aliased to `ls --color=auto'
$ type cd
cd is a shell builtin
$ type type
type is a shell builtin
$ type mkdir
mkdir is hashed (/bin/mkdir)

至于mkdir是hashed,还不懂什么意思。稍后会详细确认并分享给大家。

 

好了,今天就到这里了,接下来的Shell脚本之旅会更精彩!

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值