如何在 Linux 中运行 Shell 脚本 [要点解释]
以下是您应该了解的有关在 Linux 命令行中执行 shell 脚本的所有基本细节。
在 Linux 中运行 shell 脚本有两种方法。您可以使用:
bash script.sh
或者您可以像这样执行 shell 脚本:
./script.sh
这也许很简单,但并不能解释太多。别担心,我将通过示例进行必要的解释,以便您了解为什么在运行 shell 脚本时以给定格式使用特定语法。
我将使用这一行 shell 脚本来使事情尽可能简单:
abhishek@linux:~/Scripts$ cat hello.sh
echo "Hello World!"
方法 1:通过将文件作为参数传递给 shell 来运行 shell 脚本
第一种方法涉及将脚本文件名作为参数传递给 shell。
考虑到 bash 是默认 shell,您可以运行如下脚本:
bash hello.sh
您知道这种方法的优点吗? 您的脚本不需要具有执行权限。对于快速简单的任务来说非常方便。
如果您还不熟悉,我建议您阅读我有关 Linux 中文件权限的详细指南。
请记住,它必须是作为参数传递的 shell 脚本。 shell 脚本由命令组成。如果您使用普通的文本文件,它会抱怨命令不正确。
在这种方法中,您明确指定要使用 bash 作为脚本的解释器。
Shell 只是一个程序,bash 是它的一个实现。还有其他这样的 shell 程序,如 ksh、zsh 等。如果您安装了其他 shell,您也可以使用它来代替 bash。
例如,我安装了 zsh 并用它来运行相同的脚本:
方法二:通过指定路径执行shell脚本
运行 shell 脚本的另一种方法是提供其路径。但要实现这一点,您的文件必须是可执行的。否则,当您尝试执行脚本时,将会出现“权限被拒绝”错误。
所以首先你需要确保你的脚本有执行权限。您可以使用 chmod 命令授予自己此权限,如下所示:
chmod u+x script.sh
一旦脚本可执行,您所需要做的就是键入文件名及其绝对或相对路径。大多数情况下,您位于同一目录中,因此您只需像这样使用它:
./script.sh
如果您与脚本不在同一目录中,则可以将其指定为脚本的绝对或相对路径:
脚本之前的 ./ 很重要(当您与脚本位于同一目录时)
为什么在同一目录下不能使用脚本名?这是因为您的 Linux 系统会在 PATH 变量中指定的几个选定目录中查找要运行的可执行文件。
这是我的系统的 PATH 变量的值:
abhishek@linux:~$ 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
/垃圾桶
/usr/游戏
/usr/local/游戏
/快照/bin
Linux 命令(如 ls、cat 等)的二进制文件或可执行文件位于这些目录之一。这就是为什么您只需使用它们的名称就可以从系统上的任何位置运行这些命令。请注意,ls 命令位于 /usr/bin 目录中。
当您指定脚本而不使用绝对或相对路径时,它无法在 PATH 变量中提到的目录中找到它。
为什么大多数 shell 脚本都包含 #! /bin/bash 位于 shell 脚本的开头吗?
还记得我提到过 shell 只是一个程序,并且 shell 有不同的实现。
当你使用#! /bin/bash,您指定脚本以 bash 作为解释器运行。如果您不这样做并以 ./script.sh 方式运行脚本,则通常会使用您正在运行的任何 shell 来运行该脚本。
有关系吗?它可以。请注意,大多数 shell 语法在所有类型的 shell 中都是通用的,但有些语法可能有所不同。
例如,bash 和 zsh shell 中的数组行为是不同的。在 zsh 中,数组索引从 1 开始,而不是从 0 开始。
使用 #! /bin/bash 指示该脚本是 bash shell 脚本,并且应该使用 bash 作为解释器来运行,而不管系统上使用的 shell 是什么。如果您使用 zsh 特定语法,则可以通过添加 #! 来指示它是 zsh 脚本。 /bin/zsh 作为脚本的第一行。
#! 之间的空格/bin/bash 并不重要。您还可以使用#!/bin/bash。
有帮助吗?
我希望这篇文章可以增加您的 Linux 知识。如果您还有疑问或建议,请留言。
专家用户仍然可以对这篇文章中我错过的事情挑剔。但此类初学者主题的问题在于,很难找到适当的信息平衡并避免细节过多或过少。
如果您有兴趣学习 bash 脚本,我们在系统管理员网站 Linux 手册上提供了完整的 Bash 初学者系列。
如果需要,您还可以购买带有附加练习的电子书来支持 Linux 手册。