shell详解:shell是什么?

从今天开始,我们就来详细的认识一下到底什么是 shell,它在 Linux 系统中有什么作用。Windows 系统上也有 powershell,但是并不常用,那到了 Linux 系统上,shell 为什么就如此的受欢迎,而且是每个 Linux 用户都必须掌握的知识呢?

shell是什么

当我们谈到命令行时,我们实际上是指 shell。 shell是一个程序,它从键盘读取命令然后交由操作系统来执行。几乎所有 Linux 发行版都提供了一个名为 GNU Project 的 shell 程序。“bash”是“Bourne Again SHell”首字母缩写,bash 是 sh 的增强版本,sh 史蒂夫·伯恩(Steve Bourne)编写的原始 Unix shell 程序。
Shell跟标准的编程语言区别很大,它基本上是一个面向字符串的编程语言

shell脚本格式

一个规范的Shell脚本在第一行会指出由哪个程序(解释器)来执行脚本中的内容,这一行内容在Linux bash的编程一般为:
/#!/bin/bash

/#!/bin/sh
注意:
(1)在Shell中如果一行的第一个字母是#,则是注释,但是上面两个是写在第一行,所以不是脚本注释行,如果写在某个命令之后,则变成注释行。
(2)sh为bash的软链接,大多数情况下,脚本的开头使用“#!/bin/bash”和“#!/bin/sh”是没有区别的,但更规范的写法是在脚本的开头使用“#!/bin/bash”。

shell脚本执行

赋予执行权限,直接运行
chmod 755 hello.sh
./hellp.sh
通过Besh调用执行脚本
bash hello.sh

这是我在知乎看到的一篇文章有助于理解shell

https://www.zhihu.com/question/309875771/answer/664294297

Shell 是什么
Shell其实就是字面意思--壳. 一个系统有内核(Kernel)自然就有外壳(Shell). 在 Linux 上广义的 Shell 就是与用户交互的界面, 图形化界面是 Shell, 命令行界面也是 Shell. 狭义上的 Shell 就是 Linux 上的命令行界面. 一般发行版上的命令行界面是 bash, 而 debian 的是 dash. 下面的讨论基于侠义的 Shell.

Shell 的作用
Shell 是用来执行计算机程序的. 例如执行 mkdir 就是创建一个文件夹, 执行 touch 就是创建一个文件. 执行 ps 就是查看进程信息. 其中 mkdir, touch, ps 都是用 C 语言编写编译后的程序.

都说 Shell 可以直接与计算机交互,但是我想其他语言不也能方便的与计算机进行交互吗?
Shell 直接与计算机交互吗? 得看计算机是什么的一个概念. 如果计算机是指硬件的话. 那么 Shell 是不能直接与计算机交互的, 操作硬件只能由 Kernel 进行, 而调用 Kernel 的功能只能通过系统调用来完成, 而 Shell 不具有系统调用的能力. 如果计算机是一个抽象概念的话, 那么 Shell 能够通过执行其他程序来达到修改计算机状态的目的, 所以可以说 Shell 可以与计算机交互.
注意, 与计算机的交互最终必须通过系统调用(system call)完成 , Shell 调用 mkdir 其实是调用一个程序, 这个程序是用 C 语言实现(gnu_coreutils mkdir 源码), 其中最核心的是 mkdir(char* path, int access) 这个系统调用.

其他语言不也能方便的与计算机进行交互吗?
其他语言与计算机交互也是直接或间接的通过系统调用来完成. 很多语言的系统调用是通过库的形式封装了. 如 python 的 os.mkdir(), 就是封装了 mkdir(char* path, int access) 系统调用. 当然python 也可以使用 subprocess.call('mkdir xxx') 调用外部的 mkdir 程序实现, 这基本就是 Shell 的做法.

那么到底哪个效率更高呢?
Shell 的调用是进程级别的切换, 而其它语言一般使用调用库的方法实现系统调用, 这是栈级别的切换. Shell 一旦复杂了就是频繁的进程切换, 对于系统来说进程切换是十分重量级的操作, 而栈级别的切换要轻量得多.

Shell 的优势是什么?
Shell 的优势就是能轻易调用所有用其他语言编写的程序. 例如调用 mkdir 程序, Shell 就是 mkdir, 而其他语言可能是 sbuprocess.call('mkdir xxx'); Shell 调用 docker Shell 就是 docker run xxx, docker delete xxx, 其他语言可能是 subprocess.call("docker run xxx") 之类的.

Shell 实现的功能,其他语言也能实现,可能会稍微复杂一些,难道 Shell 就这点优势吗?
Shell 实现的功能, 基本上是用其他语言实现了之后再调用的, 那么很明显其他语言实现和 Shell 语言实现就是鸡和鸡蛋的关系.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,365评论 0 5
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,719评论 0 10
  • 第一章 1.Linux是一套免费使用和自由传播的类UNIX操作系统,它可以基于Intel x86系列处理器以及Cy...
    yansicing阅读 5,326评论 0 9
  • 一,shell题记 不懂shell的程序员不是好程序员,学习shell是为了自动化,使用自动化可以非常有效的提高工...
    架构师小秘圈阅读 8,720评论 3 70
  • 1.创建文件夹 !/bin/sh mkdir -m 777 "%%1" 2.创建文件 !/bin/sh touch...
    BigJeffWang阅读 10,020评论 3 53