初识shell脚本

发布时间:2024年01月23日

目录

一、shell脚本基础

1、shell的作用

?linux中常见的shell

2、shell脚本

2.1 什么是shell脚本

2.2 shell脚本的构成

2.3 shell脚本的用途

二、shell执行逻辑及执行方式

1、脚本执行逻辑

2、执行方式

2.1 指定绝对路径的命令,要求文件必须有可执行的权限

2.2?指定shell来解释脚本,不要求文件必须有 x (可执行)权限

2.3??source 与 . 脚本路径执行shell脚本(不建议使用)

2.4? 将脚本文件放入$PATH中目录的其中一个目录,直接输入脚本名执行

2.5 自己创建一个路径(将脚本文件所在的绝对路径添加至PATH中)

3、?脚本错误调试

? set -e

二、重定向与管道符

1、交互式硬件设备标志输出输入

2、重定向

3、管道符

3.1 使用管道符修改密码

3.2 查看文件内容


一、shell脚本基础

1、shell的作用

Linux 系统中的 Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当 了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执 行的操作传递给内核执行,并输出执行结果。 常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符 等方面会存在一些区别。通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类。

?linux中常见的shell

--查看本机的shell信息

cat  /etc/shells

?

linux中常见的shell
bash基于gun的框架下发展的shell
csh类似c语言的shell
tcsh整合了csh提供了更多功能
sh已经被bash替换
nologin让用户无法登录
bash (/bin/bash)是目前大多数Linux 版本采用的默认shell

2、shell脚本

2.1 什么是shell脚本

  • 就是将命令按顺序一一列出,最后自动执行

  • 执行需要权限,也可以直接使用路径

  • 脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本

2.2 shell脚本的构成

  1. 脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #!/bin/bash为默认的解释器,还有其他类型的解释器:#!/bin/python #!/bin/expect

  2. 注释信息:以#开头的语句表示为注释信息 # 注 释

  3. 可执行语句:比如echo命令用于输出“ ”之间的字符串

2.3 shell脚本的用途

  • 将简单的命令组合完成复杂的工作,自动化执行命令,提高工作效率

  • 减少手工命令的重复输入,一定程度上避免人为错误

  • 将软件或应用的安装及配置实现标准化

  • 用于实现日常性的,重复性的运维工作,如:文件打包压缩备份,监控系统运行状态并实现告警等

二、shell执行逻辑及执行方式

1、脚本执行逻辑

  1. 顺序执行:程序按从上到下顺序执行

  2. 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行

  3. 循环执行:程序执行过程中需要重复执行多次某段语句

2、执行方式

#法一:指定路径的命令,要求文件必须有x权限
[root@localhost ~]#chmod +x /root/first.sh 
[root@localhost ~]#cd /root/
[root@localhost ~]#./first.sh 
当前目录位于:
/root
 
#法二:指定Shell来解释脚本,不要求文件必须有x权限。
[root@localhost ~]#bash first.sh 
当前目录位于:
/root
 
#法三:source 与 . 脚本路径执行shell脚本
[root@localhost ~]#source first.sh 
当前目录位于:
/root
 
#法四:将脚本文件放入$PATH中目录的其中一个目录,直接输入脚本名
echo $PATH
/usr/local/sbin:/usr/local/bin :/usr/sbin :/usr/bin: / rpot/bin
 
#法五:自己创建一个路径(将脚本文件所在的绝对路径添加至PATH中)
在/etc/profile文件最后添加:export PATH=$PATH:脚本所在的绝对路径
直接输入脚本名执行脚本

2.1 指定绝对路径的命令,要求文件必须有可执行的权限

#法一:指定路径的命令,要求文件必须有x权限
[root@localhost ~]#chmod +x /root/基本信息.sh 
指定绝对路径: /root/基本信息.sh 			
指定相对路径: ./基本信息.sh

2.2?指定shell来解释脚本,不要求文件必须有 x (可执行)权限

bash(sh)执行脚本, 系统会创建一个子shell环境,并在这个子shell环境中执行这个脚本 ,脚本执行结束后系统就会自动退出bash环境

