Shell ❀ 基础知识概述

2023-05-16

文章目录

  • 一、基本概念
    • 1、脚本文件命名方式
    • 2、解释器分类
    • 3、基本基本组成内容
    • 4、脚本编写规范与格式说明
    • 5、自动生成脚本的注释与配置信息

一、基本概念

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

1、脚本文件命名方式

脚本文件名称保持不冲突即可,基于方便使用和查阅因此相对制定了多数人使用的规范与标准,其中大驼峰与小驼峰命名法较为实用。

  • 大驼峰命名法MyLastNameMyFirstName
  • 小驼峰命名法myLastNamemyFirstName

2、解释器分类

  • 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
/usr/bin/sh
/usr/bin/bash

查看系统默认的shell解释器

[root@localhost ~]# echo $SHELL		# 系统自带变量大多数均为大写格式,Linux系统区分大小写
/bin/bash

3、基本基本组成内容

  • 脚本第一行标注代码解释器路径:#!/bin/bash
  • 注释:说明代码的功能,使用#标识单行注释;
  • 可执行语句:实现代码的功能。

案例如下:

[root@localhost ~]# vim shell.sh
#!/bin/bash						# 注明代码解释器

# this is test!					# 注释
echo -e "this is test txt!"		# 代码功能
[root@localhost ~]# sh shell.sh 
this is test txt!

4、脚本编写规范与格式说明

  • 开头指定脚本解释器:由于版本问题,使用sh与bash的解释器可能存在差异,因此要求必须在shell脚本第一行标识代码运行解释器。
#!/bin/bash
#!/bin/sh
# 其他行由#表示注释
  • 开头加版本权限等信息:非必须要求,可以选择性添加。
# Data:创建日期
# Author:作者
# Mail:邮件或联系方式
# Function:实现功能
# Version:版本信息
  • 脚本尽量不要用中文注释:Linux系统默认使用英文UTF-8。

  • 多使用内部命令:例如使用绝对路径而非相对路径。

  • 尽可能减少代码内容:代码数量与运行效果成反比例。

  • 减少没有必要执行的命令,如下面例子中的查看:cat

# 过滤某个文件内的user01
[root@localhost shell]# cat /etc/passwd | grep user01
user01:x:1002:1002::/home/user01:/bin/bash

[root@localhost shell]# grep user01 /etc/passwd
user01:x:1002:1002::/home/user01:/bin/bash
  • 代码缩进
# Linux系统默认缩进为8字符
[root@localhost shell]# vim UserAdd.sh
#!/bin/bash

i=1
while [ $i -le 10 ]
do
	    if [ $i -le 9 ]
	    then
	    	    username=user0$i
	    else
	    	    username=user$i
	    fi
	    ! id $username &> /dev/null && {
	    	    useradd $username
	    	    echo $username | passwd --stdin $username &> /dev/null
	    }
	    let i++
done
  • 仔细阅读出错信息:出错信息提供了纠错建议,合理使用错误信息可以最快解决代码问题。

纠错可以使用sh -x显示shell脚本执行过程,利用排查故障。

[root@localhost ~]# sh shell.sh 
shell.sh: line 4: cho: command not found		# 脚本第4行cho命令未找到

[root@localhost ~]# cat -n shell.sh 
     1	#!/bin/bash
     2	
     3	# this is test!
     4	cho "this is test txt!" 				# 此处应该为echo命令

# 使用sh -x显示脚本执行过程
[root@localhost ~]# sh -x shell.sh 
+ cho 'this is test txt!'						# 执行cho命令时返回未找到错误
shell.sh: line 4: cho: command not found
  • 脚本以sh为扩展名,如UserAdd.sh

5、自动生成脚本的注释与配置信息

在书写脚本规范时,可以使用以下脚本自动添加所需内容,减少重复工作正是脚本代码最本质的功能。

[root@localhost shell]# vim ~/.vimrc
set number
# 开启行号显示
set tabstop=4
# 设置tab缩进为4字符(Linux系统默认为8字符)
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
# 创建文件时后缀匹配到则执行自动填写脚本规范信息函数SetTitle

