linux执行sh文件命令如何在 Linux 中运行一个 Shell 脚本




linux执行sh文件命令如何在 Linux 中运行一个 Shell 脚本

2022-07-20 21:21:14 网络知识 官方管理员

在Linux中有两种运行shell脚本的方法。你可以使用:

bashscript.sh

或者,你可以像这样执行shell脚本:

./script.sh

这可能很简单,但没太多解释。不要担心,我将使用示例来进行必要的解释,以便你能理解为什么在运行一个shell脚本时要使用给定的特定语法格式。

我将使用这一行shell脚本来使需要解释的事情变地尽可能简单:

abhishek@itsfoss:~/Scripts$cathello.shecho"HelloWorld!"

方法1:通过将文件作为参数传递给shell以运行shell脚本

第一种方法涉及将脚本文件的名称作为参数传递给shell。

考虑到bash是默认shell,你可以像这样运行一个脚本:

bashhello.sh

你知道这种方法的优点吗?你的脚本不需要执行权限。对于简单的任务非常方便快速。

linux执行sh文件命令(如何在Linux中运行一个Shell脚本)(1)

如果你还不熟悉,我建议你。

记住,将其作为参数传递的需要是一个shell脚本。一个shell脚本是由命令组成的。如果你使用一个普通的文本文件,它将会抱怨错误的命令。

linux执行sh文件命令(如何在Linux中运行一个Shell脚本)(2)

在这种方法中,你要明确地具体指定你想使用bash作为脚本的解释器

shell只是一个程序,并且bash只是Shell的一种实现。还有其它的shell程序,像ksh、zsh等等。如果你安装有其它的shell,你也可以使用它们来代替bash。

例如,我已安装了zsh,并使用它来运行相同的脚本:

linux执行sh文件命令(如何在Linux中运行一个Shell脚本)(3)

方法2:通过具体指定shell脚本的路径来执行脚本

另外一种运行一个shell脚本的方法是通过提供它的路径。但是要这样做之前,你的文件必须是可执行的。否则,当你尝试执行脚本时,你将会得到“权限被拒绝”的错误。

因此,你首先需要确保你的脚本有可执行权限。你可以使用chmod命令来给予你自己脚本的这种权限,像这样:

chmodu+xscript.sh

使你的脚本是可执行之后,你只需输入文件的名称及其绝对路径或相对路径。大多数情况下,你都在同一个目录中,因此你可以像这样使用它:

./script.sh

如果你与你的脚本不在同一个目录中,你可以具体指定脚本的绝对路径或相对路径:

linux执行sh文件命令(如何在Linux中运行一个Shell脚本)(4)

在脚本前的这个./是非常重要的(当你与脚本在同一个目录中)。

linux执行sh文件命令(如何在Linux中运行一个Shell脚本)(5)

为什么当你在同一个目录下,却不能使用脚本名称?这是因为你的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/bin

Linux命令(像ls、cat等)的二进制文件或可执行文件都位于这些目录中的其中一个。这就是为什么你可以在你系统的任何位置通过使用命令的名称来运作这些命令的原因。看看,ls命令就是位于/usr/bin目录中。

linux执行sh文件命令(如何在Linux中运行一个Shell脚本)(6)

当你使用脚本而不具体指定其绝对路径或相对路径时,系统将不能在PATH环境变量中找到提及的脚本。

为什么大多数shell脚本在其头部包含#!/bin/bash?

记得我提过shell只是一个程序,并且有shell程序的不同实现。

当你使用#!/bin/bash时,你是具体指定bash作为解释器来运行脚本。如果你不这样做,并且以./script.sh的方式运行一个脚本,它通常会在你正在运行的shell中运行。

有问题吗?可能会有。看看,大多数的shell语法是大多数种类的shell中通用的,但是有一些语法可能会有所不同。

例如,在bash和zsh中数组的行为是不同的。在zsh中,数组索引是从1开始的,而不是从0开始。

linux执行sh文件命令(如何在Linux中运行一个Shell脚本)(7)

使用#!/bin/bash来标识该脚本是bash脚本,并且应该使用bash作为脚本的解释器来运行,而不受在系统上正在使用的shell的影响。如果你使用zsh的特殊语法,你可以通过在脚本的第一行添加#!/bin/zsh的方式来标识其是zsh脚本。

在#!和/bin/bash之间的空格是没有影响的。你也可以使用#!/bin/bash。

它有帮助吗?

我希望这篇文章能够增加你的Linux知识。如果你还有问题或建议,请留下评论。

专家用户可能依然会挑出我遗漏的东西。但这种初级题材的问题是,要找到信息的平衡点,避免细节过多或过少,并不容易。

如果你对学习bash脚本感兴趣,在我们专注于系统管理的网站LinuxHandbook上,我们有一个完整的Bash初学者系列。如果你想要,你也可以购买带有附加练习的电子书,以支持LinuxHandbook。


发表评论:

最近发表
网站分类
标签列表