shell脚本基础

一、什么是shell脚本

Shell 脚本作为一种可运行的文本,其内容是由逻辑和数据组成的,通过解释执行的方式达成复杂操作。它是实现 Linux/UNIX 系统管理与自动化运维必不可少的重要工具,Linux/UNIX 系统的底层以及基础应用软件的核心大多都和 Shell 脚本的内容相关。每一位合格的 Linux 运维工程师,都要能够熟练编写 Shell 脚本语言,同时具备阅读系统及各类软件附带的 Shell 脚本内容的能力。

不用把重复的事情反复去做(去琢磨、增效率、明错误) 

1.若只在 lee 文件中写入 date ,它仍是脚本,但是不规范。

  • 无法直接执行( ./script.sh ),需通过 bash script.sh 调用。
  • 执行时依赖当前 Shell 环境,可能引发兼容性问题。

2.脚本有个规范的写法,在写入内容前需先写入 #!/bin/bash(脚本解释器),声明使用 Bash 解释器,称为 Shebang,确保脚本在不同环境中行为一致。

二、shell脚本中的基本元素 

1.脚本的基本结构 

基本结构说明以下方的例子为例
脚本幻数即脚本解释器,脚本运行的最优先指令,负责对脚本中其他命令进行解释#!/bin/bash
程序主体通常由命令、执行逻辑控制器和数据组成date
注释脚本中的说明文字,不参与脚本执行,只是对脚本中的代码进行说明#print date and time

2.脚本中的注释方法

1)脚本中通常用#号注释单行内容

2)多行注释 

 

三、脚本的书写规范

1.书写规范注意事项

  • 脚本文件名应以其内容来起名,如:nginx_installtion.sh(安装 nginx 的脚本)
  • 文件开头指定脚本解释器(#!/bin/sh 或 #!/bin/bash)
  • j脚本中尽量不用中文注释,防止本机或切换系统环境后中文乱码
  • 多使用内部命令,如:echo、eval、exec、export、read、shift、exit
  • 尽量用少的命令来完成动作,如:在 /etc/passwd 中查看过滤含有 root 的内容

①以下命令需要执行两条命令,通过查看执行时间可知,这条命令执行时间较慢。

②以下命令只需执行一条命令,通过查看执行时间可知,这条命令执行时间较快,因此尽量选择以下命令。

  • 开头加版本特权等信息

写一些基本信息在解释器前,会使脚本更加规范

  • 利用缩进体现代码结构,更加利于后期阅读

2.vim用于书写脚本的设定

用 vim 的自动编写功能可以实现对于这些重复动作的简化,增加效率。

参数说明
et(expandtab)将 Tab 键转换为空格(默认 8 个空格)
ts=4(tabstop=4)设定 Tab 键的宽度为 4 个空格
sw=4(shiftwidth=4)自动缩进的宽度为 4 个空格(设定了 ts 后,缩进宽度也设定了,可不写此参数)
ai(autoindent)自动继承前一行的缩进。输入新行时,自动保持与上一行相同的缩进级别。

自动生成 Shell 脚本的头部注释:

autocmd BufNewFile *.sh,*.script call LXT()

当创建新的 .sh 或 .script 文件时,自动调用 LXT() 函数生成头部注释。(仅限新文件,编辑已有文件时不会触发)

map <F4> ms:call LXT()<cr>'s

快捷键自动生成。按下 F4 键时,会调用 LXT() 函数自动生成 Shell 脚本头部注释。(注:有些快捷键会有冲突)

四、脚本执行方法

测试脚本内容: 

1.在当前环境下执行 

 cat 在当前的 shell 中运行,没有开启新的 shell ,直接使用当前的 shell 调用命令 

方法1:. lee.sh &

方法2: source lee.sh &

2.在指定环境中执行

方法1:sh lee.sh &。用指定的 sh lee.sh 解释器解释命令。

方法2:/root/lee.sh &。需要开启可执行权限,才可通过绝对路径的方式调用脚本。

若进入到脚本所在目录,可用 ./lee.sh 来调用脚本。 

. 脚本 & 与 ./脚本 的区别:

. lee.sh &:不会开新的环境,在当前环境运行

./lee.sh:会开新的环境,在文件中查看用什么调用,并开启之后再运行里面的动作

五、脚本调试

脚本在执行过程中如果出现问题,单从脚本的执行报错中找问题困难比较大,如果在执行时显示执行过程,这样就可以快速定位脚本的问题所在。

编写 lee.sh 脚本文件,cat 命令应为 cal(显示系统日历),假设不小心打成 cat。

sh lee.sh:直接执行脚本:在错误的命令的地方卡着,不清楚是哪里的错误

sh -x lee.sh:显示执行过程:显示执行过程的详细信息,+ 行表示命令,不带 + 的行表示命令的输出。可清楚地知道是 cat 命令的输出出现问题。

将 cat 改为 cal ,输出恢复正常。

六、命令退出值

退出值是执行命令之后系统返回的一个退出状态码,有效范围是0~255。通常情况下,成功的命令返回0,而不成功的命令返回非0值(非0值通常都被解释成一个错误码)。

1.查看退出值

2.修改脚本退出值

1)未指定退出值 

2)指定退出值为66 

练习:

在 ifconfig 中,通过脚本只显示 ens160 的 ip 地址(192.168.10.100)。

结果解释: 

ifconfig $*head -n 2tail -n 1cut -d " " -f 10
执行 ifconfig 命令并传递所有参数($*)取前两行输出从这两行中取最后一行按空格分割,提取第 10 个字段

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值