Linux shell编程的shebang#!

你经常#!以/bin/bash开头的shell脚本,#!它被称为锡拉丘兹或哈西夫。Shebang在shell脚本中扮演重要角色。尤其是在处理各种类型的外壳时。

本教程演示了shell脚本的工作方式。说明如何为shell脚本指定解释器。让我们比较一下Bash和zsh的两个外壳。所有shell编程教程均可用于多个Linux发行版,包括Ubuntu、Debian、Fedora、Redhat、CentOS、Suse、Arch和Gentoo

shell脚本中的shebang

雪酒是用英镑#和感叹号写的!配置。这个字符组合在脚本的第一行使用时有特殊的意义。默认情况下,用于指定运行指定脚本的解释器。

所以剧本的第一行是!/bin/bash,也就是解释器必须是bash shell。第一排!/bin/zsh,指示要使用的解释器是z shell。

因为这是关于# shell脚本的注释,这里#!有特别的意义。

shebang在shell脚本中的作用

脚本中不需要Shebang。写这么简单的脚本:

Echo namaste,folks!请单击。

授予执行权限。可以在使用运算符登录时使用的shell中运行。换句话说,shell目前正在使用中。那为什么shell脚本在脚本开头#!/bin/bash线呢?

这是因为有多种shell可用于Linux和UNIX系统。这些shell大部分都有共同的语法,但语法或选项有不同的处理方法。

因此,为脚本指定正确的shell解释器非常重要。否则,某些脚本在不同的shell中运行时可能会产生不同的结果。为了说明这一点,让我举一个简单的例子。

使用shebang指定shell解释器的重要性

我编写了一个包含Linux发行版数组的shell脚本示例。然后,将发布数组的第二个元素打印到脚本的第二行。

distros=(‘ Ubuntu ‘ ‘ fedora ‘ ‘ SuSE ‘ ‘ debian ‘)

echo distro at index 2 is:$ { distros[2]} ‘

Array.sh当前未添加指定shell解释器的shell行。也就是说,如果运行此脚本,则在默认shell(我的情况下为bash,echo $0打印当前使用的shell)上运行。

Myfreax.com@swift:~$ echo $0

巴什

输出如下:

Myfreax.com @ swift: ~ $。/arrays.sh

Distro at index 2 is: SUSE

在Bash和许多其他编程和脚本语言中,SUSE打印在索引2上。因为数组索引以0开始。但在Z shell,情况并非如此。在z shell中,数组索引从1开始。

Z shell可以安装在自己的系统上。Linux是指允许系统中同时存在多个shell。现在,我将向脚本中添加shell行,并指定脚本的默认shell在shell中运行。

#!/bin/zsh

distros=(‘ Ubuntu ‘ ‘ fedora ‘ ‘ SuSE ‘ ‘ debian ‘)

echo distro at index 2 is:$ { distros[2]} ‘

Array.sh输出如下:

Myfreax.com @ swift: ~ $。/arrays.sh

Distro at index 2 is: Fedora

现在需要知道区别。这个脚本是同一个脚本,但如果添加了shebang行,则不同。

因此,使用shell运算符指定正确的shell解释器非常重要。系统管理员可以编写shell脚本并记住特定的shell,如bash、ksh、zsh等。但是,无法验证要运行的脚本的默认shell是否与系统相同。

如果您明确指定shell,则Shebang将被忽略

这是因为shell指定了要运行脚本的shell解释器。但是,您可以明确指定shell运行脚本,但在这种情况下,shell行将被忽略。

Myfreax.com @ swift: ~ $ bash。/arrays.sh

shebang是如何工作的?

在脚本的第一行使用shell时,指示shell使用指定的命令运行脚本。就像#!/bin/zsh为:

/bin/zsh script_name

如您所知,如果脚本的第一行以shell开头,则会指定shell解释器。这只是部分正确。但这就是薛芳的目的。在某些情况下,Shebang行不需要shell可执行文件。它可以是任何东西。

例如,我是#!/bin/zsh是#!/bin/cat,cat命令成为shell的解释器。

#!/bin/cat

distros=(‘ Ubuntu ‘ ‘ fedora ‘ ‘ SuSE ‘ ‘ debian ‘)

echo distro at index 2 is:$ { distros[2]} ‘

也就是说,现在使用cat命令运行脚本并显示脚本的内容。输出脚本的所有内容。只要指向可执行的命令,就能正常工作。如果你随便放什么命令,它就会出错。将Shebang行更改为:

#!/home/myfreax

显然,它不指向任何命令的可执行文件,因此会出现解释程序错误。

my freax . com @ swift:~ $ catarrays . sh

#!/home/www.myfreax.com

distros=(‘ Ubuntu ‘ ‘ fedora ‘ ‘ SuSE ‘ ‘ debian ‘)

echo distro at index 2 is:$ { distros[2]} ‘

Myfreax.com @ swift: ~ $。/arrays.sh

bash:/arrays . sh:/home/abhishek:bad interpreter:permission denied

结论

到目前为止,你已经充当了薛芳行的剧本。也可以将所有命令指定给shebang行。如果有问题或建议,请随时发表意见。

Linux

壳(shell)

shell脚本

编程

系统管理

巴什

Zsh

教程

脚本

编程教学

read,source,mapfile命令与shell编程

2022-9-20 10:45:20

编程教学

Premiere预设合集 +800 全版本 绿色免费版

2022-9-20 11:30:03

搜索