[Shell编程学习路线]——深入理解Shell编程中的变量(理论与实例)

🏡作者主页:点击! 

🛠️Shell编程专栏:点击!

⏰️创作时间:2024年6月12日11点40分

🀄️文章质量:95分


文章目录

————前言————

1 自定义变量

🫠1.定义新的变量

🏖️2.查看和引用变量的值

🗻3.变量赋值的特殊操作

1.双引号(" ")

2.单引号(' ')

3.反撇号(``)

🧱4.read 命令


————前言————

变量是编程中的基本概念,也是Shell脚本中不可或缺的组成部分。通过使用变量,你可以存储和操作数据,从而编写更灵活和动态的脚本。无论是简单的字符串、数字,还是复杂的数据结构,变量都能帮助你更有效地管理信息。在本篇指南中,我们将详细讲解Shell中的变量类型、定义方法、使用技巧以及常见的变量操作,帮助你熟练掌握变量的使用,让你的Shell脚本更加高效和强大。让我们一同深入学习Shell中的变量世界吧!

各种 Shell 环境中都使用到了“变量”的概念。Shel 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shel程序能够提供更加灵活的功能,适应性更强。 常见 She!l 变量的类型包括自定义变量、环境变量、位置变量、预定义变量。

1 自定义变量

自定义变量是由系统用户自己定义的变量,只在用户自己的Shel环境中有效,因此又称为本地变量。在编写 Shel 脚本程序时,通常会设置一些特定的自定义变量,以适应程序执行过程中的各种变化,满足不同的需要。

🫠1.定义新的变量

