Linux学习笔记:shell脚本篇(1)
什么是shell脚本
Shell脚本是可以运行的文本,其内容是由逻辑和数据组成,是解释型语言。shell 是一种脚本语言
脚本:本质是一个文件,文件里面存放的是 特定格式的指令,系统可以使用脚本解析器 翻译或解析 指令 并执行(它不需要编译),用于实现系统底层的自动化批量重复的行为。
shell 既是应用程序 又是一种脚本语言(应用程序 解析 脚本语言)
基本结构
- 脚本幻数,即脚本解释器,脚本运行的最优先指令,负责对脚本中其他命令进行解释
- 程序主题,程序主体通常由命令,执行逻辑控制器和数据组成
- 注释,脚本中的说明文字,不参与脚本执行,只是对脚本中的代码进行说明(单行:#注释内容 多行:" 注释内容":)
(1)脚本命名书写规范
脚本文件的命名应见名知意,例如 backup_mysql.sh,做到看脚本名字就能知道其具体作用和功能。
(2)其他书写规范和建议
- 脚本中尽量不要用中文注释,防止本机或切换系统环境后中文乱码的困扰
- 文件开头指定脚本解释器 #!/bin/sh 或 #!/bin/bash
- 多使用内部命令,如:echo、eval、exec、export、read、shift、exit
- 尽量用少的命令完成动作,做到简化和实用并存。
- 开头加版本特权等信息
- 脚本代码要有缩进体现,利于后期阅读理解
用脚本在开头加版本特权等信息
在编写一个脚本呢时我们需要书写一些主属性信息用来利与脚本阅读,如设置tab键的空格,或者自己的署名、时间、作者、版本、邮箱等个人署名信息,这些信息如果每次写脚本都一个个敲上去就太没效率了,所以我们可以创建一个脚本,来简化这些繁琐的步骤。
vim ~/.vimrc
- set就是设置
- ts=4 —— ts表示tab键,=4则代表4个空格,所以ts=4代表一个tab键的长度是4个空格的长度
- sw=2 —— 代表自动缩进长度为2
- ai —— 代表自动缩进,比如我们在一行代码上使用了缩进,那换行时就会在下一行自动缩进
func函数,
func后面要指定一个名字,这里是SHELLTITLE,名字必须大写!!这里就是你写了名叫SHELLTITLE的一个函数,用来执行自动添加脚本个人信息的活
call —— 代表调用
append —— 代表指定哪一行,比如append(0, " "),就代表指定从第0行开始,写什么东西,以此类推,后面就表示指定第几行写什么东西,这里写的东西就是脚本的个人信息了(Author作者、Version版本、Date时间、Mail邮箱等等)
strftime("%Y/%m/%d") —— strftime代表捕捉时间,后面的%Y/%m/%d分别代表年、月、日
endfunc —— 代表此函数结束
函数的调用:
- map <F4> —— map代表快捷键,<F4>代表F4键,合在一起代表设置快捷键为F4键
- ms:call SHELLTITLE()<cr>'s —— 代表调用函数SHELLTITLE
第一行的名词解释
map <F4> —— map代表快捷键,<F4>代表F4键,合在一起代表设置快捷键为F4键
ms:call SHELLTITLE()<cr>'s —— 代表调用函数SHELLTITLE
第二行的名词解释
autocmd BufNewFile *.sh,*.script call SHELLTITLE() —— 代表自动执行,即在某个特定的情况下时,自动执行函数SHELLTITLE
BufNewFile —— Buf代表状态,NewFile就是字面意思,代表新的文件,合在一起表示状态为新文件时
*.sh,*.script —— 表示以.sh或.script结尾的文件
call SHELLTITLE() —— 调用函数SHELLTITLE
以上两种方法二选一即可
脚本执行
没有执行权限的时候
1.可以用source来调用脚本文件
source test2.sh
2.点 + 空格
. test2.sh
3.sh执行
sh test2.sh
有权限后
1)./ 点斜杠执行
./test2.sh
2)绝对路径执行
/root/test2.sh
. 点空格执行 与 ./点斜杠执行方式有何区别?
- . 点空格是不开新的环境,直接在当前领域运行
- ./ 点斜杠会先去脚本文件的开头解释器查看用什么来调用,并且会先新开一个脚本开头解释器的环境,再去调用
脚本调试
脚本在执行过程中如果出现问题,单从脚本的执行报错中找问题困难比较大,如果在执行时显示执行过程这样就可以快速定位脚本的问题所在
使用 sh +x 查看脚本文件
sh -x test3.sh
带+号的表示动作,不带+号的表示动作的输出
脚本的退出值
退出值
- 在UNIX或者Linux中,每个命令都会返回一个退出状态码
- 退出状态码是一个整数,其有效范围为0~255
- 通常情况下,成功的命令返回0,而不成功的命令返回非0值。非0值通常都被解释成一个错误码
- 行为良好的UNIX命令,程序和工具都会返回0作为退出码来表示成功
查看和更改退出值
echo $?
在调用完命令后,使用这个命令来查看退出值
不是0的退出值就代表有错
更改退出值的方法:在脚本文件中用exit指定
vim test3.sh#!/bin/bash
date
exit 66