2.3??source 与 . 脚本路径执行shell脚本(不建议使用)

不建议使用source 与 . 执行脚本,会在当前 shell 环境中执行脚本,影响当前环境。

2.4? 将脚本文件放入$PATH中目录的其中一个目录,直接输入脚本名执行

echo $PATH
/usr/local/sbin:/usr/local/bin :/usr/sbin :/usr/bin: / root/bin

以下两个目录一般放自己创建或第三方应用程序生成的命令文件

  • /usr/local/sbin:只有管理员能执行的命令
  • /usr/local/bin :所有用户能够执行的命令

以下两个目录一般放系统自带或者系统生成的命令文件

  • /usr/sbin :只有管理员能执行的命令
  • /usr/bin: 所有用户能够执行的命令

/root/bin:不存在

将当前文件做个软连接放入或者使用cp复制到 /usr/local/bin目录下
直接输入脚本名执行脚本

2.5 自己创建一个路径(将脚本文件所在的绝对路径添加至PATH中)

在/etc/profile文件最后添加:export PATH=$PATH:脚本所在的绝对路径
直接输入脚本名执行脚本

[root@localhost ~]#vim /etc/profile

export PATH=$PATH:/root/shell  
#export使环境变量的值全局环境下生效,不加export默认在当前环境变量下生效
 
[root@localhost ~]#source /etc/profile   #刷新配置文件
[root@localhost ~]# echo $PATH           #查看当前路径
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/shell:/root/
[root@localhost ~]#基本信息.sh            #输入脚本名 直接执行
主机名:   localhost.localdomain
IP地址:   192.168.80.112
CPU型号:  13th Gen Intel(R) Core(TM) i9-13900H

3、?脚本错误调试

脚本错误分类

  • 命令错误:命令出错不会影响接下来的命令继续
  • 语法错误:会影响接下来的命令继续
  • 逻辑错误:只能自己去筛查代码的正确

检查脚本错误

  • 检查语法错误:bash -n 脚本名称 (不在当前目录下加绝对路径) ? ?
  • 检查逻辑错误:bash -x 脚本名称 (不在当前目录下加绝对路径) ? ?

总结:脚本错误常见的有三种区别

  1. 语法错误,会导致后续的命令不继续执行,可以用bash -n 检查错误,提示的出错行数不一定是准确的

  2. 命令错误,默认后续的命令还会继续执行,用bash -n 无法检查出来 ,可以使用 bash -x 进行观察

  3. 逻辑错误:只能使用 bash -x 进行

? set -e

在 ?脚本的面输入 ?set -e ? 一旦出错立即停止

二、重定向与管道符

由于Shell脚本“批量处理”的特殊性,其大部分操作过程位于后台,不需要用户进行干预,因此要学会提取、过滤执行信息变得十分重要,所以我们需要重定向和管道。

1、交互式硬件设备标志输出输入

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器
  • 标准输入:从该设备接收用户输入的数据

  • 标准输出:通过该设备向用户输出数据

  • 标准错误:通过该设备报告执行出错信息

2、重定向

重定向的意思就是 ,不输出到默认设备上,输出到你指定的位置

类型操作符用途
重定向输入<从指定的文件读取数据,而不是从键盘输入
重定向输出1>将输出结果保存到指定的文件(覆盖原有内容)
重定向输出>>将输出结果换行添加在文件尾部
重定向错误输出2>将错误信息保存到指定的文件(覆盖原有内容)
重定向错误输出2>>将错误信息追加到指定的文件中
混合输出&>将标准输出、标准错误的内容保存到同一个文件中

?示例1:重定向输入与输出修改密码

示例2:覆盖追加

示例3:混合输出

3、管道符

?将左侧的命令输出结果,作为右侧命令的输入(处理对象),可以叠加使用

3.1 使用管道符修改密码

??

3.2 查看文件内容

文章来源:https://blog.csdn.net/weixin_58376680/article/details/135767922
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。