Redian新闻
>
Bash 基础知识系列 #2:在 Bash 中使用变量 | 技术

Bash 基础知识系列 #2:在 Bash 中使用变量 | 技术

科技
 
导读:在本章的 Bash 基础知识系列中,学习在 Bash 脚本中使用变量。                   
本文字数:2616,阅读时长大约:3分钟

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

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

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

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

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

在 Bash shell 中使用变量

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

  1. var=4

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

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

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

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

Using variables in shell

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

Different variable types in Bash shell

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

在 Bash 脚本中使用变量

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

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

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

  1. mkdir -p bash_scripts && cd bash_scripts

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

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

  1. #!/bin/bash
  2. echo knock, knock
  3. echo "Who's there?"
  4. echo "It's me, $USER"

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

这是它为我生成的内容:

Using global variable in Bahs script

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

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

处理变量中的空格

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

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

  1. greetings=Hello and Welcome

你会得到这样的错误:

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

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

  1. greetings="Hello and Welcome"

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

Using spaces in variable names in bash

将命令输出分配给变量

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

  1. var=$(command)

这是一个例子:

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

Command substitution in bash

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

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

🏋️ 练习时间

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

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

  1. Hello, there
  2. My name is XYZ
  3. My current location is XYZ
  4. My home directory is XYZ
  5. My default shell is XYZ

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

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

  1. Today's price is $X
  2. 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中国 荣誉推出

LCTT 译者 :geekpi
💎💎💎💎
翻译: 1968.5 篇
|
贡献: 3547 天
2013-10-25
2023-07-12
https://linux.cn/lctt/geekpi
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
​科幻照进现实2:研究使用人工生命系统模拟远古生物入侵,释放古老病毒将是全球灾难!Bash 基础知识系列 #7:If Else 语句 | Linux 中国历史小说《黄裳元吉》第九十章 南返Bash 基础知识系列 #6:处理字符串操作 | Linux 中国1折入!穿过国际重奢𝘼𝙦𝙪𝙖𝙨𝙘𝙪𝙩𝙪𝙢的男人,才会明白什么是品质!Linux Shell 介绍:Bash、Zsh 和 Fish | Linux 中国Web 安全基础知识梳理(附PDF)为土耳其大选添点色彩——体验正宗的土耳其风味——像土耳其厨师一样烹制美味的士每拿肉丸雷达干扰的基础知识希腊阿索斯山(Mount Athos),山间隐居1折入!穿过国际重奢𝘼𝙦𝙪𝙖𝙨𝙘𝙪𝙩𝙪𝙢的人,才是真正的有品!SpringBoot项目中使用缓存的正确姿势,太优雅了!Bash 基础知识系列 #1:创建并运行你的第一个 Bash Shell 脚本 | Linux 中国MOS管基础知识,快来收藏夹吃灰~Bash 基础知识系列 #3:传递参数和接受用户输入 | Linux 中国Bash 基础知识系列 #5:在 Bash 中使用数组 | Linux 中国在 Linux 中使用 cd 命令 | Linux 中国马克谈天下(378) 聊聊世界各国的教师节一文详解云计算基础知识1折入!英国重奢𝘼𝙦𝙪𝙖𝙨𝙘𝙪𝙩𝙪𝙢,专柜同款Polo衫,舒适、透气、高品质!Linux0基础入门,教你如何在Shell中使用正则表达式火了172年!国际重奢𝘼𝙦𝙪𝙖𝙨𝙘𝙪𝙩𝙪𝙢来了,又好穿又有品!!2023武汉4号线柏(bǎi)林电影周 | 征片开启 | 选片组成员公布Bash 基础知识系列 #9:Bash 中的函数 | Linux 中国一文详解信创基础知识你应该在简历和求职信中使用人工智能吗?在Linux系统中使用Vim读写远程文件的命令详解【初中物理】初二、三物理基础知识分类汇编存储系统基础知识全解(预告)大公司为什么禁止在 Spring Boot 项目中使用 @Autowired 注解?2023回国 一份厚礼 一顿大餐(图)打造国际知识产权保护高地和国际知识产权中心城市!这场发布会聚焦知识产权保护Rust 基础系列 #7: 在 Rust 中使用循环 | Linux 中国算力网络基础知识(2023)Bash 基础知识系列 #8:For、While 和 Until 循环 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。