shell基本知识

2023-05-16

为什么学习和使用Shell编程

什么是Shell

 shell的起源

shell的功能

 shell的分类

如何查看当前系统支持的shell?

如何查看当前系统默认shell?  

驼峰语句

shell脚本的基本元素

shell脚本编写规范 

 shell脚本的执行方式      

shell脚本的退出状态 (查看状态echo $?)

执行脚本的方法


为什么学习和使用Shell编程

对于一个合格的系统管理员来说,学习和掌握 Shell 编程是非常重要的。通过编程,可以在很大程度 上简化日常的维护工作,使得管理员从简单的重复劳动中解脱出来。
shell 程序的特点:
1 、简单易学
2 、解释性语言,不需要编译即可执行

什么是Shell

在学习 Shell 编程之前,必须弄清楚什么是 Shell 。为了能够使读者在学习具体的 Shell 编程之前对 Shell有个基本的了解,本节将对 Shell 进行概括性的介绍,包括 Shell 的起源和功能。

 shell的起源

1964 年,美国 AT&T 公司的贝尔实验室、麻省理工学院及美国通用电气公司共同参与开始研发一套 可以安装在大型主机上的多用户、多任务的操作系统,该操作系统的名称为Multics
1970 年,丹尼斯 里奇和汤普逊启动了另外一个新的多用户、多任务的操作系统的项目,他们把这 个项目称之为UNICS 。 1973年,使用 C 语言重新编写了 Unix 。通过这次编写,使得 Unix 得以移植到其他的小型机上面。 1979年,第一个重要的标准 UNIX Shell Unix 的第 7 版中推出,并以作者史蒂夫 伯恩( Stephen Bourne)的名字命名,叫做 Bourne Shell ,简称为 sh
20 世纪 70 年代末, C Shell 作为 2BSD UNIX 的一部分发布,简称 csh
之后又出现了许多其他的 Shell 程序,主要包括 Tenex C Shell tcsh )、 Korn Shell ksh )以及 GNU Bourne-Again shell( bash )。

shell的功能

Shell 又称命令解释器,它能识别用户输入的各种命令,并传递给操作系统。它的作用类似于
Windows 操作系统中的命令行,但是, Shell 的功能远比命令行强大的多。在 UNIX 或者 localhost 中, Shell既是用户交互的界面,也是控制系统的脚本语言。

 shell的分类

Bourne Shell :标识为 sh ,该 Shell Steve Bourne 在贝尔实验室时编写。在许多 Unix 系统中,该 Shell是 root 用户的默认的 Shell 。 Bourne-Again Shell:标识为 bash ,该 Shell Brian Fox 1987 年编写,是绝大多数 localhost 发行 版的默认的Shell
Korn Shell :标识为 ksh ,该 Shell 由贝尔实验室的 David Korn 在二十世纪八十年代早期编写。它完 全向上兼容 Bourne Shell 并包含了 C Shell 的很多特性。 C Shell:标识为 csh ,该 Shell Bill Joy BSD 系统上开发。由于其语法类似于 C 语言,因此称为 C Shell。

如何查看当前系统支持的shell

[root@localhost ~] # cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

如何查看当前系统默认shell 

[root@localhost ~]# echo $SHELL

/bin/bash

驼峰语句

什么是驼峰语法?
骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字时, 一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母 ,例如:
myFirstName myLastName ,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。
除了驼峰命名法,另外还有匈牙利命名法。基本原则是:变量名 = 属性 + 类型 + 对象描述。匈牙利命
名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一个单 词或多个单词组合,该单词要指明变量的用途。比如m_lpszStr, 表示指向一个以 0 字符结尾的字符串的长 指针成员变量。 另外,有些程序员喜欢用下划线。比如file_name

shell脚本的基本元素

