「速通Shell」初次走近Shell,Shell是什么?

news2024/11/14 13:37:01

目录

  • 初次走进Shell
    • Shell是什么
    • Shell工作原理
  • Shell分类
    • Shell的优势
  • 第一个Shell脚本
    • Hello World
    • Shell执行方式
      • 绝对路径执行
      • 相对路径执行
      • 脚本命令执行
      • 系统命令执行
  • 总结

对于开发者来说,除了掌握Java、C/C++等主要编程语言外,还需要掌握支撑性的工具语言和库,学习和掌握Shell,能够帮助我们高效便捷的编译和运行程序,让系统代替复杂的人工操作。通过速通Shell系列,我们一起走近Shell,读懂Shell,用好Shell,提高程序执行效率和日常工作效率。

初次走进Shell

要想走进Shell的世界,我们需要先观其貌,识其才,进而攻其心,得其人,所谓知己知彼,无往不利。我们从Shell的概念、原理、分类和优点开始。

Shell是什么

Shell 是一种脚本语言,一种命令语言,也是一种程序设计语言。脚本语言最显著的特点是解释执行而非编译执行,一个Shell脚本主要由原本需要在命令行输入的命令组成,Shell可以控制进程和文件,以及启动和控制其它程序。Shell 通过提示输入,向操作系统解释该输入,然后处理来自操作系统的结果输出,管理用户与操作系统之间的交互。

Shell工作原理

计算机设备是由一个个物理硬件组成的,本身不具备运行处理能力,需要通过内核和驱动对硬件进行操作,驱动其工作。在计算机系统中,内核接口是隐藏起来的,用户不能直接操作内核,我们需要通过一个中间程序,接收用户操作命令,将其传递给内核,推动内核工作,进而推动硬件工作。Shell便是这个中间程序,起到连接操作系统内核和用户的作用。

所以Shell起到一个代理商的作用,通俗点说,有点像一个代购。一般情况下,我们难以直接获得海外商品,可以将需求提给代购。代购理解消化需求后,去海外供应商采购商品,供应商就是内核。供应商收到采购指令,将商品返回给代购,代购将商品可视化的呈现给用户。

Shell分类

随着历史发展和技术演进,Shell诞生了数个版本,它们彼此借鉴学习,推陈出新,使得Shell更容易被用户接受和使用,极大释放了生产力。主要Shell版本如下:

  • Bourne Shell

    标识为sh,由Steve Bourne在贝尔实验室开发,在UNIX系统中被普遍使用,在编程方面比较优秀,但在用户交互方面没有其他Shell优秀。

  • Bourne-Again Shell

    标识为bash,该Shell是linux操作系统上使用最为广泛的Shell,也是现在的主流Shell,在Bourne Shell基础上增强了很多特性,如命令补全,命令历史表等。

  • Korn Shell

    标识为ksh,二十世纪八十年代早期由David Korn在贝尔实验室编写开发。它完全向上兼容Bourne Shell并包含了C Shell的很多特性,集成了C Shell和Bourne Shell优点。

  • C Shell

    标识为csh,C Shell开发于二十世纪七十年代末,作为编程语言使用时,语法类似于C,更容易被接受。此外,C Shell还提供了增强交互使用的功能,如作业控制、命令行历史和别名等。但是类C的特点使其降低了作为脚本语言的灵活性,因此C Shell对于个人用户而言运行比较慢。

现如今,在我们日常系统中,bash已经成为Shell编程的不二人选,因此速通Shell系列也是全部采用bash版本。

Shell的优势

没有金刚钻就揽不了瓷器活,Shell能够在软件系统中有着举足轻重的作用,自然有着它的天然优势,简单、易用、高效是其三大基本原则。

  • 语法简单

    Shell看似复杂,实际上语法和结构是比编译执行的编程语言要简单,主要内容是命令调用、语句拼接、文件读写等,逻辑复杂度一般不会非常高;

  • 使用方便

    Shell将一系列操作复杂的命令存储在一个或几个脚本文件内,只需要一次调用就可以顺序执行完所有命令;

  • 适用范围广

    Shell是解释执行,灵活性高,适用场景多,例如代码编译、版本打包发布、软件安装、程序运行、log存储、进程监控等一系列操作繁琐、重复性高的工作,均可以依靠Shell来高效准确完成。

第一个Shell脚本

Hello World

按照惯例,我们编写一个最基本的Shell脚本hello.sh:

