当前位置: 首页 > ai >正文

Shell 脚本0基础教学(一)

从这篇文章开始为大家介绍 Shell 脚本。

文章目录

  • 前言
  • 一、Shell 解析器
  • 二、Shell 脚本介绍
      • 1. 脚本规范
      • 2. 脚本文件执行方式
      • 3. 多命令处理
  • 三、Shell 变量
      • 1. 系统环境变量
      • 2. 自定义变量
      • 3. 特殊符号变量
  • 总结

前言

通过Shell 命令或程序编程语言编写的 Shell 文本文件,就是 Shell 脚本,也叫 Shell 程序。
通过 Shell 命令与编程语言来提高 linux 系统的管理工作效率。


一、Shell 解析器

  1. Shell 的运行过程

当用户下达指令给操作系统的时候,实际是把指令shell ,经过 shell 的解释,处理后让内核做出相应的动作。系统的回应和输出信息也由 shell 处理,然后显示在用户的屏幕上。

在这里插入图片描述
2. Shell 解析器:

查看 linux 系统 centos 支持的 shell 解析器:

cat /etc/shells

效果:
在这里插入图片描述

shell 解析器类型:最常用的是 /bin/bash 解析器。
在这里插入图片描述

  1. Linux 系统 默认的解析器是 bash

查看当前系统环境使用的 Shell 解析器类型:

echo $SHELL

echo :用于打印输出数据到终端。
$SHELL :是全局共享的读取解析器类型的环境变量,所有的 Shell 程序都可以读取的变量。

效果:
在这里插入图片描述


二、Shell 脚本介绍

1. 脚本规范

(1). 脚本文件后缀名: .sh。
shell 脚本文件就是一个文本文件,后缀名建议使用 .sh 结尾。

(2). 首行格式规范:

#!/bin/bash

表面当前的 shell 脚本文件采用 bash 解析器运行脚本代码。

(3). 注释

  • 单行注释:
# 注释内容
  • 多行注释:
<<!
# 注释内容1
# 注释内容2

实例:
在这里插入图片描述

2. 脚本文件执行方式

1)sh 解析器执行方式:
使用 sh 命令执行脚本文件,本质就是使用 shell 解析器运行脚本文件。

sh 脚本文件

2)bash 解析器执行方式:
使用 bash 命令执行脚本文件,本质就是使用 shell 解析器运行脚本文件。

bash 脚本文件

3)仅路径执行方式:
步骤一:设置可执行权限

chmod a+x 脚本文件

步骤二:执行脚本文件

./脚本文件

实例:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

PS : sh 或者 bash 执行脚本文件的方式是直接使用 Shell 解析器运行脚本文件,不需要可执行权限。而 仅路径方式是执行脚本文件自己,需要可执行权限。

3. 多命令处理

就是在 Shell 脚本文件中编写多个Shell 命令。

例子需求:已知目录 /home/book/my_work ,执行脚本 my.sh。脚本需实现 /home/book/my_work/ 目录下创建一个 one.txt 文件,并在文件one.txt文件中增加 “hello world” 内容。

步骤分析:

编辑脚本文件
1)命令1 : touch 创建文件, 文件名 one.txt
2)命令2 : 输出数据 “HelloShell” 到 one.txt 文件中

输出数据到文件中的命令:

数据 >> 文件

实例:
my.sh 脚本文件内容:
在这里插入图片描述
效果:
在这里插入图片描述


三、Shell 变量

Shell 变量用于存储管理临时的数据,这些数据都是在运行内存中的。

变量的类型:

  • 系统环境变量
  • 自定义变量
  • 特殊符号变量

1. 系统环境变量

系统环境变量是 系统提供的共享变量,是 linux 系统加载 Shell 的配置文件 中定义的变量,共享给所有的 Shell 程序使用。

Shell 的配置文件分类: 一般情况下,我们都是直接针对全局配置进行操作。

1)全局配置文件