对于一个基本的 Shell 程序来说,应该拥有以下基本元素:
声明:声明用哪个命令解释器来解释并执行当前脚本文件中的语句,一般写的解释器为
#!/bin/bash
2. 命令:可执行语句,实现程序的功能。
3. 注释:说明某些代码的功能,通过在代码中增加注释可以提高程序的可读性。
1 )单行注释: # 开头的一整行都是注释,例如:
#comment1
#comment2
#comment3
……
2 )多行注释,使用冒号 “:” 配合 here document 可实现多行注释,例如:
:<<BLOCK
…… 注释内容
BLOCK
4. 赋予 rx 的权限

shell脚本编写规范 

1 )脚本文件名应见名知意,例如 backup_mysql.sh
2 )文件开头指定脚本解释器 #!/bin/sh #!/bin/bash
3 )开头加版本特权等信息

# Date: 创建日期
# Author: 作者
# Mail: 联系方式
# Function: 功能
# Version: 版本
4 )脚本中尽量不要用中文注释
别吝啬添加注释,必要的注释方便自己别人理解脚本逻辑和功能;
尽量用英文注释,防止本机或切换系统环境后中文乱码的困扰;
单行注释,可以放在代码行的尾部或代码行的上部;
多行注释,用于注解复杂的功能说明,可以放在程序体中,也可以放在代码块的开始部分。
5 )多使用内部命令
常用的内部命令有: echo eval exec export read shift exit

 shell脚本的执行方式      

1)bash ./filename.sh(产生子进程,再运行,使用当前指定的bash shell去运行)

2 ./filename.sh (产生子进程,再运行,使用脚本里面指定的 shell 去运行。使用该种方式执行需要 x 权限
3 source ./filename.sh source 命令是一个 shell 内部命令,其功能是读取指定的 shell 程序文件,并 且依次执行其中的所有的语句,并没有创建新的子shell 进程,所以脚本里面所有创建的变量都会保存到 当前的shell 里面)
4 . filename.sh (和 source 一样,也是使用当前进程执行)

shell脚本的退出状态 (查看状态echo $?)

UNIX 或者 Linux 中,每个命令都会返回一个退出状态码。退出状态码是一个整数,其有效范围为 0~255。通常情况下,成功的命令返回 0 ,而不成功的命令返回非 0 值。非 0 值通常都被解释成一个错误 码。行为良好的UNIX 命令,程序和工具都会返回 0 作为退出码来表示成功。
Shell 脚本中的函数和脚本本身也会返回退出状态码。在脚本或者是脚本函数中执行的最后的命令会决定 退出状态码。另外,用户也可以在脚本中使用exit 语句将指定的退出状态码传递给 Shell
[root@localhost ~] # vim ~/.vimrc
shell 脚本的执行方式
1 )交互式执行
2 )作为程序文件执行(常用)
对于一组需要经常重复执行的 Shell 语句来说,将它们保存在一个文件中来执行。我们通常称这种包 含多个Shell 语句的文件为 Shell 脚本,或者 Shell 脚本文件。脚本文件是普通的文本文件,可使用任何的 文本编辑器查看或修改Shell 脚本。

执行脚本的方法

1 bash ./filename.sh (产生子进程,再运行,使用当前指定的 bash shell 去运行)
2 ./filename.sh (产生子进程,再运行,使用脚本里面指定的 shell 去运行。使用该种方式执行需要 x
权限)
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()
if expand( "%:e" ) == 'sh'
call setline(1, "#!/bin/bash" )
call setline(2, "#########################" )
call setline(3, "#File name:" .expand( "%" ))
call setline(4, "#Version:v1.0" )
call setline(5, "#Email:admin@test.com" )
call setline(6, "#Created time:" .strftime( "%F %T" ))
call setline(7, "#Description:" )
call setline(8, "#########################" )
call setline(9, "" )
endif
endfunc

 创建一个shell文件如图

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