func SetTitle()
	if expand("%:e")=='sh'
        call setline(1,"#!/bin/bash")
        call setline(2," ")
        call setline(3,"# Data:创建日期")
		call setline(4,"# Author:作者")
 		call setline(5,"# Mail:邮件或联系方式")
		call setline(6,"# Function:实现功能")
 		call setline(7,"# Version:版本信息")
        # 当后缀为sh时,自动添加以上内容
	endif
endfunc

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

Shell ❀ 基础知识概述 的相关文章

  • 成功解决PackageNotFoundError: Package not found at

    Python使用docx库时 span class token keyword from span docx span class token keyword import span Document document span class
  • vscode导入项目并启动

    不好意思图片不够清晰 我重新编辑一下文本信息 一 添加文件 打开vscode 如果之前没有添加过项目 可以点添加项目 也可以直接拖拽进去都是可以的 之前如果添加过 可以亦可以直接拖进去 但是只要项目之间互不干扰就可以 二 选择项目目录右键打
  • stm32f103c8移植Free RTOS遇到的bug和解决措施

    一 SVC系统调度错误 1 现象 xff1a 进入不了task 2 解决措施 xff1a xff08 1 xff09 将stm32f1xx it c里的void SVC Handler xff08 void xff09 函数给注释了 原因
  • FreeRTOS 实时内核实用指南之第一章任务管理知识总结

    任务函数顶层任务状态创建任务任务优先级扩充 非运行态 空闲任务与空闲任务钩子函数改变任务优先级删除任务调度算法 简述 一 任务函数 1 pvParameters 代表传入函数的参数 2 变量i和变量j 是在任务函数中的变量 xff0c 但是
  • 安装 kubectl

    以 Linux 为例 xff0c 两步 xff1a 1 下载 span class token function curl span span class token parameter variable LO span span clas
  • 关于单应性矩阵的若干思考

    1 名词解释 单应与射影变换是同义的 射影变换描述的是SE 2 到SE 2 的映射关系 映射与变换同义 映射h xff1a SE 2 到SE 2 是射影映射的充要条件是 xff1a 存在一个3x3非奇异矩阵H xff0c 使得任何一个用矢量
  • 自己的Docker Hub仓库 拉取镜像、推送镜像

    docker将本地镜像放入自己的Docker Hub仓库 首先到官网注册账号 xff1a https hub docker com 在本地Linux登录docker xff1a docker login 用户名 xff1a libowen1
  • 在gittee上建立远程仓库

    1 注册登录码云 xff0c 完善个人信息 2 设置本机绑定SSH公钥 xff0c 实现免密码登录 xff01 xff08 免密码登录 xff0c 这一步挺重要的 xff0c 码云是远程仓库 xff0c 我们是平时工作在本地仓库 xff01
  • 用windows自带WSL实现Ubuntu使用及ROS安装及gazebo黑屏解决

    Windows自带WSL实现Ubuntu使用 ROS安装 可视化桌面 gazebo黑屏解决 1 Ubuntu安装1 1 开放权限1 2 安装1 3 初始化 2 桌面环境配置2 1 换镜像源2 2 安装可视化桌面2 2 1 远程桌面连接 3
  • Optitrack视觉定位下基于ROS及PX4搭建四旋翼多机飞行平台

    Optitrack视觉定位下基于ROS及PX4搭建四旋翼多机飞行平台搭建 1 单机平台1 1 四旋翼硬件组装a 注意 1 2 机载板环境配置1 3 飞控参数配置a 注意 1 4 实飞全流程 2 多机通信2 1 多机ip地址存储2 2 ROS
  • Optitrack使用说明-基于ROS&vrpn实现的室内定位

    Optitrack使用说明 基于ROS amp vrpn实现的室内定位 待续
  • C语言实现http请求器

    C语言实现http请求器 项目介绍 本项目完成一个http客户端请求器 xff0c 该请求器往服务器发送请求 xff0c 并接受服务器发来的响应数据 程序执行流程 建立TCP连接在TCP连接获得的socket的基础上 xff0c 发送htt
  • 【 ROS 软件包 】ROS安装软件包的两种方法

    使用apt安装 xff0c 安装在 opt ros melodic share目录下 xff1a sudo apt span class token operator span get install ros span class toke
  • 【 PID 算法 】PID 算法基础

    前言 xff1a 这两天打算找个实习 xff0c 奈何感觉自己有点菜 xff0c 所以 xff0c 就补习了一下知识 xff0c 说一下 xff0c 这个PID算法吧 一 简介 PID即 xff1a Proportional xff08 比
  • 7、OPencv 图形轮廓检测

    要想实现轮廓检测 xff0c 首先我们需要对待检测的图像进行图像处理 xff1a 图像灰度化 高斯滤波 Canny 边缘检测 边缘检测放大处理 提取轮廓 一 实现简单的全图型检测 即只要将drawContours第三个参数设置为 1 既能实
  • Spring Boot 接口统一前缀

    需求 需求如题 xff0c 想给一个 spring boot 项目的所有请求路径添加统一前缀 xff0c 可以通过 context path 来配置 但是在同时存在静态资源和 Controller 接口的项目中 xff0c 如果希望静态资源
  • 一文读懂pid控制器

    文章目录 PID控制器1 控制器1 1 电机速度控制系统1 2 温度或水位控制系统1 3 小小总结 2 PID3 模拟式PID4 数字式PID4 1 位置式PID算法4 1 2 位置式pid算法的缺点 4 2 增量式PID算法4 2 2 增
  • Gazebo创建围墙并生成.world文件

    Gazebo创建围墙并生成 world仿真环境文件 文件说明 world文件是gazebo中搭建的仿真环境保存后的文件格式 xff0c 其中包含了若干个模型文件 world文件如图所示 xff1a 其中相关参数是gazebo基于我们在gaz
  • Ubuntu18.04分区方案

    由于Ubluntu18 04安装和16 04基本一样 xff0c 因此就没什么好说的 xff0c 主要记录一下分区方案 硬盘总容量 xff1a 500G 分区方案 xff1a EFI分区 逻辑分区 xff0c 空间起始位置 xff0c 10
  • Ubuntu18.04搭建AirSim+ROS仿真环境

    AIRSIM在UBuntu 18 04上构建的官网文档 一 安装UE4引擎 AIRSIM是依赖于UE4引擎实现的 因此在安装AIRSIM之前要安装UE4引擎 1 获取UE4的github许可 在Ubuntu上安装UE4引擎需要从源文件进行编