/etc/profile
/etc/profile.d/*.sh
/etc/bashrd

2) 个人配置文件

当前用户/.bash_profile
当前用户/.bashrc

环境变量分类

在Linux系统中,环境变量按照其作用范围不同大致可以分为系统级环境变量和用户级环境变量。

1)系统级环境变量:Shell 环境加载全局配置文件中的变量共享给所有用户所有Shell程序使用,全局共享
2)用户级环境变量:Shell 环境加载个人配置文件中的变量共享给当前用户的Shell程序使用,登录用户使用

查看当前 Shell 系统环境变量

env

在这里插入图片描述

查看 Shell 变量(系统环境变量 + 自定义变量 + 函数):

set

在这里插入图片描述

常见系统环境变量:

在这里插入图片描述

2. 自定义变量

就是自己定义的变量。

分类:

  • 自定义的局部变量。
  • 自定义常量。
  • 自定义的全局变量。

1) 自定义局部变量
定义在一个脚本文件在的变量,只能在这个脚本文件中使用该变量。

①定义:

var_name=value
变量定义规则 :
1.变量名称可以有字母,数字和下划线组成,但是不能以数字开头
2.等号两侧不能有空格
3.在bash环境中,变量的默认类型都是字符串类型,无法直接进行数值运算
4.变量的值如果有空格,必须使用双引号括起来
5.不能使用Shell的关键字作为变量名称

②查询:
区别:花括号方式适合拼接字符串

# 语法1: 直接使用变量名查询
$var_name# 语法2:使用花括号
${var_name}

③删除:

unset var_name

实例:
在这里插入图片描述

2)自定义常量
即变量设置值后不可以修改的变量叫常量,也叫只读变量。

readonly var_name

实例:
在这里插入图片描述

PS: 删除只读变量(常量):关闭当前 Shell 或子 Shell(退出终端或脚本)。

3)自定义全局变量
在当前脚本文件中定义全局变量,这个全局变量可以在当前 Shell 环境 与 子 Shell 环境都可以使用

PS : 父子 Shell 环境介绍。
例如:有 2 个Shell 脚本文件 a.sh 和 b.sh。如果在 a.sh 脚本文件中执行 b.sh 脚本文件,那么 a.sh 就是父 Shell 环境, b.sh 就是子 Shell 环境。
export var1 var2

实例 :

要求 :测试全局变量在子Shell中是否可用,在父Shell中是否可用。案例实现步骤:
1. 创建2个脚本文件demo1.sh和demo2.sh
2. 编辑demo1.sh
命令1:定义全局变量var1
命令2:执行demo2.sh脚本文件
3.编辑demo2.sh
输出全局变量var1
4. 执行demo1.sh脚本文件

效果:
在这里插入图片描述

3. 特殊符号变量

  1. $n
    用于接收脚本文件执行时传入的参数
$n
- $0 用于获取当前脚本文件名称
- $1~$9,代表获取第一输入参数到第9个输入参数
- 第 10 个以上的输入参数获取参数的格式:${数字}

执行脚本文件并传入参数语法:

sh 脚本文件 输入参数1  输入参数2....

实例:
在这里插入图片描述

  1. $#
    获取所有输入参数的个数
$#

实例:
在这里插入图片描述

  1. $* , $@
    用于获取所有的输入参数
$*
$@

$ * 与 $@区别 :

1. 不使用双引号括起来,功能一样:
$* 和 $@ 获取所有输入参数,格式为:$1 $2 ... $n.2. 使用双引号括起来:
"$*" 获取的所有参数拼接为一个字符串,格式为:"$1 $2 . .$n"。
"$@" 获取一组参数列表对象,格式为:"$1" "$2" "$n"使用循环打印 (for) 所有输入参数可以看出区别。

实例:
在这里插入图片描述

循环语法:

for var in 列表变量
do 						# 循环开始命令				# 循环体
done					# 循环结束

实例:
在这里插入图片描述
4) $?
用于获取 上一个 Shell 命令的退出状态码,或者是函数的返回值。
PS : Shell 命令的执行都会有一个返回值,这个返回值用于说明命令执行是否成功。返回0:执行成功。返回1:执行失败。

$?

实例:
在这里插入图片描述

  1. $$
    用于获取当前Shell 环境的进程 ID 号。
$$

实例:
在这里插入图片描述


总结

下一篇文章继续为大家介绍 Shell 脚本。

http://www.xdnf.cn/news/14925.html

相关文章:

  • 景观桥 涵洞 城门等遮挡物对汽车安全性的影响数学建模和计算方法,需要收集那些数据
  • Windows Subsystem for Linux (WSL):现代开发的终极跨平台方案
  • 专题一_双指针_有效三角形的个数
  • 【Linux | 网络】socket编程 - 使用TCP实现服务端向客户端提供简单的服务
  • 通过Tcl脚本命令:set_param labtools.auto_update_hardware 0
  • Spring Cloud服务注册与发现:架构设计与技术实践深度分析
  • VS Code侧边栏的“资源管理器找不到解决办法“、VScode重置视图位置/还原默认视图位置
  • Linux建立本地软件仓库
  • Spring Boot 扩展点深度解析:设计思想、实现细节与最佳实践
  • 【Oracle报错】[INS-13001] 环境不满足最低要求。
  • MySQL8.0基于GTID的组复制分布式集群的环境部署
  • Rust赋能美团云原生DevOps实践
  • uni-app uni-push 2.0推送图标不展示问题
  • 【HarmonyOS6】获取华为用户信息
  • 2025年人工智能、虚拟现实与交互设计国际学术会议
  • 客户端与服务端数据加密方案及实现
  • 1️⃣理解大语言模型
  • 深度学习——损失函数
  • 使用python 将多个docx文件合并为一个word
  • 电网的智能觉醒——人工智能重构能源生态的技术革命与公平悖论
  • vue3面试题(个人笔记)
  • 并发编程第一节
  • 首批 | 云轴科技ZStack加入施耐德电气技术本地化创新生态
  • Caffeine的tokenCache与Spring的CaffeineCacheManager缓存区别
  • 一文读懂动态规划:多种经典问题和思路
  • VScode SSH远程连接Ubuntu(通过SSH密钥对的方式)
  • 深度学习遇到的问题
  • C++如何进行性能优化?
  • qt绘制饼状图并实现点击即放大点击部分
  • 前端接收流式数据demo,并用markdown解析数据,包括EventSource和fetch两种方式