Shell编程基础 – 变量(Variables)

Shell编程基础 – 变量(Variables)

Shell Scripting Essentials – Variables

Bash变量作为shell脚本的重要组成部分,提供了在Unix/Linux命令行界面操作和保存数据的方法。

本文简要介绍Bash Shell脚本变量的基础知识以及应用,包括变量类型、声明方法、初始化及相关用法,希望对您学习shell编程有所帮助。

以下内容分为三个部分:
1) Bash变量的基本概念;
2) Bash脚本中变量的类型;
3) Bash脚本的特殊变量和环境变量。

1. Bash Shell变量基本概念

Bash 变量是操作shell编程语句的数据,也是随时可变的数据。变量可作为 bash 脚本中字符串或数字的临时存储容器。变量一经声明,可以帮助用户编写复杂的函数和执行各种操作,它在这些方面发挥着重要作用。

使用shell创建变量并为它们分配名称和相应的值。在分配值时,您可以自由使用适合您需求的任何字符串或数字

为变量选择一个反映其值的名称通常是有益的,因为它可以更轻松地记住和区分脚本中的其他变量。

以下是需要牢记的其他一些重要语法注意事项:

  1. 首先,为变量赋值时,请避免在等号 (=) 周围使用空格。例如,这样赋值:
name=”Jackson”

而不是这样, name = “Jackson”。

  1. 若要访问存储在变量中的值,请使用美元符号 ( ),后跟变量名称。例如, ),后跟变量名称。例如, ),后跟变量名称。例如,age将扩展为存储在 age 变量中的值。 如以下代码:
echo "Your age is $age"
  1. 您可以使用命令替换将命令的输出分配给变量。将命令括在反引号()中或使用$(command) 语法。
    例如,查看当前目录文件列表命令赋给所声明变量,并为其初始化为以下任意一种:
view_list =`ls` 

或者,

view_list =$(ls)
  1. 在引号中使用变量时,请考虑引号的类型以存储数值。双引号 (“”) 允许变量扩展,而单引号 (‘’) 将变量名称保留为字面量字符串。

  2. 如果要复原变量并删除它的值,那么需要使用 unset 命令,后跟变量名称。例如,依据上面的例子,执行:

unset view_list

通过牢记这些语法格式,您可以避免常见错误并在脚本中有效地使用 bash 变量。

2. 变量类型

Bash 变量根据其部署分为两种类型:系统定义变量用户定义变量

1) 系统定义变量

Bash 中的系统定义变量是预定义的变量,提供有关系统和 shell 环境的信息。系统会自动设置这些变量,并且可以在 shell 脚本中访问和使用。以下是一些常用的系统定义变量:

在这里插入图片描述

2) 用户定义变量

Bash shell中的用户定义变量是您在 shell 脚本中创建并为其赋值的变量。系统不会预定义这些变量,可以根据您的需要进行定制。

3. 在 Bash 脚本中使用变量

在 Bash 脚本中使用变量包含不同的上下文,例如使用特殊变量和环境变量,而不仅仅是在脚本中编写 bash 命令。

通过了解和利用这些不同上下文中的变量,您可以自定义行为、执行计算、处理用户输入以及使脚本适应不同的方案。

下面,下面是关于在 Bash 脚本中使用变量的讨论。所以,让我们开始吧。

1) Bash 脚本中的变量数据类型

在 Bash 脚本中,变量不会使用特定数据类型显式声明。Bash 使用一个称为动态类型的概念,这意味着变量可以保存不同类型的值,并且它们的类型可以根据需要随时更改。

以下是有关 Bash 脚本中变量数据类型的一些要点:

  • 字符串:默认情况下,Bash 中的变量被视为字符串。它们可以保存字符序列,包括字母、数字和特殊字符。例如,
name="John"
age=“25
  • 整数:Bash 也支持整数算术,但您需要使用特定结构进行数值运算。您可以使用 let 命令或带有双括号的算术扩展来执行算术运算。例如,
num1=10
num2=5
  • 数组:Bash 支持一维数组,可以保存多个数值。例如,
fruits=(“apple”, “banana”, “orange”)

Bash 还支持关联数组,它允许您使用字符串作为索引。

– 布尔变量:Bash 没有专用的布尔数据类型,但你可以使用变量来表示 true/false 值(即将true/false赋值给布尔变量)。例如,

isTrue=true
isFalse=false

4. 创建自己的变量