Bash 中的变量操作相对比较简单,不像其他高级编程语言(如 C/C++、Java 等)那么复杂在定义一个新的变量时,一般不需要提前进行声明,而是直接指定变量名称并赋给初始值(内容即可。

定义变量的基本格式为“变量名=变量值”,等号两边没有空格。变量名称需以字母或下划线开头,名称中不要包含特殊字符(如+、-、*、/、、?.%、&、#等)。例如,若要定义一个名为name的变量(值为 Python)和一个名为“Version”的变量(值为 2.7.13),可以执行以下操作。

[root@localhost ~] name=python
[root@localhost ~] version=2.7.13

🏖️2.查看和引用变量的值

通过在变量名称前添加前导符号“S”,可以引用一个变量的值。使用 echo 命令可以查看变量可以在一条 echo 命令中同时查看多个变量值,

[root@localhost ~] echo $name
python
[root@localhost ~] echo $version
2.7.13

当变量名称容易和紧跟其后的其他字符相混淆时,需要添加大括号“(}”将其括起来,否则将无法确定正确的变量名称。对于未定义的变量,将显示为空值。

[root@localhost ~] echo $name666[root@localhost ~] echo ${name}666
python666

🗻3.变量赋值的特殊操作

在等号“=”后边直接指定变量内容是为变量赋值的最基本方法,除此之外,还有一些特殊的赋值操作,可以更灵活地为变量赋值,以便适用于各种复杂的管理任务。

1.双引号(" ")

双引号主要起界定字符串的作用,特别是当要赋值的内容中包含空格时,必须以双引号括起来其他情况下双引号通常可以省略。

[root@localhost ~] name=python 2.56		//错误的
-bash: 2.56: 未找到命令
[root@localhost ~] name="python 2.56"	//正确的
[root@localhost ~] echo $name
python 2.56

在双引号范围内,使用“$”符号可以引用其他变量的值(变量引用),从而能够直接调用现有变量的值来赋给新的变量。例如,执行以下操作可以调用变量Version 的值,将其赋给一个新的变量java,最终的值为“java7.7"。

在双引号范围内,使用“$”符号可以引用其他变量的值(变量引用),从而能够直接调用现有变量的值来赋给新的变量。例如,执行以下操作可以调用变量Version 的值,将其赋给一个新的变量java,最终的值为“java7.7"。

2.单引号(' ')

当要赋值的内容中包含$、\等具有特殊含义的字符时,应使用单引号括起来。在单引号的范围内,将无法引用其他变量的值,任何字符均作为普通字符看待。但赋值内容中包含单引号()时需使用\”符号进行转义,以免冲突。

[root@localhost ~] Version=7.7
[root@localhost ~] java='java $Version'
[root@localhost ~] echo $java
java $Version

3.反撇号(``)

反撒号主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量。反撇号括起来的范围内必须是能够执行的命令行,否则将会出错。例如,若要在一行命令中查找useradd 命令程序的位置并列出其详细属性,可以执行以下操作。

[root@localhost ~] grep=`grep "root" /etc/passwd `
[root@localhost ~] echo $grep
root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin

🧱4.read 命令

Shell 中的 read 命令 用于从标准输入读取数据并将其存储在变量中。它是一种在 shell 脚本和交互式 shell 中获取用户输入的常用方法。

基本用法

read [选项] 变量名
  • 变量名 是要将读取到的数据存储到的变量。
  • 选项用于指定 read 命令的行为。

常见选项

  • -p 提示符:在读取输入之前显示提示符。
  • -n N:读取 N 个字符后结束。
  • -t 秒数:等待输入的超时时间(以秒为单位)。
  • -s:隐藏输入内容。

[root@localhost ~] read hi
你好
[root@localhost ~] echo $hi
你好

为了使交互式操作的界面更加友好,提高易用性,read 命令可以结合“-p”选项来设置提示信息,以便告知用户应该输入什么内容等相关事项。例如,若希望提示用户输入备份文件的存放目录并将输入的路径信息赋值给变量 dir 可以执行以下操作。

[root@localhost ~] read -p "请输入你想要放置的目录:" dir
请输入你想要放置的目录:/root
[root@localhost ~] echo $dir
/root

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zynq学习笔记--AXI4-Stream到视频输出IP是如何工作的?

目录 1. 简介 2. 原理详解 2.1 示例工程 2.2 AXI4-Stream to Video Out 3. Master/Slave Timing Mode 3.1 Slave Timing Mode 3.2 Master Timing Mode 4. 总结 1. 简介 本文主要介绍了 AXI4-Stream 到视频输出 的内容。其中,示例工程展示了一个具体的设计&…

GitLab教程(五):高效的工作模式——Feature Branching

文章目录 1.什么是Feature Branching2.Feature Branching的Git实践 1.什么是Feature Branching 特性分支(Feature Branching)是一种软件开发工作流,尤其在使用Git或其他版本控制系统时被广泛采用。这种策略鼓励开发者为每一个新功能、改进或…

Go 语言在云计算和分布式系统开发中的优势和挑战是什么?

Go语言在云计算和分布式系统开发中有以下优势: 并发性能:Go语言具有轻量级的协程(goroutine)和高效的调度器,能够轻松地实现高并发和并行计算,适合处理大量的请求和任务。 高效的网络编程:Go语…

推荐一款好用的读论文软件操作方法

步骤: 1. 使用一译 —— 文档和论文翻译、对照阅读、讨论和社区 2.上传自己想要翻译的论文即可。 示例 Planing论文双语翻译 1.1 Parting with Misconceptions about Learning-based Vehicle Motion Planning 中英文对照阅读 1.2 Rethinking Imitation-based Pl…

SCT82A32 是一款 100V 电压模式控制同步降压控制器

主要特征 ◦ 5.5V-100V 宽输入范围 ◦ 0.8V-60V 可调输出电压 ◦ 0.8V1% 参考电压 ◦ 最低占空比下的40ns 最小 tON ◦ 最高占空比下的150ns 最小 tOFF • 100 KHz 到 1.2 MHz 开关频率 ◦ 时钟同步输入/输出功能 ◦ 可选择二极管仿真或 FPWM • 7.5V 门极驱动器 ◦ 2.3A …

Spring Cloud Gateway 详解:构建高效的API网关解决方案

Spring Cloud Gateway 详解:构建高效的API网关解决方案 Spring Cloud Gateway 是 Spring Cloud 生态系统中用于构建 API 网关的核心组件。它基于 Spring WebFlux 构建,旨在提供简单且有效的方式来路由和增强 API 请求。以下是 Spring Cloud Gateway 的详…

2024年十堰市“武当人才支持计划”科技创新团队申报条件、时间

2024年十堰市“武当人才支持计划”科技创新团队项目申报要求如下,十堰市的企业单位可以了解一下 一 、遴选计划 聚焦十堰市“一主四优多支撑”现代产业体系发展,重点围 绕新能源与智能网联汽车、生态文旅康养、新型电池、绿色食品饮料、生物医药健康等…

【iOS】YYModel源码阅读笔记

文章目录 前言一、JSON转换库对比二、YYModel性能优化三、YYModel的使用四、架构分析YYClassInfo 剖析 五、流程剖析转换前准备工作 – 将JSON统一成NSDictionary将NSDictionary 转换为Model对象提取Model信息使用NSDictionary的数据填充Model 总结 前言 先前写了JSONModel的源…

如何计算可截素数

什么是可截素数? 它本身是一个素数,如果从左往右逐一截去数字,剩下的仍然都是素数,如果从右往左逐一截去数字,剩下的也仍然都是素数。 例如:3797就是一个可截素数。 从左往右截去数字:797&a…

利用three-csg-ts对做物体交互式挖洞

默认物体均为居中,如果指定位置没有发生偏移,可能是因为在执行布尔操作之前没有正确设置变换。确保在进行布尔运算之前应用所有必要的变换。以下是经过修正的完整代码示例,它会确保圆柱正确旋转并与盒子进行 CSG 操作。 安装依赖 首先&…

Linux部署FTP服务

什么是FTP服务 FTP(File Transfer Protocol,文件传输协议)是TCP/IP协议组中的协议之一。该协议是Internet文件传输的基础,它由一系列规格说明文档所定义,目的是让用户能把一个主机上的文件复制到另一个主机上&#xff…

如何实现网络隔离后,军工单位内网数据导出的安全性?

在现代信息化战争中,军工单位在信息安全方面的需求尤为突出。通常会采用物理隔离,将网络隔离成内网和外网,防止外部网络的恶意入侵和数据窃取。隔离后的数据仍存在内外网交换的需求,即涉及到内网数据导出,因此每日会面…

盒马鲜生礼品卡如何使用?

盒马鲜生的礼品卡除了在门店用以外,还有什么用处啊 毕竟家附近的盒马距离都太远了,好多卡最后都闲置下来了,而且以前都不知道盒马卡还会过期,浪费了好多 还好最近发现了 盒马鲜生礼品卡现在也能在收卡云上兑现了,而且…

低功耗蓝牙ble开发(二)——bluez5源码分析

3、bluetoothctl工具代码分析 Bluetoothctl工具的入口程序client/main.c中的main函数,现在跳到main函数开始分析 (1)client/main.c/main函数分析 int main(int argc, char *argv[]) { ……//命令行输入初始化,该函数里面调…

深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南

📢📢📢 深入解析 Spring Cloud Sentinel:分布式系统流量控制与熔断降级的全面指南 Spring Cloud Sentinel 是阿里巴巴开源的一款强大的分布式系统流量防卫组件,专为微服务架构设计,提供流量控制、熔断降级…

watcher学习小结

架构 主要是watcher-api,watcher-applier,watcher-decision-engine watcher-applier watcher-decision-engine 将DecisionEngineManager和DecisionEngineSchedulingService封装到oslo_service,然后调service的launch_service,实…

NetSuite ERP项目中非批次物料—批次物料数据转换流程

最近在刚结束的项目上也再次碰到了非批次物料转换为批次物料的操作,因此也想把我们在处理数据流程中的心得写出来,以便复盘与总结,也分享给各位。 整体的步骤我们可分为准备工作,调整工作以及检查工作: 准备工作 主…

抖店退款退货率太高,平台也不帮助商家,快做不下去了怎么办?

我是王路飞。 现在很多商家对抖店的评价是:比拼多多还狠,动不动就扣保证金,退款率太高,而平台一边倒站买家,要是再遇到个别发疯的买家,商家真的很无助。 其实关于抖店退款退货率高、平台也不站在商家这一…

【运维项目经历|031】GitLab自动化运维管理平台项目

🍁博主简介: 🏅云计算领域优质创作者 🏅2022年CSDN新星计划python赛道第一名 🏅2022年CSDN原力计划优质作者 🏅阿里云ACE认证高级工程师 🏅阿里云开发者社区专家博主 💊交流社区:CSDN云计算交流社区欢迎您的加入! 目…

【Flutter】路由组件的应用 (学习记录)

前言 在 Flutter 中,路由用于管理应用程序中不同页面之间的导航和跳转。Flutter 提供了多种方式来实现路由管理,包括基本的静态路由、动态路由、命名路由以及使用第三方库(如 GetX、Provider 等)来管理路由。 一、 静态路由&#…