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