变量和常量
但是,我们的脚本存在问题。 注意字符串“系统信息报告”是如何重复的? 对于我们的小脚本,这不是问题,但让我们想象一下我们的脚本真的很长,而且我们有这个字符串的多个实例。 如果我们想将标题更改为其他内容,则必须在多个地方进行更改,这可能需要大量工作。 如果我们可以安排脚本使字符串只出现一次而不出现多次会怎样? 这将使脚本的未来维护更加容易。 我们可以这样做:
#!/斌/庆典
# 程序输出系统信息页面
title="系统信息报告"
回声"
$ 标题
$ 标题
”
#!/斌/庆典
# 程序输出系统信息页面
title="系统信息报告"
回声"
$ 标题
$ 标题
”
通过创建一个 变量 命名 标题 并为其分配值“系统信息报告”,我们可以利用参数扩展并将字符串放置在多个位置。
那么,我们如何创建一个变量呢? 很简单,我们只是使用它。 当 shell 遇到一个变量时,它会自动创建它。 这与许多编程语言不同,在这些语言中变量必须显式 声明 或在使用前定义。 外壳对此非常松懈,这可能会导致一些问题。 例如,考虑在命令行上播放的这个场景:
[我@linuxbox ~]$ 富=“是” [我@linuxbox ~]$ 回声 $foo 含
[我@linuxbox ~]$ 回声$傻瓜
[我@linuxbox ~]$
[我@linuxbox ~]$ 富=“是” [我@linuxbox ~]$ 回声 $foo 含
[我@linuxbox ~]$ 回声$傻瓜
[我@linuxbox ~]$
我们首先将值“yes”赋给变量 FOO, 然后用 回音. 接下来我们显示拼错为“fool”的变量名的值,并得到一个空白结果。 这是因为 shell 愉快地创建了变量 傻瓜 当它遇到它时,并给它默认值没有或空。 由此我们了解到,我们必须密切注意我们的拼写! 理解这个例子中到底发生了什么也很重要。 从我们之前对 shell 如何执行扩展的观察中,我们知道该命令:
[我@linuxbox ~]$ echo $foo
[我@linuxbox ~]$ echo $foo
进行参数扩展并导致:
[me@linuxbox ~]$ echo 是
[me@linuxbox ~]$ echo 是
而命令:
[我@linuxbox ~]$ echo $傻瓜
[我@linuxbox ~]$ echo $傻瓜
扩展为:
[me@linuxbox ~]$回声
[me@linuxbox ~]$回声
空变量扩展为空! 这会对需要参数的命令造成严重破坏。 下面是一个例子:
[我@linuxbox ~]$ foo=foo.txt [我@linuxbox ~]$ foo1=foo1.txt [我@linuxbox ~]$ cp $foo $傻瓜
cp:'foo.txt' 后缺少目标文件操作数
[我@linuxbox ~]$ foo=foo.txt [我@linuxbox ~]$ foo1=foo1.txt [我@linuxbox ~]$ cp $foo $傻瓜
cp:'foo.txt' 后缺少目标文件操作数
试试 `cp --help' 以获得更多信息。
试试 `cp --help' 以获得更多信息。
我们为两个变量赋值, FOO 和 富1. 然后我们执行一个 cp,但拼错了第二个参数的名称。 扩容后, cp command 只发送一个参数,尽管它需要两个。
关于变量名有一些规则:
1. 变量名可以由字母数字字符(字母和数字)和下划线字符组成。
2. 变量名的第一个字符必须是字母或下划线。
3. 不允许使用空格和标点符号。
“变量”一词意味着一个会发生变化的值,在许多应用程序中,变量都是这样使用的。 但是,我们应用程序中的变量, 标题, 用作 常数. 常量就像一个变量,因为它有一个名字并包含一个值。 不同之处在于常量的值不会改变。 在执行几何计算的应用程序中,我们可以定义 PI 作为一个常数,并赋予它的值 3.1415, 而不是在整个程序中直接使用数字。 shell 不区分变量和常量。 它们主要是为了程序员的方便。 一个常见的约定是使用大写字母来指定常量,使用小写字母来表示真实变量。 我们将修改我们的脚本以符合此约定:
#!/斌/庆典
# 程序输出系统信息页面 题目="系统信息报告 对于 $HOSTNAME“回声”
$题目
$题目
”
#!/斌/庆典
# 程序输出系统信息页面 题目="系统信息报告 对于 $HOSTNAME“回声”
$题目
$题目
”
我们还借此机会通过添加 shell 变量的值来使我们的标题更加生动
主机名。 这是机器的网络名称。
![]()
备注:外壳实际上确实提供了一种方法来强制执行常量的不变性,通过使用 宣布 内置命令 -r (只读)选项。 如果我们分配 题目 这条路:
声明 -r TITLE="页面标题"
外壳将阻止任何后续分配给 题目. 此功能很少使用,但它存在于非常正式的脚本中。
![]()
文件记录