如何巧妙运用Shell变量:掌握脚本编程的核心技巧

目录

  • 前言
  • 一、Shell变量——变量类型
    • 1、用户自定义变量
    • 2、环境变量
        • 用./ 启动脚本文件记得加权限哦
  • 二、Shell变量——变量赋值和访问
    • (一)变量定义
    • (二)变量的使用
    • (三)删除变量
    • (四)添加环境变量
    • (五)内部变量
    • (六)变量值输出
    • (七)变量值读取
    • (八)变量替换
  • 总结

前言

在现代计算中,Shell脚本作为一种强大的自动化工具,广泛应用于系统管理、数据处理及各种开发任务。理解Shell变量的使用和管理是编写高效脚本的基础。通过掌握用户自定义变量、环境变量及其赋值、访问和删除等操作,用户能够更灵活地控制脚本的执行流程,从而提高工作效率。本教程旨在深入探讨Shell变量的各个方面,为用户提供实用的操作示例和深入的理解。

一、Shell变量——变量类型

1、用户自定义变量

在编写Shell脚本时定义,可以在Shell程序内任意使用和修改。可以将它看作局部变量,仅在当前Shell实例中有效。
①创建一个脚本文件
vim zh.sh

②打开脚本文件后,将以下内容复制进去,然后输入 :wq 进行保存退出。
#!/bin/bash
name="John Doe"
age=30
echo "Hello, my name is $name and I am $age years old."
age=31
echo "Now I am $age years old."
在这里插入图片描述
如图:
在这里插入图片描述

③启动zh.sh 脚本文件
sh zh.sh

在这里插入图片描述

2、环境变量

在 Shell 脚本中,环境变量是系统为进程和程序提供的一种方式。环境变量通常是全局的,在整个系统中都可以访问,可以直接在 Shell 程序中使用这些环境变量,也可以在运行时对它们进行修改。

①创建一个脚本文件
vim zhh.sh

在这里插入图片描述
②打开脚本文件后,将以下内容复制进去,然后输入 :wq 进行保存退出。
#!/bin/bash
echo "脚本开始时的目录是:$(pwd)"
echo "当前用户的主目录是:$HOME"
cd $HOME
echo "当前目录是:$(pwd)"
echo "当前登录的用户名是:$USER"
echo "脚本结束时的目录是:$(pwd)"
在这里插入图片描述

③启动zhh.sh 脚本文件
bash zhh.sh./zhh.sh
在这里插入图片描述

用./ 启动脚本文件记得加权限哦

chmod +x ./zhh.sh
在这里插入图片描述

二、Shell变量——变量赋值和访问

(一)变量定义

  • 变量无须事先声明,给变量赋值也就是定义一个变量的过程

    变量名=值
    注意 = 两边没有空格

  • 变量名的命名应当遵循如下规则:

  • 首个字符必须为字母或下划线:name, _name是合法的,1name是不合法的。

  • 中间不能有空格:full_name是合法的,full name是不合法的。

  • 不能使用标点符号:user_name 是合法的,user-name 是不合法的。

  • 不能使用 Shell 关键字:if, for, whileShell 的关键字,不能作为变量名。

(二)变量的使用

①创建一个脚本文件
vim zhhh.sh
在这里插入图片描述

②打开脚本文件后,将以下内容复制进去,然后输入 :wq 进行保存退出。
#!/bin/bash
username="Alice"
user_age=30
echo "用户名:$username"
echo "年龄:$user_age"
username="Bob"
user_age=35
echo "新的用户名:$username"
ho "新的年龄:$user_age"

在这里插入图片描述

③启动zhhh.sh 脚本文件
bash zhh.sh./zhhh.sh

在这里插入图片描述

(三)删除变量

①打开脚本文件
vim zhh.sh

在这里插入图片描述

②打开脚本文件后,将以下内容复制进去,然后输入 :wq 进行保存退出。
#!/bin/bash
username="Alice"
user_age=30
echo "用户名:$username"
echo "年龄:$user_age"
unset username
unset user_age
echo "用户名:$username"
echo "年龄:$user_age"

在这里插入图片描述

③启动zhhh.sh 脚本文件
bash zhhh.sh./zhhh.sh

在这里插入图片描述

(四)添加环境变量

使用export命令将变量添加到环境中,作为临时的环境变量(一种全局变量)只在当前 Shell 会话中有效,关闭会话后将消失。

export 变量名=变量值

①创建一个脚本文件
vim zhhhh.sh

在这里插入图片描述

②打开脚本文件后,将以下内容复制进去,然后输入 :wq 进行保存退出。
#!/bin/bash
export MY_VAR="Old Value"
echo "原始 MY_VAR 的值是:$MY_VAR"
export MY_VAR="New Value"
echo "修改后的 MY_VAR 的值是:$MY_VAR"