shell基本知识 的相关文章

  • 深度学习-虚拟机当服务器的安装环境

    下载 Anaconda 清华大学开源软件镜像站 服务器端 1 Anaconda安装 将下载好的文件放在系统文件夹下 xff0c 然后输入bash Anaconda3 5 3 1 Linux x86 64 sh进行安装 注意 xff1a 对应
  • HTTP报文详解

    HTTP报文详解 目录 1 HTTP请求报文 2 HTTP响应报文 3 请求方法 4 消息头 4 1 请求消息头 4 2 响应消息头 5 状态码 5 1 1XX消息 5 2 2XX成功 5 3 3XX重定向 5 4 4XX客户端错误 5 5
  • FGSM论文阅读笔记

    文献原文 xff1a http arxiv org abs 1412 6572 引言 一些神经网络会错误的分类对抗样本 xff08 通过对数据集中的例子使用小但故意最坏情况的扰动形成的输入 xff09 xff0c 受扰动的输入会导致模型输出
  • CAN数据帧结构图解分析

    CAN数据帧的数据位结构主要包括以下几个部分 xff1a 起始位 xff08 Start of Frame xff0c SOF xff09 xff1a 1位 xff0c 用于标识一个CAN数据帧的开始 xff0c 其值为低电平 xff08
  • Android NDK 为什么要 extern “C”

    由于C 43 43 函数支持重载 xff0c 就是一个C 43 43 函数 xff0c 可以有不同的参数个数和类型 xff0c 编译后函数名会变 为了避免ndk load 的C C 43 43 库的时候找不到这个函数 xff0c 索性都用
  • linux 基础命令讲解--加密解密

    加密文件 xff1a 1 MD5 echo n 34 string 34 openssl md5 加密字符串 openssl md5 in test txt 加密文件 2 BASE64 echo 34 string 34 openssl b
  • 阿里云服务器(centos)如何远程连接?

    阿里云服务器 xff08 centos xff09 远程连接也有两种方法 xff0c 一种是直接在网页上远程连接 xff1b 另外一种是在本地远程连接 下面会把两种方法都说下 第一种 xff1a 直接在网页上远程连接 首先登陆阿里云账号 x
  • 阿里云服务器(Windows)远程连接后不显示桌面是为什么?

    有些人买了阿里云服务器 xff08 Windows xff09 远程连接后的界面是下图中这样的 没有我们平时看到的界面 xff0c 所以就不知道该怎么操作 xff0c 那么该怎么解决这个问题呢 xff1f 想知道怎么解决的话就要知道为什么会
  • Ubuntu18.04安装realsense d435i SDK和ROS Wrapper以及相机标定全过程

    第一步 xff1a 安装realsense SDK 1 用源码进行安装 xff1a https github com IntelRealSense librealsense 然后将下载的源码安装包放在文件夹下面 xff0c 我把文件夹放在了
  • 基于Android的智能求职招聘APP设计与实现

  • (一)华为弹性云服务器购买与使用

    登录华为云官网 选择立即购买 选择配置并购买 根据需要进行购买 华北 北京四按需计费随机分配GPU加速型g6 4xlarge 4Ubuntu 18 04 server 64bit for GPU 40GB xff08 需要GPU的选有GPU
  • C++继承和多态核心重点知识刨析,一文必拿下

    一 继承 继承的本质是为了复用 xff0c 复用基类的数据成员和方法 封装的本质是为了对外仅仅暴露必要的使用接口 内部的具体实现细节和部分的核心接口对外是不可见的 隐藏细节 仅对外开放必要功能性接口 正是由于封装隐藏所需 所以产生了公有属性
  • DockerFile文件详细解析

    DockerFile文件详细解析 所有文章不设限 xff0c 我们相遇偶然 xff0c 相散坦然 xff0c 互不打扰 xff0c 各自安好 xff0c 向阳而生 致敬尚硅谷周阳老师 xff0c 此处内容迁移学习来自于阳哥 xff01 Do
  • Cropper的一个demo

    1 摸鱼大法第一招 Cropper Cropper 就是基于canvas做的小插件 xff0c 下面做的是一个图片裁剪 xff0c 各位看官看看就行 xff0c 有什么意见多提 A code block import Cropper fro
  • 互斥锁和信号量

    一 同步互斥概述 在多任务操作系统中 xff0c 同时运行的多个任务可能都需要访问 使用同一种资源 多个任务之间有依赖关系 xff0c 某个任务的运行依赖于另一个任务 同步和互斥就是用于解决这两个问题的 互斥 一个公共资源同一时刻只能被一个
  • shell编程、makefile学习笔记

    windows r n linux n 1 shell介绍 1 1 shell是操作系统的终端命令行 1 shell可以理解为软件系统提供给用户操作的命令行界面 xff0c 可以说它是人机交互的一种方式 2 我们可以使用shell和操作系统
  • linux系统--find命令详解以及定时查看系统文件是否被修改

    一 概述 xff1a 因为Linux下面一切皆文件 xff0c 经常需要搜索某些文件来编写 xff0c 所以对于linux来说find是一条很重要的命令 linux下面的find指令用于在目录结构中搜索文件 xff0c 并执行指定的操作 它
  • 0429 嵌入式学习笔记 (32)STL标准模板库/类的方法

    文章目录 STL 标准模板库 类的方法 STL 标准模板库 从逻辑层面看 xff0c 在STL中体现了泛型化程序设计思想 从实现层次看 xff0c 整个STL是以一种类型参数化的方式实现的 STL六大组件 1 容器 2 迭代器 3 算法 4
  • Mapreduce(Java程序编写)

    Mapreduce xff1a 分布式计算框架 开发人员要做的事情 xff1a 实现Map和Reduce函数 一般只调用HDFS的话 xff0c 不实际Yarn的工作 xff0c 调用Mapreduce时才会调用yarn 三台设备Mapre
  • 蓝桥杯嵌入式(STM32G431RBT6)入门第二天——建立自己的初始化文件|CSDN创作打卡

    接前一天 xff0c 将所有工程拷贝到建立的另外一个文件夹LED中 xff0c 在Inc文件夹中建立led h文件 xff0c 在Src文件夹中建立led c 用keil打开工程 xff0c 点击下图中的图标 xff0c 新建一个USER分

