Shell编程基础 – 变量(Variables)

news2024/10/6 4:03:55

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.coloradmin.cn/o/1250935.html

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

相关文章

Python中classmethod的妙用

更多Python学习内容:ipengtao.com 在Python中,classmethod装饰器为开发者提供了一种强大的工具,使得类方法的定义和使用更加灵活。本文将深入探讨classmethod的妙用,通过丰富的示例代码展示其在不同场景下的实际应用。 类方法与实…

Visual Studio 中文注释乱码解决方案

在公司多人开发项目中经常遇到拉到最新代码,发现中文注释都是乱码,很是emjoy..... 这是由于编码格式不匹配造成的,如果你的注释是 UTF-8 编码,而文件编码是 GBK 或者其他编码,那么就会出现乱码现象。一般的解决办法是…

【鬼鬼鬼iiARPG开发记录】

鬼鬼鬼ARPG开发记录 一、创建项目1、创建3D(URP)项目2、导入新的输入系统(input system)3、勾选Enter Play Mode Options 二、导入资源1、创建若干文件夹 一、创建项目 1、创建3D(URP)项目 2、导入新的输入系统(input system) …

lvm 扩容根分区失败记录

lvm 扩容根分区失败记录 1、问题描述2、错误描述3、解决方法重启系统进入grub界面,选择kernel 2.x 启动系统。然后同样的resize2fs命令扩容成功。 1、问题描述 根分区不足。 系统有2个内核版本,一个是kernel 2.x,另一个是kernel 4.x。 这次l…

Leetcode201. 数字范围按位与

Every day a Leetcode 题目来源:201. 数字范围按位与 最直观的解决方案就是迭代范围内的每个数字,依次执行按位与运算,得到最终的结果,但此方法在 [left, right] 范围较大的测试用例中会因超出时间限制而无法通过,因…

Kafka配置SASL认证密码登录

​​​​​​1、修改config/server.properties,添加如下内容 listenersSASL_PLAINTEXT://内网ip:9092 advertised.listenersSASL_PLAINTEXT://外网ip:9092 security.inter.broker.protocolSASL_PLAINTEXT sasl.mechanism.inter.broker.protocolPLAIN sasl.enabled.…

【开源】基于JAVA的森林火灾预警系统

项目编号: S 019 ,文末获取源码。 \color{red}{项目编号:S019,文末获取源码。} 项目编号:S019,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟…

中职组网络安全-FTPServer20221010.img(环境+解析)

任务环境说明: √服务器场景:FTPServer20221010.img √服务器操作系统:未知(关闭链接) √FTP用户名:attack817 密码:attack817 1.分析attack.pcapng数据包文件,通过分析数据包attack…

电子学会C/C++编程等级考试2021年06月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:数字放大 给定一个整数序列以及放大倍数x,将序列中每个整数放大x倍后输出。 时间限制:1000 内存限制:65536输入 包含三行: 第一行为N,表示整数序列的长度(N ≤ 100); 第二行为N个整数(不超过整型范围),整数之间以一个空格…

鸿蒙开发-ArkTS 语言-基础语法

1. 初识 ArkTS 语言 ArkTS 是 HarmonyOS 优选主力开发语言。ArkTS 是基于 TypeScript (TS) 扩展的一门语言,继承了 TS 的所有特性,是TS的超集。 主要是扩展了以下几个方面: 声明式UI描述和自定义组件: ArkTS使用声明式的方式描述用…

物联网中基于信任的安全性调查研究:挑战与问题

A survey study on trust-based security in Internet of Things: Challenges and issues 文章目录 a b s t r a c t1. Introduction2. Related work3. IoT security from the one-stop dimension3.1. Output data related security3.1.1. Confidentiality3.1.2. Authenticity …

JSP JSTL引入依赖并演示基础使用

然后 我们来讲 JSTL Java server pages standarded tag library 简称 JSTL 这是 一个 JSP的标准标签库 JSP标准标签的集合 封装了JSP中的通用核心功能 根据JSTL类库提供的标签 可以将他分为5个类 1 核心标签 2 格式化标签 3 SQL标签 4 XML标签 5 函数标签 这边 我们主要将 核…

Linux的gcc,gdb基础

执行详解: 1)如何执行 路径可执行文件名 或者 路径可执行文件名 & (将进程放到后台执行); 可以把可执行文件放到 /usr/bin 就可以省略路径了; 思考:为什么? ps :/usr/bin ps,ls,pwd (先了解,后期写项目就知道为什么了) 2)两步执行与一步执行 a.可以三步合为一步,即…

HTML4总结

一、前序知识 1. 认识两位先驱 2. 计算机基础知识 1. 计算机俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算、逻辑计算,还 具有存储记忆功能。 2. 计算机由 硬件 软件 成: 硬件:看得见摸得着…

十大排序之归并排序(详解)

文章目录 🐒个人主页🏅算法思维框架📖前言: 🎀归并排序 时间复杂度O(n*logn)🎇1. 算法步骤思想🎇2、动画演示🎇3.代码实现 🐒个人主页 🏅算法思维框架 &#…

如何打造垂直LLM的护城河

B2B人工智能初创企业的一个伟大策略是打造“垂直人工智能”产品:成为特定行业的人工智能助手,比如律师、金融服务、医生。 听起来很简单:你可以利用LLM的超能力,并将其应用于宠物行业的特定数据和用例。 这就是我们在Explain所做的…

excel表中慎用合并单元格,多用跨列居中

如下一个excel例表: 要将首行居中,最好的办法如下: 1、选中首行单元格 2、按下ctrl1,调出“设置单元格格式”,选中“对齐”,在“水平对齐”中选择“跨列居中” 3、完成任务 这样居中的好处是:可…

五分钟,Docker安装flink,并使用flinksql消费kafka数据

1、拉取flink镜像,创建网络 docker pull flink docker network create flink-network2、创建 jobmanager # 创建 JobManager docker run \-itd \--namejobmanager \--publish 8081:8081 \--network flink-network \--env FLINK_PROPERTIES"jobmanager.rpc.ad…

HCIP-八、路由引入

八、路由引入 实验拓扑实验需求及解法1.配置所有设备的IP地址。2.R1/2/3/4运行OSPF3.R3/4/5运行IS-IS4.在R3/4上将OSPF 1引入IS-IS5.在R3/4上将IS-IS引入OSPF6.路径优化 实验拓扑 实验需求及解法 本实验模拟OSPF与IS-IS互联的网络环境,完成以下需求: 1…

linux开启apache服务

vim /etc/apache2/ports.conf 键盘输入i 进入插入编辑模式,修改apache2默认监听端口号为8080 ,编辑好后,按Esc键“:wq!” 保存退出。(注:端口也可以不修改) 在终端输入“/etc/init.d/apache2 …