在 Bash 中创建变量时,任何不是环境变量的变量都被视为用户shell程序自身的变量。这些变量特定于您的脚本,不能在脚本之外被访问或修改,属于脚本的局部变量。这样可以确保您定义的变量不会干扰其他脚本或系统环境。

请务必遵循变量命名规则以避免语法错误。变量不能以数字开头,因为 Bash 将其解释为数值。此外,变量名称中不允许使用空格,因为它们用作 Bash 脚本中不同元素之间的分隔符。

但是,您可以在变量名称中使用下划线 (_) 和大写字母。也可以使用大写字母,但值得注意的是,Bash 区分大小写,因此使用一致的大写对于确保在整个脚本中正确引用变量非常重要。

view_list=`ls`

5. Bash 脚本中使用的特殊变量

在 Bash 中使用特殊变量可以访问预定义值,这些值传达了有关环境和脚本执行的特定信息。此外,这些变量用于各种用途并协助编写脚本任务。以下是一些常用的特殊变量,描述如下:

在这里插入图片描述

6. 使用环境变量

Bash 中的环境变量可供特定系统上运行的所有脚本访问。与局部变量不同,环境变量由系统自动定义。环境变量的另一个重要方面是这些变量是用大写字母写的(例如:$HOME, $USER等)。它向用户清楚地表明他们正在使用环境变量。

下面概述了如何在 Bash 脚本中使用环境变量:

  • Bash 访问环境变量:要访问环境变量的值,可以使用 $ 符号后跟变量名称。 设置环境变量:若要在 Bash 会话中设置环境变量,可以使用 export 命令。要使变量在多个 Bash 会话中持久化,您可以将 export 命令添加到 shell 配置文件(例如
    ~/.bashrc 或 ~/.bash_profile)。
  • 删除环境变量:要删除环境变量,可以使用 unset 命令。
    列出所有环境变量:若要列出 Bash 会话中设置的所有环境变量,可以使用 env 命令或 printenv 命令。
  • Bash 变量中的引号
    在 Bash 脚本中,引号在处理变量时起着重要作用。
  1. 双引号 (“”) 通常用于扩展变量并替换其值、执行命令和捕获其输出,以及转义某些字符。
  2. 另一方面,单引号 (“) 将变量和特殊字符视为文本字符串,从而防止任何扩展或替换。选择适当的引号类型对于在 Bash 脚本中有效操作变量至关重要。

8. Shell脚本示例

现在,我们创建一个脚本check-in.sh, 并声明几个变量,用来登记酒店入住客人姓名和身份ID,并且为用户创建一个用户目录。这样,也对上述知识做个小结。

#!/bin/bash
echo “Register your personal information.”
read -p “Enter your name: “ n
echo “Welcome, Mr.$n!”
read -p “Enter your ID:” i
echo “Your ID is: $iecho “Making your user directory …”
cd /home
mkdir /home/$n
$PWD
echo “Congratulations! Your user directory is /home/$n”
date

执行结果如下图所示:
在这里插入图片描述

9. 小结

总之,变量在Bash shell脚本中是必不可少的组件,它不但能够存储和操作数据,还支持计算、用户输入和数据存储等。本文试图帮助您了解 Bash 脚本中的变量,以便在应用中能够事半功倍。

技术好文陆续推出,敬请关注。
如果觉得本文有用,欢迎点赞!您的认可,我的动力! 😊

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

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

相关文章

Android Studio 显示build variants工具栏

工具栏: 如下图所示 依次点击View-->ToolWindows-->Build Variants。 在此记个笔记

Hadoop实践指南:揭秘HDFS元数据并解析案例

1.什么是元数据 元数据(Metadata),描述数据的数据(data about data)。 1.1 HDFS元数据 元数据:关于文件或目录的描述信息,如文件所在路径、文件名称、文件类型等等,这些信息称为文…

【开源】基于JAVA的车险自助理赔系统

项目编号: S 018 ,文末获取源码。 \color{red}{项目编号:S018,文末获取源码。} 项目编号:S018,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 角色管理模块2.3 车…

如何在没有备份的情况下恢复 iPhone 上已删除的短信

要在没有备份的情况下恢复 iPhone 上已删除的消息,您可以从“消息”应用程序恢复它们或使用第三方数据恢复工具。 虽然我们的 iPhone 可以做很多事情,但我在设备上最常做的事情之一就是文本。无论我是与朋友或家人联系,还是分享重要信息&…

从Redis反序列化UserDetails对象异常后发现FastJson序列化的一些问题

