shell 简介

1. shell是什么

        Shell英文意思是外壳, 用户通过Shell和操作系统交互,Shell就是一个解释器,在Linux输入一条命令可以查看当前正在使用的Shell:

echo $SHELL

        当我们输入一条命令Shell就解释执行,这是交互式的方式。shell还有一种批处理的方式(Batch),写一个Script解释执行。


2. shell的基本原理

        Linux输入的命令分为内部命令(built-in)以及外部命令,像ls,cat,mkdir这些都属于外部命令,而echo,cd,pwd这些都属于内置命令,用type命令可以辨别是否属于内部命令。

$ type cd

cd is a shell builtin

$ type cat

cat is /bin/cat

        内置命令属于Shell的一部分,当Shell一运行起来就随Shell加载入内存,在命令行上输入这些命令就可以像调用函数一样直接使用,效率非常高。命令行输入外部命令,当前的Shell会fork一个子进程,然后调用exec载入这个命令的可执行文件,比如bin/cat,因此效率上稍微低了点。


3. /bin/sh和/bin/bash的区别

        shell脚本的开头有一句话定义使用哪种sh解释器来解释脚本。#!是对脚本的解释器程序路径。

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

hwl@~/code/Test~$ll /bin/sh

lrwxrwxrwx 1 root root 4  2月 15  2018 /bin/sh -> dash*

hwl@~/code/Test~$ll /bin/bash

-rwxr-xr-x 1 root root 1029720 10月  7  2014 /bin/bash*

        一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式。 也就是说 /bin/sh 相当于 /bin/bash --posix

POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX )。 是为了提高 UNIX 环境下应用程序的可移植性。

你可能感兴趣的:(shell 简介)