Bash 基础知识系列 #2:在 Bash 中使用变量
创始人
2024-03-02 16:21:17
0

在本章的 Bash 基础知识系列中,学习在 Bash 脚本中使用变量。

在 Bash 基础知识系列的第一部分中,我简要提到了变量。现在是时候在本章中详细了解它们了。

如果你曾经进行过任何类型的编码,你一定熟悉术语“变量”。

如果没有,请将变量视为保存信息的盒子,并且该信息可以随着时间的推移而改变。

让我们看看如何使用它们。

在 Bash shell 中使用变量

打开终端并使用一个随机的数字 4 初始化变量:

var=4

现在你有一个名为 var 的变量,它的值为 4。想验证一下吗? 通过在变量名前添加 $ 来访问变量的值。这称为参数扩展。

[abhishek@itsfoss]:~$ echo The value of var is $var
The value of var is 4

? 变量初始化时 = 前后不能有空格。

如果需要,你可以将该值更改为其他值:

Using variables in shell

在 Bash shell 中,变量可以是数字、字符或字符串(包括空格在内的字符)。

Different variable types in Bash shell

? 与 Linux 中的其他事物一样,变量名称也区分大小写。它们可以由字母、数字和下划线 “_” 组成。

在 Bash 脚本中使用变量

你是否注意到我没有运行 shell 脚本来显示变量示例? 你可以直接在 shell 中做很多事情.当你关闭终端时,你创建的那些变量将不再存在。

但是,你的发行版通常会添加全局变量,以便可以在所有脚本和 shell 中访问它们。

让我们再写一些脚本.你应该之前创建了脚本目录,但无论哪种情况,此命令都会处理该目录:

mkdir -p bash_scripts && cd bash_scripts

基本上,如果 bash_scripts 目录尚不存在,它将创建它,然后切换到该目录。

这里让我们使用以下文本创建一个名为 knock.sh 的新脚本。

#!/bin/bash

echo knock, knock
echo "Who's there?"
echo "It's me, $USER"

更改文件权限并运行脚本。你在上一章中已经学到了。

这是它为我生成的内容:

Using global variable in Bahs script

你是否注意到它如何自动将我的名字添加到其中? 这就是包含用户名的全局变量 $USER 的魔力。

你可能还注意到,我有时将 "echo 一起使用,但其他时候则不使用。这是故意的。bash 中的引号 有特殊含义。它们可用于处理空格和其他特殊字符。让我展示一个例子。

处理变量中的空格

假设你必须使用一个名为 greetings 的变量,其值为 hello and welcome

如果你尝试像这样初始化变量:

greetings=Hello and Welcome

你会得到这样的错误:

Command 'and' not found, but can be installed with:
sudo apt install and

这就是为什么你需要使用单引号或双引号:

greetings="Hello and Welcome"

现在你可以根据需要使用该变量。

Using spaces in variable names in bash

将命令输出分配给变量

是的!你可以将命令的输出存储在变量中并在脚本中使用它们。这称为命令替换。

var=$(command)

这是一个例子:

[abhishek@itsfoss]:~$ today=$(date +%D)
[abhishek@itsfoss]:~$ echo "Today's date is $today"
Today's date is 06/19/23
[abhishek@itsfoss]:~$

Command substitution in bash

旧语法使用反引号而不是 $() 进行命令替换。虽然它可能仍然有效,但你应该使用新的推荐符号。

? 变量会更改值,除非你声明一个“常量”变量,如下所示:readonly pi=3.14。在这种情况下,变量 pi 的值无法更改,因为它被声明为 readlonly

?️ 练习时间

是时候练习你所学到的东西了。这里有一些练习来测试你的学习情况。

练习 1:编写一个 bash 脚本,以以下格式打印你的用户名、当前工作目录、主目录和默认 shell。

Hello, there
My name is XYZ
My current location is XYZ
My home directory is XYZ
My default shell is XYZ

提示:使用全局变量 $USER$PWD$HOME$SHELL

练习 2: 编写一个 bash 脚本,声明一个名为 price 的变量.使用它来获取以下格式的输出:

Today's price is $X
Tomorrow's price is $Y

其中 X 是变量 price 的初始值,并且明天价格翻倍。

提示:使用 \ 转义特殊字符 $

练习的答案可以在社区的这个专用帖子中讨论。

在 Bash 基础知识系列的下一章中,你将了解如何通过传递参数和接受用户输入来使 bash 脚本具有交互性。

(题图:MJ/37c5c26e-3289-4ebd-b8ae-88eb8a3b2eb1)


via: https://itsfoss.com/bash-use-variables/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

相关内容

AI辅助Linux系统管理...
我并非所有场景都推崇使用AI。在创意类工作中,我坚持认为AI介入空...
2026-06-20 12:53:31
北大团队首创"电...
这项由北京大学、快手科技、华南理工大学、电子科技大学、香港大学以及...
2026-03-13 19:48:44
基础Ubuntu网络代理的...
Ubuntu系统的网络代理配置是许多用户日常使用中的必备技能,从基...
2025-08-24 16:46:06
开启“零门槛”AI视频创作...
随着移动端的普及和数字化技术的成熟,短视频创作内容不仅逐渐向各行各...
2025-07-11 14:12:34
编写CentOS系统下的B...
面对重复繁琐的服务器操作,手动输入命令效率低下且易出错。为了解决这...
2025-06-15 08:43:24
怎么用AI做短视频赚钱?小...
嘿,你是不是也刷到过那些爆火的短视频,心想:“这玩意儿咋这么赚钱?...
2025-06-06 22:12:18

热门资讯

“Linux 中国” 开源社区... 这是一个艰难的决定 —— 这不是调侃,而是当你真正做出改变了你十几年生活轨迹的决定时,你就会明白这个...
硬核观察 #1263 德国铁路... #1 德国铁路公司招聘 Windows for Workgroups 3.11 管理员该职位要求了解...
人工智能教程(七):Sciki... 在本系列的 上一篇文章 中,我们用 TensorFlow 构建了第一个神经网络,然后还通过 Kera...
关闭 WSL 中正在运行的 L... 以下是使用 WSL 关闭在 Windows 内运行的 Linux 系统的不同方法。你使用 WSL 在...
MX Linux 23.2 “... 最新的 MX Linux 23.2 小版本更新带来了基本的改进和新增功能。MX Linux 推出了 ...
硬核观察 #1262 网络上最... #1 网络上最古老的软件存档库之一即将关闭美国新墨西哥州立大学(NMSU)最近宣布,即将于 2024...
如何在 RHEL 上通过绑定配... 在 Linux 中,你可以根据自己的需要创建高级网络设置,如 网络绑定 Network Bondin...
Linux Matrix 消息... Matrix 用户可以升级 Fractal 6 了!Fractal 是目前 最好的 Matrix 客...
如何通过 VLC 使用字幕 使用 VLC 媒体播放器播放和管理字幕的新手指南。我是一个超级动漫迷,如果你想观看最新的剧集,那么你...
硬核观察 #1261 X 计划... #1 X 计划在奥斯汀建立内容审核总部据报道,该部门将招聘 100 名全职员工,将主要关注 CSE ...