Shell ❀ 基础知识概述
文章目录
- 一、基本概念
- 1、脚本文件命名方式
- 2、解释器分类
- 3、基本基本组成内容
- 4、脚本编写规范与格式说明
- 5、自动生成脚本的注释与配置信息
一、基本概念
shell又称为命令解释器,它能识别用户输入的各种命令,并传递给操作系统。它的作用类似于Windows操作系统中的命令行,但是shell的功能远比命令行强大的多,在Unix或者localhost中,shell即是用户交互的界面,也是控制系统的脚本语言;
1、脚本文件命名方式
脚本文件名称保持不冲突即可,基于方便使用和查阅因此相对制定了多数人使用的规范与标准,其中大驼峰与小驼峰命名法较为实用。
- 大驼峰命名法:
MyLastName
、MyFirstName
… - 小驼峰命名法:
myLastName
、myFirstName
…
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