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 脚本中的变量,以便在应用中能够事半功倍。

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

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

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

相关文章

python实现炫酷的屏幕保护程序!

今天写了桌面保护程序。先来看看效果吧。 完全可以作为屏保程序了,老方式:以下是实现的代码: from tkinter import *from time import strftime​def update_time():global i, j current_time strftime(%H:%M:%S)time_label.config(textcu…

arp报文及使用go实现

一、ARP协议报文格式及ARP表 ARP(Address Resolution Protocal,地址解析协议)是将IP地址解析为以太网的MAC地址(或者称为物理地址)的协议。在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设备…

开源语音大语言模型来了!阿里基于Qwen-Chat提出Qwen-Audio!

论文链接:https://arxiv.org/pdf/2311.07919.pdf 开源代码:https://github.com/QwenLM/Qwen-Audio 引言 大型语言模型(LLMs)由于其良好的知识保留能力、复杂的推理和解决问题能力,在通用人工智能(AGI&am…

现代图标集wxArtProvider发布 —— 发布于2023年11月21日

Perazz发布了wxMaterialDesignArtProvider,这是一个自定义的wxArtProvider类,从MaterialDesign、SimpleIcons、FontAwesome和FluentUI系统数据集中提供基于SVG的图标。所有这些数据集都有许可证(MIT、CC BY 4.0、CC0 1.0、Apache 2.0&#xf…

打破障碍:2024年赋能企业人工智慧生成创新-5个应用场景与6个转型步骤

想要了解如何采用生成式AI来提高企业效率和竞争力?本指南将介绍如何采用生成式AI来实现数字化转型,并打造智能化商业模式。从5大应用场景和6大步骤切入,让您了解如何开启生成式AI创新。立即连线创新专家咨询或观看创新战略方案视频进一步了解…

Leetcode—58.最后一个单词的长度【简单】

2023每日刷题&#xff08;四十&#xff09; Leetcode—58.最后一个单词的长度 实现代码 int lengthOfLastWord(char* s) {int len strlen(s);int left 0, right 0;if(len 1) {return 1;}while(right < len) {if(right 1 < len) {if(s[right] && s[righ…

【spring(五)】SpringMvc总结 SSM整合流程

目录 一、SpringMVC简介&#xff1a; 二、SpringMVC快速入门&#xff1a; 三、SpringMVC bean的管理&#xff1a;⭐ ①配置bean ②扫描bean 四、SpringMVC配置类&#xff1a;⭐ 五、SpringMVC 请求与响应 六、SpringMVC REST风格 七、SSM整合 异常处理&#xff1a; 八、…

今日现货白银价要素分析

现货白银市场每天走势图上的K线&#xff0c;都是由开盘价、收盘价、最高价、最低价四个价格要素组成。K线作为一种特殊的市场语言&#xff0c;不同具体的形态有不同的含义&#xff0c;当收盘价高于开盘价就形成阳线&#xff0c;反之就形成阴线。 如果阳线出现在银价盘整或行情下…

位图的详细讲解

位运算操作符&#xff1a;或&#xff0c;与&#xff0c;异或&#xff0c;按位取反。 操作符 |两个中有一个是一则为一&两个都是一则为一^相同为零&#xff0c;不同为一~零变成一&#xff0c;一变成零 什么是位运算符: 位运算是直接对整型数据的二进制进行运算。 位图概念…

基于UI交互意图理解的异常检测方法

美团到店平台技术部/质量工程部与复旦大学周扬帆教授团队开展了科研合作&#xff0c;基于业务实际场景&#xff0c;自主研发了多模态UI交互意图识别模型以及配套的UI交互框架。 本文从大前端质量保障领域的痛点出发&#xff0c;介绍了UI交互意图识别的方法设计与实现。基于UI交…

告别百度网盘,搭建自己的专属网盘 ——Cloudreve,不限制下载速度!

Cloudreve 是一个用 Go 语言写的公有网盘程序,我们可以用它来快速搭建起自己的网盘服务,公有云 / 私有云都可。 顺哥博客 先来看看文档介绍吧。 支持多家云存储驱动的公有云文件系统. 演示站 • 讨论社区 • 文档 • 下载 • Telegram 群组 • 许可证 :sparkles: 特性 :cl…

初学剪辑者找视频素材就上这6个网站

视频剪辑必备的6个素材网站&#xff0c;高清无水印&#xff0c;还可以免费下载&#xff0c;无版权限制&#xff0c;赶紧收藏起来&#xff01; 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYxMjky 菜鸟图库网素材非常丰富&#xff0c;网站主要以设计类素材为主&#…

初始linux:文件操作

目录 提示&#xff1a;以下指令均在Xshell 7 中进行 linux的理念 一、echo echo "字符串" 二、输出重定向 > > [文件] echo "字符串" > [文件] echo "字符串" > > [文件] 制作大文件 三、< 输入重定向与ca…

短视频ai剪辑矩阵分发saas系统源头技术开发

抖音账号矩阵系统是基于抖音开放平台研发的用于管理和运营多个抖音账号的平台。它可以帮助用户管理账号、发布内容、营销推广、分析数据等多项任务&#xff0c;从而提高账号的曝光度和影响力。 具体来说&#xff0c;抖音账号矩阵系统可以实现以下功能&#xff1a; 1.多账号多…

基于M估计样本一致性算法的点云平面拟合

平面拟合 1、算法简介2、参考文献3、实现效果4、相关代码 1、算法简介 RANSAC 是在给定模型和距离阈值 T T T的情况下&#xff0c;通过寻找最小代价 C C C来确定内点数据并拟合模型。如式&#xff08;1&#xff09;所示的代价函数&#xff0c;当点到模型的距离 e e e小于阈值 T…

webshell之Laravel和yii

EvalLoader#load 免杀效果 EvalLoader#load分析 eval命令执行函数&#xff0c;参数可控 MockTrait#generate 免杀效果 MockTrait#generate函数分析 存在一个eval函数 MockTrait#generate 免杀效果 view#evaluateDynamicContent 免杀效果 view#evaluateDynamicContent分析 总结…

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(2-4:内核控制与时间管理函数)

学习之路主要为FreeRTOS操作系统在STM32F103&#xff08;STM32F103C8T6&#xff09;上的运用&#xff0c;采用的是标准库编程的方式&#xff0c;使用的IDE为KEIL5。 注意&#xff01;&#xff01;&#xff01;本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习…

Pikachu(二)

CSRF (跨站请求伪造)概述 Cross-site request forgery 简称为“CSRF”&#xff0c;在CSRF的攻击场景中攻击者会伪造一个请求&#xff08;这个请求一般是一个链接&#xff09;&#xff0c;然后欺骗目标用户进行点击&#xff0c;用户一旦点击了这个请求&#xff0c;整个攻击就完…

SpringBoot+SSM项目实战 苍穹外卖(1)

目录 产品原型与技术选型后端环境搭建Git版本控制IDEA中运行sql脚本文件nginx反向代理和负载均衡完善登录功能 导入接口文档SwaggerSwagger常用注解 产品原型与技术选型 管理端原型图&#xff1a; 用户端原型图&#xff1a; 餐饮企业内部员工使用。 主要功能有: 模块描述登录…

在Spring Boot中实现单文件,多文件上传

这篇文章算是一篇水文&#xff0c;因为也没啥好讲的&#xff0c;在Spring Boot中&#xff0c;上传文件是我们常常做的&#xff0c;包括我们在实际开发过程中&#xff0c;我们也经常碰到与文件上传有关的功能&#xff0c;这也算是我们常用的一个功能了&#xff0c;毕竟作为开发者…