一、什么是shell脚本
- shell脚本是文本的一种
- shell脚本是可以运行的文本
- shel脚本的内容是由逻辑和数据组成
- shell脚本是解释型语言
二、shell脚本存在的意义
- Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具
- Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容
- 每一个合格 的Linux运维工程师,都需要能够熟练地编写Shel脚本语言,并能够阅读系统及各类软件附带的Shell脚本内容
- 一次编编写永久受益
三、shell脚本中的基本元素
1.脚本的基本结构
脚本幻数,即脚本解释器,脚本运行的最优先指令,负责对脚本中其他命令进行解释
程序主题,程序主体通常由命令,执行逻辑控制器和数据组成
注释,脚本中的说明文字,不参与脚本执行,只是对脚本中的代码进行说明
2.脚本中的注释方法
a)脚本中常用#号注释单行内容
[root@timinglee ~]# vim lee.sh
#!/bin/bash
#show some word
echo hello world
[root@timinglee ~]# sh lee.sh
hello world
b)多行注释
[root@timinglee ~]# vim lee.sh
#!/bin/bash
: "
注释1
注释2
注释3
"
echo hello world
[root@timinglee ~]# sh lee.sh
hello world
注:和"中间必须输入空格
四、脚本的书写规范
1.书写规范质疑事项
- 脚本文件名应见名知意,例如backup_mysql.sh
- 文件开头指定脚本解释器#!/bin/sh 或#!/bin/bash
- 脚本中尽量不要用中文注释,防止本机或切换系统环境后中文乱码的困扰
- 多使用内部命令,如:echo、eval、exec、export、read、shift、exit
- 尽量用少的命令完成动作
[root@timinglee ~]# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@timinglee ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
- 开头加版本特权等信息
# Date:创建日期
# Author:作者
# Mail:联系方式
# Function:功能
# Version:版本
- 利用缩进体现代码结构,更加利于后期阅读
不规范代码
#!/bin/bash
for i in 1 2 3
echo $i
done
规范代码
#!/bin/bash
for i in 1 2 3
echo $i
done
编辑配置文件,tab键长度设为2
练习:shell脚本需求
代码:
写法一写法二
2.vim用于书写脚本的设定
在编写一个脚本呢时我们需要书写一些主属性信息用来利与脚本阅读
如果每次都手写这些信息,很显然有做了很多重复动作
用vim的自动编写功能可以实现对于这些重复动作的简化
[root@timinglee ~]# vim ~/.vimrc
set ts=2 sw=2 ai et
map <F4> ms:call SHELLTITLE()<cr>'s
autocmd BufNewFile *.sh,*.script call SHELLTITLE()
func SHELLTITLE()
call append(0,"###############################################")
call append(1,"# Author: lee")
call append(2,"# Version: "
call append(3,"# Date: ".strftime("%Y/%m/%d"))
call append(4,"# Mail: lee@westos.org")
call append(5,"# Function: ")
call append(6,"# ")
call append(7,"################################################")
call append(8,"")
call append(9,"#!/bin/bash")
endfunc
手动添加 ,编辑配置文件
脚本写好之后,编辑文件,按F4,就会出现
自动添加:
会自动生成
五、脚本执行方法
1.在当前环境下运行
2.在指定环境中运行
六、脚本测试
脚本在执行过程中如果出现问题,单从脚本的执行报错中找问题困难比较大,如果在执行时显示执行过程这样就可以快速定位脚本的问题所在
[root@timinglee ~]# vim lee.sh
#!/bin/bash
hostname
echo $USER
date
cat #命令应为cal显示系统日历,用这个手残错误为例
pwd
直接执行脚本效果:
[root@timinglee ~]# sh lee.sh
timinglee.easylee.org
root
Sun Apr 7 04:27:05 AM EDT 2024
显示执行过程效果
[root@timinglee ~]# sh -x lee.sh
+ hostname
timinglee.easylee.org
+ echo root
root
+ date
Sun Apr 7 04:27:27 AM EDT 2024
+ cat
正确的脚
七、命令退出值
1.什么时退出值
- 在UNIX或者Linux中,每个命令都会返回一个退出状态码
- 退出状态码是一个整数,其有效范围为0~255
- 通常情况下,成功的命令返回0,而不成功的命令返回非0值。非0值通常都被解释成一个错误码
- 行为良好的UNIX命令,程序和工具都会返回0作为退出码来表示成功
2.查看和更改退出值
a)查看退出值
[root@timinglee ~]# ls /mnt/lee
ls: cannot access '/mnt/lee': No such file or directory
[root@timinglee ~]# echo $?
2
[root@timinglee ~]# touch /mnt/lee
[root@timinglee ~]# ls /mnt/lee
/mnt/lee
[root@timinglee ~]# echo $?
0
b)修改脚本退出值
未指定退出值
[root@timinglee ~]# vim lee.sh
#!/bin/bash
date
exit
[root@timinglee ~]# sh lee.sh
Sun Apr 7 04:32:50 AM EDT 2024
[root@timinglee ~]# echo $?
0
指定退出值
[root@timinglee ~]# vim lee.sh
#!/bin/bash
date
exit 66
[root@timinglee ~]# sh lee.sh
Sun Apr 7 04:32:50 AM EDT 2024
[root@timinglee ~]# echo $?
66
未指定退出值
写exit与不写的区别