找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1003

积分

0

好友

131

主题
发表于 10 小时前 | 查看: 2| 回复: 0

如果你之前学习过其他编程语言,那么对“变量”这个概念一定不陌生。

但对于初学者来说,可以把变量简单地理解为一个“容器”,这个容器用来存放一些可能会变化的信息或数据。

实际上,无论使用哪种编程语言,变量都是基础中的基础。在上一节的Bash入门教程中,我们已经接触过系统预定义的变量,例如 HOMEUSERSHELL。今天,我们将深入探讨如何在你自己编写的 Bash 脚本中定义和使用变量,这是迈向自动化与高效脚本编写的关键一步。

从一个简单的“Hello, World!”脚本开始

回忆一下上一节我们编写的第一个脚本:

#! /bin/bash

echo -n ‘Hello, World!’

这个脚本的功能比较单一。现在,我们来让它变得更“聪明”一点。我们将使用Shell变量来改造它,目标是让脚本能够根据用户输入的名字进行个性化问候。

首先,编辑 hello.sh 脚本,使用 read 命令来获取用户输入:

#! /bin/bash

echo “What’s your name, stranger?”

read name

echo “Hello, $name”

保存并运行这个脚本。它会提示你输入名字,然后使用你提供的名字来打招呼:

./hello.sh
What’s your name, stranger?
Elliot
Hello, Elliot

在演示中,我输入了“Jerry”,脚本便回复了“Hello, Jerry”。瞧,这比干巴巴的“Hello, World!”有趣多了,对吧?

终端运行示例:脚本读取用户输入并输出问候语

逐行解析脚本逻辑

我们来拆解一下上面这个脚本,看看每一行代码都做了什么:

  1. 指定解释器

    #!/bin/bash

    这一行是“shebang”,它告诉系统使用哪个解释器来执行这个脚本文件。这里我们指定了Bash。

  2. 输出提示信息

    echo “What’s your name, stranger?”

    echo 命令用于在终端打印一行文字,很好理解。

  3. 读取用户输入

    read name

    这是脚本交互的核心。read 命令会等待用户在终端输入,当用户按下回车键后,输入的内容就会被赋值给 name 这个变量。

    小技巧:提示输入和获取输入可以合并为一行,这是更进阶的写法:

    read -p “What’s your name, stranger?” name

    使用 -p 参数可以直接指定提示文本。

  4. 输出结果

    echo “Hello, $name”

    最后,脚本使用用户输入的名字来打招呼。这里的关键是变量名前的美元符号 $,它被称为“解引用操作符”,作用是获取变量 name 中存储的值。如果去掉 $,输出就会变成字面字符串“Hello, name”。

变量的赋值与数据类型

现在,让我们更系统地了解变量。在Bash中,使用等号 = 给变量赋值(注意,等号两边不能有空格)。

例如,创建一个名为 age 的变量并赋值为 27

age=27

创建后,你可以随时修改变量的值:

age=3

上面的命令将变量 age 的值从 27 更新为 3

变量可以存储不同类型的数据,如字符串、字符和整数。值得注意的是,Bash本身没有内置的浮点数(带小数点的数字)数据类型。

letter='c'
color='blue'
year=2020

创建只读变量(常量)

有时,你需要一个值不被改变的变量,这就是“常量”或“只读变量”。使用 readonly 命令可以定义它:

readonly PI=3.1415926

上面的命令创建了一个名为 PI 的常量。如果你尝试修改它,会收到错误提示:

bash: PI: readonly variable

如下图所示,常量一旦创建,其值就无法被修改。

终端示例:尝试修改只读变量PI导致报错

强大的特性:命令替换

将一条命令的输出结果直接赋值给变量,这个功能称为“命令替换”。这是 Bash脚本编写 中非常实用且强大的特性。

下面演示如何将 date 命令的输出赋值给变量 TODAY

TODAY=$(date)

请注意语法:命令 date 被放在 $() 中。执行后,变量 TODAY 中就存储了当前的日期和时间。

终端示例:使用命令替换将日期赋值给变量

还有一种旧的语法使用反引号,但现代写法更推荐使用 $()

TODAY=`date` # 旧式写法,不推荐
variable=$(command) # 推荐的标准写法

再次升级我们的Hello脚本

学会了命令替换,我们可以让脚本变得更“自动化”。之前的版本需要用户手动输入名字,现在,我们可以让脚本通过 whoami 命令自动获取当前用户名并问候。

新的 hello.sh 脚本如下:

#! /bin/bash

echo “Hello, $(whoami)”

看,代码精简到了两行!运行它:

./hello.sh

脚本现在能直接叫出你的系统用户名来打招呼,是不是显得更智能了?

终端示例:脚本使用whoami命令自动问候当前用户

动手练习

实践是巩固知识的最佳方式。以下是一些练习题,建议初学者亲自尝试完成。

练习 1:询问全名
编写一个Shell脚本,询问用户的全名并打印出来。

  • 难度:容易
  • 提示:使用 read 命令。

练习 2:询问年龄
编写一个Shell脚本,询问用户的年龄并打印出来。

  • 难度:容易
  • 提示:将用户输入作为整数存储到变量中。

练习 3:定义圆周率常量
编写命令,将圆周率PI定义为常量(值为3.14159),并打印它。尝试修改其值以证明它是只读的。

  • 难度:容易
  • 提示:使用 readonly 命令。

练习 4:获取当前日期
编写一个Shell脚本,将当前日期存储在一个变量中并打印出来。

  • 难度:容易
  • 提示:使用 date 命令进行命令替换。

练习 5:综合练习
编写一个脚本,依次完成练习1、2、4的任务,每个答案单独一行显示。
输出格式参考如下:

What is your name?
XYZ ABC
Hello XYZ ABC
What is your age?
44
So you are 44.
Today‘s date is Thursday 20 January 2022 12:55:23 PM IST

请将“XYZ ABC”替换为你自己的答案。当然,你也可以将提示语和输出改为中文。

练习题参考答案

答案 1

#! /bin/bash

echo “What’s your full name?”
read name
echo “Hello, $name”

答案 2

#!/bin/bash

echo “What is your age?”
read age
echo “So you are $age years old”

答案 3

$ readonly PI=3.14159
$ echo “Pi value is $PI”
Pi value is 3.14159
$ PI=3.5
bash: PI: readonly variable

答案 4

#!/bin/bash

today=$(date)
echo “Today’s date is $today”

答案 5

#!/bin/bash
echo “What is your name?”
read name
echo “Hello $name”
echo “What is your age?”
read age
echo “So you are $age.”
today=$(date)
echo “Today’s date is $today”

通过以上的学习和练习,你应该已经掌握了Bash中变量的基本用法,包括定义、修改、创建常量以及使用命令替换。这些是构建更复杂、更实用的自动化脚本的基石。如果在实践中遇到问题,欢迎在 云栈社区 与更多开发者交流探讨。




上一篇:Ubuntu 24.04 或 22.04 LTS 安装 Homebrew (Linuxbrew) 完整步骤详解
下一篇:Clawdbot骗局揭露:AI工具炒作加密货币,一场210万浏览量的流量操盘
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-3 17:40 , Processed in 0.336605 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表