在这里插入图片描述

③启动zhhhh.sh 脚本文件
bash zhhhh.sh./zhhhh.sh

在这里插入图片描述

如果是要使环境变量永久生效,可以将export命令添加到 .bashrc .bash_profile 文件中。 注意:测试前请备份.

(1)以编辑 .bashrc 文件为例
vim ~/.bashrc

(2) 在文件末尾添加
export MY_VAR="Persistent Value"

(3) 保存并退出,执行以下命令使修改生效
source ~/.bashrc

(五)内部变量

在这里插入图片描述
在这里插入图片描述

(六)变量值输出

①echo命令

  • 命令用于在屏幕上打印出指定的字符串,实现在标准输出的文本显示。它不仅可以用于简单的输出,还能实现更复杂的格式控制。
  • 输出控制:使用双引号包围输出内容可以防止 Shell 对大多数特殊字符进行解释。然而,美元符号($)、反引号(`) 和双引号(")在双引号中仍然保持特殊意义。如果需要在输出中显示这些字符,则需使用转义符(反斜杠 \)进行处理。

输入:

echo "显示美元符号:\$";echo "显示反引号:\";echo "显示双引号:\"";

在这里插入图片描述

②printf命令

  • 格式化输出:指定输出格式,如字符串、整数、浮点数等。
  • 控制宽度和对齐
  • 转义字符支持:使用转义字符进行格式化输出。
  • printf命令可以提供格式控制字符串,语法如下:

printf 格式字符串 [参数列表…]

打开脚本文件zhhh.sh后,将以下内容复制进去,然后输入 :wq 进行保存退出。

## 示例 1: 基本用法
printf "Hello, %s!\n" "World"

## 示例 2: 格式化数字
printf "整数:%d\n" 42
printf "浮点数:%.2f\n" 3.14159

## 示例 3: 多个参数
printf "名字: %s, 年龄: %d\n" "Alice" 28

## 示例 4: 控制宽度和对齐
printf "|%-10s|%5d|\n" "Alice" 30
printf "|%-10s|%5d|\n" "Bob" 40

## 示例 5: 使用转义字符
printf "这是第一行\n这是第二行\n"

启动zhhh.sh 脚本文件
bash zhhh.sh./zhhh.sh
在这里插入图片描述

(七)变量值读取

使用read命令可以将变量的值作为字符串从键盘读入

read 变量

在执行read命令时可以不指定变量参数,它会将接收到的数据放置在环境变量$REPLY 中。

①创建一个脚本文件
vim zzh.sh
在这里插入图片描述

②打开脚本文件后,将以下内容复制进去,然后输入 :wq 进行保存退出。
#!/bin/bash
echo "请输入您的名字:"
read name
echo "请输入您的年龄:"
read age
echo "请输入您的城市:"
read # 不指定变量名,输入存储在 $REPLY 中
echo "您的名字是:$name"
echo "您的年龄是:$age"
echo "您的城市是:$REPLY" # 使用 $REPLY

在这里插入图片描述

③启动zzh.sh 脚本文件
bash zzh.sh./zzh.sh
在这里插入图片描述

  • read读入的变量可以有多个,第一个数据给第一个变量,第二个数据给第二个变量,如果输入数据个数过多,则最后所有的值都给最后一个变量
  • 可以使用选项-n对输入的字符进行计数,当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量。

①创建一个脚本文件
vim zhanghuan.sh

在这里插入图片描述

在这里插入图片描述

②打开脚本文件后,将以下内容复制进去,然后输入 :wq 进行保存退出。
#!/bin/bash
echo "请输入两个数字(用空格分隔):"
read num1 num2
echo "第一个数字是:$num1"
echo "第二个数字是:$num2"
echo "请输入最多5个字符:"
read -n 5 input
echo -e "\n您输入的字符是:$input"

③启动zhanghuan.sh 脚本文件
bash zhanghuan.sh./zhanghuan.sh
在这里插入图片描述

(八)变量替换

可以使用以下几种变量替换形式。

  • ${var}:替换为变量本来的值。 多个变量则${var1} ${var2}......
  • ${var:?message}:如果变量var 为空或已被删除,则将消息message发送到标准错误输出,可以用来检测变量var是否可以被正常赋值。

①创建一个脚本文件
vim zhovyx.sh

在这里插入图片描述

②打开脚本文件后,将以下内容复制进去,然后输入 :wq 进行保存退出。
#!/bin/bash
# 1. 使用 ${var}
var="Hello"
echo "当前变量的值是:${var}"
# 2. 使用 ${var:?message}
unset var # 删除变量
echo "检测变量是否已设置:${var:?变量未设置}"

在这里插入图片描述

③启动zhhh.sh 脚本文件
bash zhovyx.sh./zhovyx.sh

在这里插入图片描述

可以使用以下几种变量替换形式。

  • ${var:-word}:如果变量var为空或已被删除,则返回word,但不改变var的值。
  • ${var:=word}:如果变量var为空或已被删除,则返回word,并将var的值设置为 word。
  • ${var:+word}:如果变量var 被定义,则返回 word,但不改变 var 的值。

①创建一个脚本文件
vim yoona.sh
在这里插入图片描述

②打开脚本文件后,将以下内容复制进去,然后输入 :wq 进行保存退出。
#!/bin/bash
# 1. 使用 ${var:-word}
unset var
echo "变量未设置时的输出:${var:-hello1}"
echo "变量未设置: ${var}"
# 2. 使用 ${var:=word}
echo "变量设置为word:${var:=hello2}"
echo "当前变量的值是:${var}"
# 3. 使用 ${var:+word}
var="hello3"
echo "变量定义时的输出:${var:+hello4}"
echo "变量已设置: ${var}"
在这里插入图片描述

③启动yoona.sh 脚本文件
bash yoona.sh./yoona.sh

在这里插入图片描述

总结

通过本教程的学习,读者应对Shell变量有了全面的认识,包括如何定义、使用、删除以及转换变量。同时,环境变量的概念也为脚本的灵活性提供了保障。掌握这些基本技能后,用户能够更自信地编写复杂的Shell脚本,提升工作效率和解决问题的能力。未来的学习可以围绕更高级的Shell编程技巧展开,进一步拓宽技能树,增强对Shell脚本的应用能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1548977.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

开源链动2+1模式AI智能名片小程序源码:放大特色,构建独特竞争力

摘要:本文探讨在当今社会背景下,开源链动21模式AI智能名片小程序源码如何通过坚持与众不同来构建独特竞争力。在信息传播便捷但个体易同质化的时代,拥有特色是脱颖而出的关键,而这种模式下的小程序源码具有独特的发展潜力。 一、引…

有效解决配置管理混乱,麒麟桌面操作系统V10 sp1 2403最新版本推出统一配置系统

了解更多银河麒麟操作系统全新产品,请点击访问 麒麟软件产品专区:https://product.kylinos.cn 开发者专区:https://developer.kylinos.cn 文档中心:https://documentkylinos.cn 当前桌面操作系统中可通过配置定义的应用有限&a…

使用 Git 帮助文档

聊聊如何更好地查阅官方文档。 ‍ git help 学习某个工具&#xff0c;官方文档是少不了的&#xff0c;也是最权威的。我们可以使用 git help 来查看帮助&#xff0c;该命令会列举出常用的命令和介绍&#xff1a; > git help usage: git [--version] [--help] [-C <pa…

十一假期地区人流量出行大数据分析:技术驱动下的深度洞察

随着国庆黄金周的临近&#xff0c;旅游市场再次迎来了一年一度的出行高峰。在这个数字化时代&#xff0c;如何利用大数据、第三方接口等先进技术进行数据采集与分析&#xff0c;以更精准地预测人流量、优化资源配置、提升旅游体验&#xff0c;成为了行业内外关注的焦点。 一、…

VGA/HDMI/DP接口和USB、串口通信协议

1、视频接口 开始之前我们先聊一聊数字信号和模拟信号&#xff0c;模拟信号和数字信号的不同之处在于它们所传输的信息的形式。模拟信号是一个连续的信号&#xff0c;可以以在无限小的时间内进行测量。数字信号则是以离散的形式进行传输&#xff0c;它的数值只能是离散的、有限…

net core mvc 数据绑定 《1》

其它的绑定 跟net mvc 一样 》》MVC core 、framework 一样 1 模型绑定数组类型 2 模型绑定集合类型 3 模型绑定复杂的集合类型 4 模型绑定源 》》》》 模型绑定 使用输入数据的原生请求集合是可以工作的【request[],Querystring,request.from[]】&#xff0c; 但是从可读…

Python 从入门到实战30(高级文件的操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了操作目录的相关知识。今天我们将学习一下高级文…

MySQl查询分析工具 EXPLAIN ANALYZE

文章目录 EXPLAIN ANALYZE是什么Iterator 输出内容解读EXPLAIN ANALYZE和EXPLAIN FORMATTREE的区别单个 Iterator 内容解读 案例分析案例1 文件排序案例2 简单的JOIN查询 参考资料&#xff1a;https://hackmysql.com/book-2/ EXPLAIN ANALYZE是什么 EXPLAIN ANALYZE是MySQL8.…

SSM+Vue社区物业管理系统

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 spring-mybatis.xml3.5 spring-mvc.xml3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质创作…

高级前端进阶:揭秘 MemFire Cloud 的强大助力

在前端开发的道路上&#xff0c;我们总是在追求效率与速度的平衡&#xff0c;如何写出优雅的代码&#xff0c;如何让开发流程更加顺滑成为了每个前端开发者的目标。对于那些希望提升效率、减少繁琐开发步骤的开发者来说&#xff0c;MemFire Cloud&#xff0c;一款国产的一站式应…

Java生成Markdown格式内容

前一篇写的是markdown格式的文本内容转换保存为word文档&#xff0c;是假定已经有一个现成的markdown格式的文本&#xff0c;然后直接转换保存为word文档&#xff0c;不过在开发中&#xff0c;通常情况下&#xff0c;数据是从数据库中获取&#xff0c;拿到的数据映射到java对象…

嵌入式学习--LinuxDay04

嵌入式学习--LinuxDay04 shell脚本 1.1数组 1.1.1数组的赋值 1.1.2数组的调用 1.2函数 1.2.1函数的定义方式 1.2.2函数的调用 2.分文件编程 2.1源文件 2.2头文件 3.编译工具 3.1 gcc编译工具 3.2 gdb调试 4.make工具 4.1定义 4.2Makefile格式 4.3Makefile管理多个文件 4.4Makef…

Gartner 魔力象限:单一供应商安全访问服务边缘 2024,Palo Alto Networks 再次荣膺领导者

Gartner Magic Quadrant for Single-Vendor SASE 2024 Gartner 魔力象限&#xff1a;单一供应商安全访问服务边缘 2024&#xff0c;Palo Alto Networks 再次荣膺领导者 请访问原文链接&#xff1a;https://sysin.org/blog/gartner-magic-quadrant-single-vendor-sase-2024/&a…

成都睿明智科技有限公司抖音电商服务靠谱吗?

在这个电商风起云涌的时代&#xff0c;抖音作为短视频直播的超级流量池&#xff0c;正深刻改变着人们的购物习惯。无数商家蜂拥而至&#xff0c;渴望在这片蓝海中找到属于自己的岛屿。而提及抖音电商服务&#xff0c;成都睿明智科技有限公司无疑是一个备受瞩目的名字。那么&…

了解Webpack并处理样式文件

目录 引入定义安装和使用配置文件命令配置单独文件指定文件 处理样式css-loader使用 style-loaderless-loaderPostCSSpostcss-loaderpostcss-preset-env 引入 随着前端的快速发展&#xff0c;目前前端的开发已经变的越来越复杂了&#xff1a; 比如开发过程中我们需要通过模块化…

Harbor使用

文章目录 1、上传镜像1.1、在Harbor上创建一个项目1.2、docker添加安全访问权限1.3、推送docker镜像到该项目中1.3.1、登录到Harbor1.3.2、给镜像重新打一个标签1.3.3、推送镜像到Harbor中 2、拉取镜像2.1、先删掉原来的镜像2.2、执行拉取命令 1、上传镜像 需求&#xff1a;将…

OpenHarmony标准系统上实现对rk系列芯片NPU的支持(驱动移植)

1.将RKNPU驱动移植到Openharmony内核 本文以rk3568为例&#xff0c;将RKNPU驱动移植到Openharmony使用的kernel 5.10中 开发环境 DAYU200 rk3568开发板OpenHarmony 4.1 Release 64位系统 文档约定&#xff1a;4.1r_3568为OpenHarmony标准系统源码根目录 1.0 环境准备 1.搭建O…

RedisBoost Web缓存加速平台

1.产品介绍 产品名称:RedisBoost Web缓存加速平台 主要功能: 智能缓存策略配置 功能描述:RedisBoost提供了一套直观易用的缓存策略配置界面,允许用户根据业务场景自定义缓存策略,包括缓存时间(TTL)、缓存淘汰算法(如LRU、LFU)、数据分区与分片策略等。支持动态调整策…

Cisco ASA 9.22.1 发布下载,新增功能概览

Cisco ASA 9.22.1 - 思科自适应安全设备 (ASA) 软件 Cisco Adaptive Security Appliance (ASA) 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-asa/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 新增功能 重要…

【机器学习】---深入探讨图神经网络(GNN)

深入探讨图神经网络 1. 图的基本构成示例图邻接矩阵 2. GNN的基本原理消息传递机制更新公式 3. GNN的类型及应用3.1 Graph Convolutional Networks (GCN)GCN实现示例 3.2 Graph Attention Networks (GAT)GAT实现示例 3.3 GraphSAGEGraphSAGE实现示例 4. GNN的应用场景5. GNN的挑…