Shell ❀ 基础知识概述

Posted 无糖可乐没有灵魂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell ❀ 基础知识概述相关的知识,希望对你有一定的参考价值。

文章目录

一、基本概念

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

以上是关于Shell ❀ 基础知识概述的主要内容,如果未能解决你的问题,请参考以下文章

Shell ❀ 基础知识概述

shell 小技巧字符串-中(下)划线转驼峰

驼峰式方法名称

LInuxDay8——shell脚本编程基础

如何在 NEST 中禁用驼峰式 Elasticsearch 字段名称?

shell脚本基础1 概述及变量