文章目录
1、创建并运行第一个 shell 脚本2、将 shell 脚本转换为 bash 脚本3、为什么大多数 shell 脚本都包含 #! /bin/bash 在 shell 脚本的开头?4、将 shell 脚本添加到 PATH(以便它可以从任何目录运行)1、创建并运行第一个 shell 脚本
首先创建一个名为scripts
的新目录,它将托管我们所有的bash
脚本。
mkdir scriptscd scripts
现在在这个“脚本目录”中,使用cat
命令创建一个名为hello.sh
的新文件:
cat > hello.sh
通过在终端中键入以下内容,在其中插入以下行:
echo 'Hello, World!'
按Ctrl+D
将文本保存到文件中,同时从cat
命令中出来。
你还可以使用基于终端的文本编辑器,如Vim
、Emacs
或Nano
。如果你使用的是桌面 Linux,还可以使用图形文本编辑器(如Gedit
)将文本添加到此文件中。
基本上你是在使用echo
命令来打印“Hello World
”。你可以直接在终端中使用此命令,但在本测试中,你将通过shell
脚本运行此命令。
现在使用chmod
命令使文件hello.sh
可执行,如下所示:
chmod u+x hello.sh
最后,通过在hello.sh
前面加上“bash
”来运行你的第一个 shell 脚本:
bash hello.sh
你就会看到Hello, World!
打印在屏幕上。
这是在上面看到的所有步骤的屏幕截图:
2、将 shell 脚本转换为 bash 脚本
Bash
是“Bourne-Again shell
”的缩写,它只是 Linux 中许多可用shell
的一种。
shell
是一个命令行解释器,它接受并运行命令。如果你以前运行过任何 Linux 命令,那么你已经使用过 shell。当你在 Linux 中打开终端时,你已经在运行系统的默认 shell。
Bash
通常是大多数 Linux 发行版中的默认shell
。这就是为什么bash
通常是shell
的同义词。Shell
只是一个程序,而bash
是它的一个实现。还有其他这样的shell
程序,如ksh
、zsh
等。如果你安装了其他shell
,你也可以使用它来代替bash
。
shell
脚本通常具有几乎相同的语法,但有时也会有所不同。例如,数组索引在Zsh
中从 1 开始,而不是在bash
中从 0 开始。如果为Zsh shell
编写的脚本有数组,则它在bash
中将无法正常工作。
为了避免这种错误,你应该告诉解释器你的 shell 脚本是为bash shell
编写的。你是怎样做的?你可以用shebang来实现这一点。
3、为什么大多数 shell 脚本都包含 #! /bin/bash 在 shell 脚本的开头?
“#!/bin/bash
”这一行被称为shebang
行,在某些文献中,它被称为hashbang
行,这是因为它以两个字符hash '#'
和bang '!'
开头。
#! /bin/bashecho 'Hello, World!'
当你在脚本的最顶部包含“#!/bin/bash
”行时,系统知道你想使用bash
作为脚本的解释器。因此,你现在可以直接运行hello.sh
脚本,而无需在其前面加上bash
。
使用#!/bin/bash
表示该脚本是bash shell
脚本,无论系统上正在使用什么shell
,都应该使用bash
作为解释器运行。如果你使用的是zsh
特定的语法,你可以通过添加#! /bin/zsh
作为脚本的第一行。
#!
和/bin/bash
之间的空格无关紧要。你也可以使用#!/bin/bash
。
4、将 shell 脚本添加到 PATH(以便它可以从任何目录运行)
前面使用./hello.sh
来运行脚本;如果省略前导./
Bash
认为你正在尝试运行名为hello.sh
的命令。当你在终端上运行任何命令时,shell
就在存储在PATH
变量中的一组目录中查找该命令。
可以使用echo
查看该PATH
变量的内容:echo $PATH
冒号字符 (:
) 分隔每次运行命令时 shell 扫描的每个目录的路径。
像echo
、cat
等Linux
命令可以从任何地方运行,因为它们的可执行文件存储在bin
目录中。bin
目录包含在PATH
中。当你运行命令时,系统会检查PATH
以查找它应该寻找的所有可能位置,以找到该命令的可执行文件。
如果你想从任何地方运行你的bash
脚本,就像它是一个常规的Linux
命令,需要将你的shell
脚本的位置添加到PATH
变量中。
首先,获取脚本目录的位置(假设在同一目录中),使用PWD
命令:
pwd
使用export
命令将脚本目录添加到PATH
变量。
export PATH=$PATH:/home/ay/scripts
运行hello.sh
: