在Linux中有两种运行shell脚本的方法。您可以使用:bashscript.sh或者,您可以像这样执行shell脚本:./script.sh这可能很简单,但解释不多。别着急,我会根据需要用例子来解释,这样你就可以理解为什么在运行shell脚本时会给出特定的语法格式。我将使用这一行shell脚本来尽可能简单地解释事情:abhishek@itsfoss:~/Scripts$cathello.shecho"HelloWorld!"方法1:通过将文件作为参数传递来运行shell脚本第一种方法涉及将脚本文件的名称作为参数传递给shell。考虑到bash是默认的shell,您可以运行这样的脚本:bashhello.sh您知道这种方法的优点吗?您的脚本不需要执行权限。对于简单的任务非常方便和快速。在Linux中运行Shell脚本如果您不熟悉它,我建议您阅读我在Linux中文件权限的详细指南。请记住,将其作为参数传递需要是shell脚本。shell脚本由命令组成。如果您使用纯文本文件,它会抱怨错误的命令。将文本文件作为脚本运行在此方法中,您明确指定要使用bash作为脚本的解释器。shell只是一个程序,bash只是Shell的一个实现。还有其他shell程序,如ksh、zsh等。如果您安装了其他shell,则可以使用它们代替bash。例如,我安装了zsh并使用它来运行相同的脚本:使用Zsh执行Shell脚本方法2:通过指定Shell脚本的路径来执行脚本另一种运行shell脚本的方法是提供其路径。但在这样做之前,您的文件必须是可执行的。否则,您将在尝试执行脚本时收到“权限被拒绝”错误。因此,您首先需要确保您的脚本具有可执行权限。您可以使用chmod命令将此权限授予您自己的脚本,如下所示:chmodu+xscript.sh在使您的脚本可执行之后,您只需输入文件名及其绝对或相对路径。大多数时候,你在同一个目录下,所以你可以这样使用它:./script.sh如果你不在同一个目录下你的脚本,你可以指定脚本的绝对或相对路径:运行其他目录下的shell脚本脚本前的./很重要(当你和脚本在同一个目录时)。为什么在同一个目录下不能使用脚本名呢?这是因为您的Linux系统会在PATH环境变量指定的几个目录中寻找可执行文件以运行。这是我系统的PATH环境变量的值:abhishek@itsfoss:~$echo$PATH/home/abhishek/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin这意味着以下目录中具有可执行权限的任何文件都可以在系统的任何位置运行:/home/abhishek/.local/bin/usr/local/sbin/usr/local/bin/usr/sbin/usr/bin/sbin/bin/usr/games/usr/local/games/snap/binLinux命令(如ls、cat、等)位于这些目录之一。这就是为什么您可以使用命令名称在系统上的任何位置运行这些命令的原因。看,ls命令位于/usr/bin目录中。当你使用一个脚本而不指定它的绝对路径或相对路径时,系统将无法在PATH环境变量中找到提到的脚本。为什么大多数shell脚本的头部都包含#!/bin/bash?记得我提到过shell只是一个程序,shell程序有不同的实现。当您使用#!/bin/bash时,您指定bash作为运行脚本的解释器。如果您不这样做,并以./script.sh的形式运行脚本,它通常会在您正在运行的shell中运行。有问题吗?可能有。看,大多数shell语法对于大多数类型的shell都是通用的,但有些语法可能会有所不同。例如,数组在bash和zsh中的行为不同。在zsh中,数组索引是从1开始的,而不是从0开始的。Bash与Zsh使用#!/bin/bash来识别该脚本是一个bash脚本,并且应该使用bash作为脚本的解释器来运行,而不管系统上使用的是什么shell。如果你使用zsh的特殊语法,你可以通过在脚本的第一行添加#!/bin/zsh来识别它是一个zsh脚本。#!之间的空格和/bin/bash没有效果。您也可以使用#!/bin/bash。有帮助吗?我希望这篇文章能增加您的Linux知识。