最近在使用SpringSecurityJWT实现认证授权的时候,出现Redis在反序列化userDetails的异常。通过实践发现,使用不同的序列化方法和不同的fastJson版本,异常信息各不相同。所以特地记录了下来。 一、项目代码 先来看看我项目中redis相关配置信息…

【Spring日志】

一.日志作用 1.定位和发现问题 这是日志的主要用途,通过查看日志,我们可以定位问题发生的位置,从而快速的发现问题,分析问题. 2.系统监控 监控几乎是一个成熟系统的标配,我们可以通过日志记录这个系统的运行状态,比如记录方法的响应时间,响应状态,通过设置不同的规则,超过阈值就…

递归算法学习——二叉树的伪回文路径

1,题目 给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 示例…

python-选择排序

选择排序是一种简单直观的排序算法,它的基本思想是每一轮选择未排序部分的最小元素,然后将其放到已排序部分的末尾。这个过程持续进行,直到整个数组排序完成。(重点:通过位置找元素) 以下是选择排序的详细步骤和 Python 实现&…

自动语音识别 支持86种语言 Dragon Professional 16 Crack

从个体从业者到全球组织,文档密集型行业的专业人士长期以来一直依靠 Dragon 语音识别来更快、更高效地创建高质量文档,减少管理开销,以便他们能够专注于客户。了解 Dragon Professional v16 如何通过单一解决方案提高标准,为各个业…

你听过斯大林病毒吗?

相信不少小伙伴看过这种红眼特效,那么你知道这个特效最早出自哪里吗? 其实这个红眼病毒最早出于俄罗斯的电脑病毒斯大林,一旦电脑感染这个病毒,屏幕上就会出现自带一个红眼特效的斯大林人像,同时不断播放苏联国歌。 …

【JavaEE】认识多线程

作者主页:paper jie_博客 本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。 本文录入于《vaEE》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造&am…

新版画中画documentPictureInPicture API使用

关于该API,chrome dev有一篇比较好入门的文章,如果你没看过强烈推荐你先看这篇基础用法,该文章只针对API的特性和chrome dev文章进行扩展性说明。 提前说明,目前该API是非w3c草案功能,从chrome 116开始已经强推到stabl…

PyQt6运行QTDesigner生成的ui文件程序

2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计18条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~、第2讲 PyQt6库和工具库Q…

BUUCTF [GXYCTF2019]gakki 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。 密文: 下载附件,解压得到一张.jpg图片。 解题思路: 1、放到010 Editor中看一下,找到rar压缩包的文件头。使用Kali中的binwalk工具…

【Linux】EVIOCGBIT

EVIOCGBIT(ev, len) 该怎么理解? 我们可以推断出,它是一个宏,它的前两个参数已经确定了,具体的功能由后两个参数(ev,len)来决定。Linux-4.9.88\include\uapi\linux\input.h #define EVIOCGBIT(ev,len) _IOC(_IOC_READ, E, 0x20 …

Linux环境配置Seata开机自启脚本(在MySQL和Nacos启动后启动)

之前给seata配置了一个开机启动脚本,但是经常出现启动失败,查询日志要么MySQL没有连接上要么nacos连接不上,原因都是因为服务器重启的时候这两个服务都还没有完全启动,所以正常的做法应该是启动前先等前置服务启动好了再启动seata…

你知道吗,这些行业的人也是工程师哦

止这些,其工作涉及多种领域,也就是说,有很多细分行业的开发人员也算是电子工程师,下面我们来看看有哪些电子工程师! 1、应用电子工程师 主要负责将电子技术与特定应用相结合,设计并开发满足特定需求的电子…

【教3妹学编程-算法题】二叉树中的伪回文路径

3妹:好冷啊, 冻得瑟瑟发抖啦 2哥 : 又一波寒潮来袭, 外面风吹的呼呼的。 3妹:今天还有雨,2哥上班记得带伞。 2哥 : 好的 3妹:哼,不喜欢冬天,也不喜欢下雨天,要是我会咒语…

常用的Linux的指令

目录 常用指令 1、文件和目录操作: 2、文件查看和编辑 3、系统信息 4、进程管理 5、用户和权限 6、网络操作 7、压缩和解压 8、软件包管理 常用指令 1、文件和目录操作: ls:列出目录内容 cd: 切换目录 pwd:显…

leetcode:随机链表的复制

题目描述 题目链接:138. 随机链表的复制 - 力扣(LeetCode) 题目分析 这个题目很长,但是意思其实很简单:就是一个单链表,每个结点多了一个指针random随机指向链表中的任意结点或者NULL,我们血需…