#!/bin/bash
echo "hello world"

代码只有两行,但也值得进行一下分析。

脚本文件第一行使用#!符号指定一个脚本的解释器,如#!/bin/bash、#!/bin/sh等,该行被#注释,所以不会被当作命令来执行,但计算机通过该注释信息得知应该使用什么解释器来解释整个脚本文件中的所有有效代码,在上面的例子中使用的解释器是/bin/bash。

脚本文件第二行echo 命令用于向窗口输出文本,hello word被双引号括起来,表示是一个字符串。

Shell脚本文件以sh作为扩展名,sh代表Shell。脚本写完,下面看一下脚本怎么运行。

Shell执行方式

Shell是解释型语言,常用执行方法有四种:绝对路径执行、相对路径执行、脚本命令执行、系统命令执行。

绝对路径执行

刚创建出来的脚本文件是没有可执行权限的,因此绝对路径执行时需要先给脚本文件赋予可执行权限,使用命令chmod +x hello.sh即可。执行完毕,打印hello world。

在这里插入图片描述

相对路径执行

相对路径就是通过./来执行脚本文件,操作最为方便。

在这里插入图片描述

脚本命令执行

通过sh或者bash命令来执行脚本,不需要为脚本文件分配可执行条件。该方式下,脚本默认解释器类型为运行命令所指定,不受脚本文件开头的#!/bin/bash、#!/bin/sh所控制。

在这里插入图片描述

系统命令执行

通过source命令来执行脚本,在执行时hello.sh作为了参数source命令的参数,因此也不需要hello.sh有执行权限。

在这里插入图片描述

总结

在项目开发中,脚本是工具性语言,受到的关注不如C/C++、Java等语言高,但它是操作系统和软件项目运行的推进器和管理员,尤其是在运维上起到了关键作用。掌握Shell编程,实现软件自动化,大大提升了我们的工作效率,提高了系统的运行效率。

一支战队是否优秀,C位非常重要,辅助也要出彩,相辅相成。

下一篇我们将进入shell编程非常关键的变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/459538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vagrant 安装

系列文章目录 文章目录 系列文章目录前言一、安装地址二、安装步骤注意事项三、常用命令四、问题总结 前言 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内…

机器人方向的人工智能工具是助手还是平替

本文内容严格按创作模板发布: 近日育碧开发了人工智能工具 Ghostwriter,可以一键生成游戏NPC对话。不少游戏开发者担心AI写手工具的出现会让自己“饭碗”不保,但Swanson表示这个工具只是为了提供第一稿的 barks来减少对话生成工作的繁琐度。…

Linux网络编程TCP粘包问题解析及解决方法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、一次发送多个数据实验二、导致问题的原因三、解决方案之一:延时发送四、知识点补充发送缓冲区和接收缓冲区五、解决方法总结 前言 本篇文章将引…

Java-JDK动态代理(AOP)使用及实现原理分析

Java-JDK动态代理(AOP)使用及实现原理分析 第一章:代理的介绍 介绍:我们需要掌握的程度 动态代理(理解) 基于反射机制 掌握的程度: 1.什么是动态代理? 2.动态代理能够做什么? 后面我们在用Spirng和Mybatis的时候,要理解怎么使用的. 1.什么是代理? 代理…

PID循迹机器人及整定

如何对线路循迹机器人进行编程 如何对线路循迹机器人进行编程 (robotresearchlab.com)PID调谐文章:http://robotresearchlab.com/2019/02/16/pid-line-follower-tuning/ 介绍人们选择对循迹机器人进行线路编程的两种主要方式,并比较两者。将详细比较“…

绘声绘影2023简体中文版新功能介绍

会声会影是一款专业的数字音频工作站软件,它提供强大的音频编辑和制作功能,被广泛应用于音乐创作、录音棚录制以及现场演出等领域。会声会影的最新版本会声会影2023将于2022年底发布,主要功能和新功能详述如下: 会声会影2023主要功能: 1. 直观易用的界面:会声会影采用简洁而不…

C语言入门篇——数组篇

目录 1、数组 2、一维数组的创建和初始化 2.1数组的创建方式: 2.2数组的初始化 2.3一维数组的使用 ​2.4一维数组在内存中的存储 3、二维数组的创建和初始化 3.1二维数组的创建 3.2二维数组的初始化 3.3二维数组的使用 3.4二维数组在内存中的存储 4、数组…

SpringBoot中一个注解优雅实现重试Retry框架

