[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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构笔记39-48

碎碎念:想了很久,不知道数据结构这个科目最终该以什么笔记方式呈现出来,是纸质版还是电子版?后来想了又想,还是电子版吧?毕竟和计算机有关~(啊哈哈哈哈哈哈哈) 概率论已经更新完了&…

为国产加油:“缺芯少屏”暂缓,另一领域,也要加把劲

说起咱中国之前的“缺芯少屏”,真的是让人挺闹心的。 不过呢,为了改变这个状况,咱们的工程师们可是费了不少劲儿,辛辛苦苦努力了数十年。现在好了,咱们也迎来了柔性屏的时代。 柔性屏 说起来,在触摸屏或者…

消费者消费数据时报错:INVALID_REPLICATION_FACTOR

今天部署了kafka集群,三台服务器,启动后,生产者发送数据,消费者接收数据的时候报错,INVALID_REPLICATION_FACTOR。 查了很多资料,说是要改kafka下config目录的server.properties,可能是副本数太小&#xff…

【MATLAB源码-第225期】基于matlab的计算器GUI设计仿真,能够实现基础运算,三角函数以及幂运算。

操作环境: MATLAB 2022a 1、算法描述 界面布局 计算器界面的主要元素分为几大部分:显示屏、功能按钮、数字按钮和操作符按钮。 显示屏 显示屏(Edit Text):位于界面顶部中央,用于显示用户输入的表达式和…

Python学习打卡:day05

day5 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day538、函数的初体验39、函数的基础定义语法函数的定义注意事项 40、函数的基础定义案例练习41、函数的传入参数42、函数的传入参数案例练习——升…

python django初步搭建(一)

记录一次简单的python django使用,后续调用api相关的暂时不想写。。。 一、环境 windows python 3.11.7 django 二、初步搭建 2.1 新建空文件夹 为了方便本次记录,新建了一个空的文件夹来使用。 直接在这里输入cmd 然后按下回车 2.2 安装virtual…

Kubernetes集群持久化部署实践

WordPress 网站持久化部署 要持久化MariaDB 可以把 Deployment 改成了 StatefulSet,修改 YAML添加“serviceName”“volumeClaimTemplates”这两个字段,定义网络标识和 NFS 动态存储卷,然后在容器部分用“volumeMounts”挂载到容器里的数据目…

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

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

快捷回复话术分享:如何应对顾客愤怒骂人?

在客服的日常工作中,面对情绪激动、甚至愤怒发泄骂人的顾客是常见的挑战。初入此行业的小伙伴们往往在遭遇顾客的激烈情绪时感到手足无措,不知道如何妥善回应。为此,本文将分享一些实用的快捷回复话术和技巧,帮助新手客服更好地处…

vue聊天发送Emoji表情

在用web端写聊天发送表情的功能中,使用web端有系统自带的unicode表情会出现每端不统一的情况,不好用不能统一,在这里我想到了一个非常好的思路,可以解决这个问题! 那就是发送表情用图片的形式呈现,然后发给…

电脑屏幕怎么显示提醒事项 电脑桌面提醒事项设置

在这个信息爆炸的时代,我们每个人都像是被数据洪流裹挟着前进。工作中,生活中,无数琐碎而重要的事情需要我们记忆和处理。有时,仅仅依靠大脑去记住所有事情,真的让人头疼。特别是对于那些整日面对电脑的办公族来说&…

Python基础教程(十一):数据结构汇总梳理

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

使用C#快速搭建一个在windows运行的exe应用

文章目录 一、前言1.1 编写语言需要工具1.2 选择自己需要的组件进行安装 二、新建项目1.1 新建一个 .NET4.x 的项目1.2 添加一个小案例1.3 对界面进行美化1.3.1、配置Form属性1.3.2、配置Button按钮 1.4 查看组将的相关代码 三、后记 一、前言 这是一个比较旧的内容&#xff0…

java调用GDAL及JTS实现生成泰森多边形(Voronoi图)的一种方法

目录 一、关于泰森多边形 1.泰森多边形的特性 2.本文的目的 二、实现思路 1.gdal和jts库的maven坐标 2.jts生成泰森多边形的关键代码 3.使用GDAL读取源文件信息的关键代码 4.使用GDAL将生成的泰森多边形写入文件 三、实现结果 1.实现的效果 2.完整代码示例 一、关于…

【STM32】飞控设计

【一些入门知识】 1.飞行原理 【垂直运动】 当 mg>F1F2F3F4,此时做下降加速飞行 当 mg<F1F2F3F4,此时做升高加速飞行 当 mgF1F2F3F4 ,此时垂直上保持匀速飞行。 【偏航飞行】 ω 4 ω 2 ≠ ω 1 ω 3 就会产生水…

【CT】LeetCode手撕—200. 岛屿数量

目录 题目1-思路2- 实现⭐200. 岛屿数量——题解思路 3- ACM实现 题目 原题连接:200. 岛屿数量 1-思路 利用 dfs 深搜,遇到岛屿直接将岛屿填充为 0 2- 实现 ⭐200. 岛屿数量——题解思路 class Solution {public int numIslands(char[][] grid) {int …

开源WebGIS全流程常用技术栈

1 数据生产 1.1 uDig uDig(http://udig.refractions.net/)是一个基于Java开源的桌面应用框架,它构建在Eclipse RCP和GeoTools(一个开源的Java GIS包)上。可以进行shp格式地图文件的编辑和查看;是一个开源空间数据查看…

5月产品更新 | 10大更新汇总,快来看看你的需求上线了吗?

5月,Smartbi从客户需求出发,并结合企业在数据分析、处理等方面遇到的问题,对数据模型、数据指标等数十项功能进行了优化升级。 Smartbi用户可以在官网下载下载PC端,更新后便可以使用相关功能,也可以在体验中心体验相关…

mybatis之特殊SQL的执行

1.1模糊查询 尝试&#xff1a; //模糊查询用户 List<User> getUserByLike(Param("mohu") String mohu);<select id"getUserByLike" resultType"user">select * from user where username like %#{mohu}% </select>Test publ…

DP:两个数组的dp问题

解决两个数组的dp问题的常用状态表示&#xff1a; 1、选取第一个字符串[0-i]区间以及第二个字符串[0,j]区间作为研究对象 2、根据题目的要求确定状态表示 字符串dp的常见技巧 1、空串是有研究意义的&#xff0c;引入空串可以帮助我们思考虚拟的边界如何进行初始化。 2、如…