随机推荐

  • OpenCV-Python学习笔记(使用opencv识别物体的位置,找到中心点位)

    使用opencv识别物体的位置 xff0c 找到中心点位 xff1a 步骤 xff1a 先拿到图像 gt 进行高斯滤波 gt 进行灰度处理 gt 进行二值化 gt 进行开运算 gt 轮廓提取 gt 计算中心点位 效果图如下 xff1a 代码
  • ROS下使用realsense-d435i跑通 rgbdslam_v2运行踩坑完成

    准备工作 rbgdslam v2 按照github 实验环境Ubuntu 16 04 ROS kinetic 如果你电脑安装PCL版本是1 7 xff0c 那么请直接跳到错误1 xff0c 如果你也不知道有没有 xff0c 或者版本多少 x
  • ROS学习 catkin CMakeList.txt详细介绍

    ROS中catkin CMakeLists txt的内容 CMakeList txt文件是CMake编译系统编译软件包过程的输入文件 任何CMake兼容包都包含一个或多个CMakeLists txt文件 xff0c 这些文件描述了如何编译代
  • ROS Catkin 教程之 CMakeLists.txt

    1 概览 CMakeLists txt 是用 CMake 构建系统构建 ROS 程序包的输入文件 任何兼容 CMake 的包都包含一个或多个 CMakeLists txt 文件 xff0c 用以描述怎样构建和安装代码 catkin 项目采用
  • ROS在roslaunch时,提示“is neither a launch file in package”或TAB时没有补全

    描述 已经设置了source devel setup bash xff0c 在同一终端用roslaunch可以 xff0c 但我在这个终端起的是roscore xff0c 新终端再用roslaunch就不行了 分析 报错是因为没找到对应的p
  • ros绑定串口

    本文主要介绍ros绑定串口设备的一种方法 1 检查有多少个设备 span class token function ls span dev ttyUSB 2 查看对应串口 查看KERNELS后面的设备的硬件端口号 udevadm info
  • Spring Boot 配置文件配置自动提示 Configuration Processor

    效果 在使用Idea等开发工具时 xff0c 配置文件中输入前缀就有对应的补全提示 xff0c 使开发者可以很方便配置相应属性 xff0c 效果截图如下 xff1a 元数据说明 这些提示来自于 spring 自动配置规范中的源数据文件 sp
  • ubuntu20.4安装python3.8

    ubuntu20 4中安装python3 8 注 ubuntu20 4自带python3 10 软连接python3与pip3指向的为python3 10本文意在安装python3 8 并将软连接python与pip指向python3 8
  • C/C++多线程、线程同步(互斥锁与信号量)

    参考链接2 中写的非常好 xff0c 简单易懂 xff0c 上手快 xff0c 非常好的博文 使用多线程及互斥锁样例 xff1a include lt iostream gt include lt windows h gt using na
  • Python ❀ 初学者学习笔记与知识点梳理

    软件安装与环境部署变量与数据类型列表与元组条件判断语句字典while循环函数类文件与异常 推荐代码练习地址 xff1a https www runoob com python python 100 examples html 点击此处直接跳
  • Shell ❀ Linux系统自动挂载本地yum源并安装rpm依赖包

    文章目录 1 脚本代码详解2 代码执行结果3 脚本参数调整 1 脚本代码详解 span class token comment bin bash span span class token builtin class name echo s
  • Windows ❀ Windows系统下端口连通性常见的验证方法

    文章目录 1 telnet1 1 telnet服务开启方法1 2 端口连通性验证 2 tcping2 1 tcping下载与安装2 2 端口连通性验证 3 netstat ano findstr3 1 findstr使用语法3 2 端口连通
  • Security ❀ 安全设备学习规范(第二版)

    文章目录 安全设备学习规范1 设备部署环境1 1 部署方式1 2 配置IP地址与路由1 3 设备冗余机制1 4 会话同步机制1 5 设备账户管理1 6 设备故障诊断 2 产品授权方式2 1 序列号2 2 Hash值 3 相关设备联动3 1
  • Windows ❀ 解决Google浏览器无法访问网页问题

    文章目录 问题 xff1a Google浏览器无法访问网页解决方法 问题 xff1a Google浏览器无法访问网页 使用Google浏览器打开某个已知安全网页时 xff0c 弹出如下信息 xff0c 错误内容如下 xff1a NET ER
  • Security ❀ CSP Bypass 内容安全策略绕过

    文章目录 内容安全策略绕过 CSP Bypass1 Low Level2 Medium Level3 High Level4 Impossible Level 内容安全策略绕过 CSP Bypass CSP 内容安全策略 xff1a 为了缓
  • Security ❀ JavaScript Attacks 前端攻击

    文章目录 JavaScript Attacks 前端攻击1 Low Level2 Medium Level3 High Level4 Impossible Level JavaScript Attacks 前端攻击 JavaScript是一
  • MiddleWare ❀ Zookeeper基础概述

    文章目录 1 认识Zookeeper1 1 数据类型1 2 监听器1 3 基本功能1 3 1 统一配置管理1 3 2 统一命名服务1 3 3 分布式锁1 3 4 集群状态 2 下载安装包3 安装服务3 1 服务端命令3 2 客户端命令 3
  • Java文件内容变更及内容追加监听方案

    简介 对于文件内容变动的监听处理 xff0c 一般分为两种主要应用场景 1 只关心文件内容是否发生变更 文件的内容发生变动的场景是全量修改模式 xff0c 不是内容追加模式 例如某xml文件内容发生变动 这种情况 xff0c 我们一般只需要
  • MiddleWare ❀ MySQL基础概述

    文章目录 MySQL基础1 SQL语法与分类1 1 DDL 数据定义语言1 1 1 库操作1 1 1 1 查询1 1 1 2 创建1 1 1 3 删除1 1 1 4 使用 1 1 2 表 43 字段操作1 1 2 1 查询1 1 2 2 创
  • Shell ❀ 基础知识概述

    文章目录 一 基本概念1 脚本文件命名方式2 解释器分类3 基本基本组成内容4 脚本编写规范与格式说明5 自动生成脚本的注释与配置信息 一 基本概念 shell又称为命令解释器 xff0c 它能识别用户输入的各种命令 xff0c 并传递给操