随机推荐

  • 如何把img格式转换成vmdk格式

    下载qemu xff0c 这里是下载好的 xff0c 也可以自行下载 链接 xff1a https pan baidu com s 1UEJupO5YyFgX8MnpywikeA 提取码 xff1a ttil 安装好后 xff0c 进入qe
  • 瀑布流插件vue-masonry

    前言 之前其实有分享过一篇纯CSS实现瀑布流的方法 https oliver blog csdn net article details 126450691 xff0c 但纯CSS实现的方案都不是比较好的方案 xff0c 总归有一些各式各样
  • 集合学习之Iterator接口

    1 Iterator接口概述 Iterator接口表示对集合进行迭代的迭代器 Iterator接口为集合而生 xff0c 专门实现集合的遍历 此接口主要有如下两个方法 xff1a hasNext 判断是否存在下一个可访问的元素 xff0c
  • 自协商技术

    摘要 xff1a 本文介绍了自协商的基本原理和工作模式 xff0c 以及自协商相关细节介绍 缩略语 xff1a FLP xff1a 快速连接脉冲 NLP xff1a 普通连接脉冲 CSMA CD xff1a 载波监听多路访问 冲突检测 PC
  • Armbian 笔记五_如何在 Armbian 上安装 xfce4 桌面

    目录 使用 armbian software 选择 Desktop 安装 xfce4 桌面 准备工作 正常开机 必须存在着一个普通用户 连接有线网络 下载安装设置 armbian software 201 是 Desktop 输入普通用户
  • 数据结构|队列

    队列 知识框图考点分析1 什么样的链表适合作为链队2 判空判满 常考小题 知识框图 队列相关知识点较为简单易懂 xff0c 不再叙述 xff08 注意 FIFO 特点 xff0c 框架遗漏 xff09 本文主要针对考点中的2 3点进行知识总
  • ST-LINK v2下载器简单使用

    ST LINK v2下载器简单使用过程 文章目录 ST LINK v2下载器简单使用过程前言1 驱动安装1 1 驱动安装常规步骤1 2 驱动失败解决方法 2 代码下载 amp 调试2 1 代码下载2 1 1 JTAG接法 xff1a 2 1
  • linux系统--help/man/info/whatis命令详解

    1 man命令的用法 man gt gt manual man是手册的缩写 man man 查看man命令的帮助 man passwd 查看passwd命令的帮助 man的级别 1 系统命令 2 系统接口 3 函数库 4 特殊文件 xff0
  • ESP8266 WIFI 模块和手机通信

    ESP8266 WIFI 模块通过TTL模块和手机通信 文章目录 ESP8266 WIFI 模块通过TTL模块和手机通信前言1 调试工具2 模块接线3 模块作为客户端 STA3 1 模块指令3 2 指令示例3 3 数据传输 4 模块作为服务
  • vscode安装git工具

    1 打开vscode后 xff0c 提示如图 2 点击 下载Git 3 自动跳转到git下载官网 xff0c 没跳转的直接去网页搜索也是可以进去的 4 点击下载 5 下载完之后打开安装包 xff0c 无脑下一步安装 6 重启vscode 会
  • Python入门之无参装饰器

    1 什么是装饰器 器指的是工具 装饰指的是没其他事物添加额外的东西点缀 一起的解释就是 xff1a 定义一个函数 xff0c 该函数是用来装饰其他函数添加额外的功能 2 为何要用装饰器 开放封闭原则 开放指的是扩展功能是开放的 封闭 xff
  • 数据清洗的一般方法和步骤

    在正式分析数据前 xff0c 我们通常需要先预处理一下数据 xff0c 比如筛选有效样本 xff0c 定义变量格式 xff0c 处理缺失值等 xff0c 这些操作也就是是数据清洗的过程 xff0c 目的是把数据整理成比较清洁的形式 xff0
  • 【操作系统】死锁(详细)

    文章目录 一 死锁的概念二 死锁的产生因素三 死锁的必要条件1 互斥条件2 占有和等待条件 xff08 部分分配条件 xff09 3 不剥夺条件4 循环等待条件 xff08 环路条件 xff09 四 死锁防止1 破坏互斥条件2 破坏占有和等
  • 浏览器验证码图片(缩略图)显示不出来问题解决办法

    上面是我未解决前的网页图片 xff0c 这种缩略图显示不出来很着急 尤其是验证码图片那种 xff0c 找了很多网上的方法都不管用 xff0c 最终才弄出来的 解决办法 xff1a 切换网络 我之前是用的学校的校园网 xff0c 结果如上图
  • ROS 学习笔记 坐标变换

    TF坐标变换 TF xff1a TransForm Frame xff0c 坐标变换 坐标系 xff1a ROS 中是通过坐标系统开标定物体的 xff0c 确切的将是通过右手坐标系来标定的 注 xff1a 在ROS中坐标变换最初对应的是tf
  • 51单片机之智能小车(避障、跟随、循迹)

    目录 基本概述 硬件组成 功能 关键字 模块介绍 电机模块L9110S 循迹模块 xff08 TCRT5000传感器 xff09 红外避障模块 测速模块 小车 移动小车 xff08 控制电机转动 xff0c 使小车前进 后退 左转 右转 x
  • STM32之USART

    USART USART Universal Synchronous Asynchronous Receiver Transmitter 是一个全双工通用同步 异步串行收发器 xff0c 该接口是一个高度灵活的串行通信设备 对于USART常用
  • Gvins运行结果处理,时间戳对齐并与RTK真值对比 (matalb代码)

    最近在学习Gvins xff0c 准备自己用matlab处理一下结果 以sports field数据集为例 xff0c 运行Gvins的程序后 xff0c 将Gvins的导航结果保存到CSV文件中 xff0c 得到如下图所示的数据格式 其中
  • ubuntu系统创建定时任务--crontab

    关于crontab cron是一个Linux定时执行工具 xff0c 可以在无需人工干预的情况下运行作业 在Ubuntu server 下 xff0c cron是被默认安装并启动的 通过 etc crontab文件 xff0c 可以看到以下
  • shell基本知识

    为什么学习和使用Shell编程 什么是Shell shell的起源 shell的功能 shell的分类 如何查看当前系统支持的shell xff1f 如何查看当前系统默认shell xff1f 驼峰语句 shell脚本的基本元素 shell