当前位置: 首页 > news >正文

Shell ❀ 基础知识概述

文章目录

  • 一、基本概念
    • 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

相关文章:

  • 汽车租赁服务小程序开发, 新时代下的行业商机
  • 使用 x-sheet 构建在线疫情高峰预测数据表
  • 智能制造数字化工厂的关键技术特点
  • linux加载动态库.so的3种方法
  • 使用DevEco Device Tool编译并烧录全部步骤和过程详解
  • 一个新工具引发IT巨变:程序员在转行,不懂编程的人却成了程序员
  • DBCO-PEG-FA二苯基环辛炔-聚乙二醇-叶酸;DBCO-PEG叶酸是一种无需任何催化剂即可进行化学反应的叶酸PEG衍生物
  • GAMES104-渲染中光和材质的数学魔法
  • 基于容器的PaaS混合云的几种形式
  • Merge-On-Write 的处理流程
  • Java和vue开发的橱柜定制系统家具定制系统
  • 智能巡检系统:企业安全生产管理的智能助手
  • 【NumPy 数组过滤、NumPy 中的随机数、NumPy ufuncs】
  • AtCoder Beginner Contest 282(python3)
  • Word处理控件Aspose.Words功能演示:在 Java 中将 DOC 或 DOCX 转换为 JPG
  • 2023 目标,与君共勉
  • Dockerfile介绍及常用保留指令
  • 四、网络层(四)IPv6
  • 【Pycharm教程】在 PyCharm 中使用 Emacs 作为外部编辑器
  • 笔试训练(5)