目录: 1、简介2、实现步骤 1、简介 重试,在项目需求中是非常常见的,例如遇到网络波动等,要求某个接口或者是方法可以最多/最少调用几次;实现重试机制,非得用Retry这个重试框架吗?那肯定不是,相信…

【云计算•云原生】2.云计算环境下的新趋势—云原生

文章目录 1.什么是云原生2.云原生概述2.1 微服务2.2 容器云2.3 serverless无服务器2.4 DevOps2.5 持续集成和持续交付2.6 openStack 1.什么是云原生 按照自己的理解,可以将云原生拆分成云原生,云就是上一节中的云计算的云;原生即为诞生的环境…

Visual Studio C# WinForm开发入门(3):各种控件介绍

1、窗体 窗口就是打开程序我们所面对的一个面板,里面可以添加各种控件,如下图所示,我们可以在属性栏设置其标题名称、图标、大小等。 双击标题框,会生成Load函数,也可以到事件里面去找 Load函数是窗口生成后需要…

Spring Doc OpenAPI3.0 抛弃SpringFox拥抱SpringDoc

Spring Doc 1 简介 SpringDoc是SpringBoot 的API文档工具。官网:https://springdoc.org/ 在使用SpringBoot 2.6以前去创建API文档工具一般会采用SpringFox提供的Swagger库,但是由于SpringBoot版本的不断升级和SpringFox摆烂不更新,导致了S…

springboot项目需要读取非application.yml/properties 的配置文件

目录: 1、操作步骤2、总结3、扩展4、第二种方法获取配置文件bean 1、操作步骤 1.新建配置文件: 2.编辑配置文件: test-serverrd-dev02.jr.rong360.com3.新建Config类: Component PropertySource(value "kirara.properti…

销量破亿,董洁直播间凭何出圈?

近期,“没有五位数走不出”的董洁直播间火了…… 纵观这几年各大平台直播带货,火已不是什么新鲜事,而为何董洁的直播能火上热搜呢?本期,千瓜将解析董洁直播,同品牌方聊聊小红书直播的那些事儿。董洁「种草式…

Win10分辨率怎么看?2种必须学会的方法!

案例:win10分辨率 【为了方便办公,最近我的电脑连接了2个显示屏,但感觉电脑显示怪怪的,可能是分辨率设置不对,大家知道应该怎么查看电脑的分辨率吗?感谢感谢!】 我们的win10系统支持多种分辨率…

ChatGPT的未来:人工智能技术的新发展趋势

第一章:人工智能技术的新发展趋势 近年来,随着人工智能技术的不断发展和应用,ChatGPT这样的大型自然语言处理模型已经成为人工智能技术的重要组成部分。未来,人工智能技术的发展将更加快速,我们可以看到以下几个方面的…

制造型企业为何需要MES管理系统,企业怎样选择合适的MES

MES管理系统是专门针对制造型企业而设计的,能实现对生产车间、工厂信息化管理,帮助制造型企业提高生产效率,加快数字化转型。目前针对制造型企业生产效率、企业竞争力和生产管理状况的需求,MES管理系统已经成为实现生产经营目标的…

MySQL创建用户并赋权限

MySQL创建用户并赋权限 省流1.创建mysql用户1.1 新建用户1.2 查询用户信息 2. 授权用户2.1 指定数据库和表赋权2.2 赋予全部权限2.3 查看用户权限2.4 回收用户权限 3. 修改用户密码4. 删除用户5. 刷新权限(务必执行) 省流 如果只是希望新建一个用户并且赋予全部执行权限&#…

android react native报错

1.报错图片 解决方案: android下的build.gradle文件 修改 如图 报错 E:/androidData/caches/transforms-2/files-2.1/399126eae79af6235d7a4ae871926a31/jetified-kotlin-stdlib-1.6.10.jar!/META-INF/kotlin-stdlib.kotlin_module: Module was compiled with an i…

华为云 HCIP云迁移 学习课程提供的考试样题提交之后没有反馈正确答案的问题

最近在考HCIP的云迁移,但是他提供的考试样题昨晚发现没有正确答案,只会告诉你对错,判断题还好解决,但是多选题就麻烦了。这边研究了一下,share一下,方便大家学习和验证自己的学习成果 这边去看了他的 api r…

杰理-OTA升级电量限制

杰理-OTA升级电量限制 获取升级异常状态标志位(升级过程中断开重新连接,不做电量限制)