关于shell脚本
• shell脚本是文本的一种。
• shell脚本是可以运行的文本。
• shell脚本的内容是由说辑和数据组成。
• shell 脚本是解释型语言。
shell脚本存在的意义
Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具
Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的内容。
每一个合格的Linux运维工程师,都需要能够熟练地编写Shell脚本语言,并能够阅读系统及各类软件附带的Shell脚本内容。
一次编编写永久受益
注意:系统支持的shell类型可以查看/etc/shells
常见shell种类有:
Bourne Shell(/usr/bin/sh或/bin/sh):标识为sh,该Shell由Steve Bourne在贝尔实验室时编写。在许多Unix系统中,该Shell是root用户的默认的Shell。
Bourne Again Shell(/bin/bash):标识为bash,该Shell由Brian Fox在1987年编写,是绝大多数发行版的默认的Shell,当运行sh时其实调用的是bash。
C Shell(/usr/bin/csh):标识为csh,该Shell由Bill Joy在BSD系统上开发。由于其语法类似于C语言,因此称为C Shell。
K Shell(/usr/bin/ksh):标识为ksh,该Shell由贝尔实验室的David Korn在二十世纪八十年代早期编写。它完全向上兼容 Bourne Shell 并包含了C Shell 的很多特性。
shell脚本中的基本元素
建立脚本
# mkdir script
# cd script/
# vim timinglee
# file timinglee 运行结果:
脚本的基本结构
脚本幻数:即脚本解释器,脚本运行的最优先指令,负责对脚本中其他命令进行解释
程序主题:程序主体通常由命令,执行逻辑控制器和数据组成
注释:脚本中的说明文字,不参与脚本执行,只是对脚本中的代码进行说明
脚本中的注释方法
脚本中通常用 # 号注释单行内容
# vim lee.sh
# sh lee.sh 运行结果:
多行注释
# sh lee.sh 运行结果:
脚本的书写规范
书写规范注意事项
脚本文件名应见名知意,例如backup_mysql.sh
文件开头指定脚本解释器 #!/bin/sh 或 #!/bin/bash
脚本中尽量不要用中文注释,防止本机或切换系统环境后中文乱码的困扰
多使用内部命令,如:echo、eval、exec、export、read、shift、exit
尽量用少的命令完成动作
# cat /etc/passwd | grep root
# grep root /etc/passwd
运行结果相同:
开头加版本特权等信息
# Author:作者
# Date:创建日期
# Version:版本
# Mail:联系方式
# Info:对软件信息进行描述
# Function:功能
注意:利用缩进体现代码结构,更加利于后期阅读
vim用于书写脚本的设定
在编写一个脚本呢时我们需要书写一些主属性信息用来利与脚本阅读
如果每次都手写这些信息,很显然有做了很多重复动作
用vim的自动编写功能可以实现对于这些重复动作的简化
脚本书写设置
# vim ~/.vimrc 【设置家目录脚本书写格式】
set ts=4 sw=4 ai et
【ts=4表示一个Tab键是4个空格,sw=4缩进长度为4,ai表示自动缩进(这一行有Tab键,按回车键下一行会自动缩进,长度被Tab键固定),et表示把Tab键转换成空格
脚本执行方法
在当前环境下运行
# vim test.sh
# . test.sh 【当前环境作解释器调用脚本】
# ps f 运行结果:
# source test.sh
# ps f 运行结果:
在指定环境中运行
# sh test.sh 【脚本没有可执行权限时使用的方法("sh" ,". " ,"source")】
# ps f 运行结果:
# chmod +x test.sh 【为脚本添加可执行权限】
# ./ test.sh
# /root/script/test.sh
# ps f 运行结果:
. test.sh与./ test.sh区别:" . "点+空格不会开新环境,"./"在当前环境,不能在根目录运行。
脚本调试
脚本在执行过程中如果出现问题,单从脚本的执行报错中找问题困难比较大,如果在执行时显示执行过程这样就可以快速定位脚本的问题所在
# vim lee.sh
# sh lee.sh运行结果:
# sh -x lee.sh运行结果:
命令退出值
什么是退出值
在UNIX或者Linux中,每个命令都会返回一个退出状态码
退出状态码是一个整数,其有效范围为0~255
通常情况下,成功的命令返回0,而不成功的命令返回非0值。非0值通常都被解释成一个错误码行为良好的UNIX命令,程序和工具都会返回0作为退出码来表示成功。
查看退出值
# echo $? 【查看退出值,0表示没有错误】
没有目录查看退出值
有目录查看退出值
修改脚本退出值
# vim lee.sh
# sh lee.sh
# echo $?
练习:使用脚本查找指定网卡的IP地址
# sh test.sh ens160 【使用脚本查看网卡IP地址】