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

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.lryc.cn/news/583227.html

相关文章:

  • 【计算机组成原理——知识点总结】-(总线与输入输出设备)-学习笔记总结-复习用
  • Energy-Based Transformers:实现通用系统2思维的新范式
  • HOOPS Communicator 2025.5.0版本更新速览:性能、测量与UI全面优化
  • C++入门基础篇(一)
  • 《【第五篇】图片处理自动化:让你的视觉内容更专业!:图片处理基础与批量裁剪》
  • Unity Demo-3DFarm详解-其二
  • 极简相册管理ios app Tech Support
  • 无人机报警器频段模块设计与运行要点
  • Excel 常用高级用法
  • 使用LLaMA-Factory微调Qwen2.5-VL-3B 的目标检测任务-使用LLaMA-Factory webui进行训练
  • 学习日志08 python
  • 基于svga+uniapp的微信小程序动画组件开发指南
  • 前端进阶之路-从传统前端到VUE-JS(第四期-VUE-JS页面布局与动态内容实现)(Element Plus方式)
  • IntelliJ IDEA 2025.1.3创建不了java8的项目
  • 【PTA数据结构 | C语言版】大整数相加运算
  • Linux驱动05 --- TCP 服务器
  • PostgreSQL如何进行跨服务器迁移数据
  • 70、【OS】【Nuttx】【构建】配置 stm32 工程
  • OpenGL 生成深度图与点云
  • 记一次接口优化历程 CountDownLatch
  • 景观桥 涵洞 城门等遮挡物对汽车安全性的影响数学建模和计算方法,需要收集那些数据
  • 【软件运维】前后端部署启动的几种方式
  • Live555-RTSP服务器
  • Linux——I/O复用
  • 零知开源——STM32F407VET6驱动SHT41温湿度传感器完整教程
  • Linux 中的 .bashrc 是什么?配置详解
  • Python 初识网络爬虫:从概念到实践
  • 什么是公链?
  • 微软 Bluetooth LE Explorer 实用工具的详细使用分析
  • 新零售“云化”进化:基于定制开发开源AI智能名片S2B2C商城小程序的探索