2.1.1. 写作和命名

shell 脚本是您可以重复使用的一系列命令的组合。此序列通常通过在命令行中输入脚本名称来执行。或者,您可以使用脚本使用 cron 工具自动执行任务。脚本的另一个用途是在 UNIX 启动和关闭过程中,其中守护程序和服务的操作在 init 脚本中定义的。

要创建 shell 脚本,请在编辑器中打开一个新的空文件。任何文本编辑器都可以:vimemacsgeditdtpad等。但是,您可能希望选择更高级的编辑器,例如vimemacs,因为它们可以配置识别 shell 和 Bash 语法,并且可以极大地帮助防止初学者经常犯的错误,例如忘记括号和分号.

2.1  创建和运行脚本 - 图1
vim 中的语法高亮

要在vim中激活语法高亮,请使用命令

:syntax enable
或者
:sy enable
或者
:syn enable

可以将此设置添加到您的.vimrc文件中以使其永久化

将 UNIX 命令放入新的空文件中,就像在命令行中输入它们一样。如前一章所述(参见第 1.3 节),命令可以是 shell 函数、shell 内置程序、UNIX 命令和其他脚本。

给你的脚本起一个合理的名字,暗示脚本的作用。确保您的脚本名称与现有命令不冲突。为了确保不会引起混淆,脚本名称通常以.sh结尾;即便如此,您的系统上可能还有与您选择的脚本同名的其他脚本。使用whichwhereis和其他命令来查找有关脚本的信息:

which -a script_name

whereis script_name

locate script_name

2.1.2. script1.sh

在此示例中,我们使用内置的echo Bash 来通知用户将要发生的事情,然后执行将创建输出的任务。强烈建议告知用户脚本正在做什么,以防止他们因为脚本没有做任何事情而变得紧张。

Figure 2-1. script1.sh

2.1  创建和运行脚本 - 图2

自己编写这个脚本。创建一个目录~/scripts来保存你的脚本。将该目录添加到PATH变量的内容中:

export PATH\=”$PATH:~/scripts”

如果您刚刚开始使用 Bash,请使用文本编辑器,编辑器对不同的 shell 结构使用不同的颜色。vimgvim(x)emacskwrite和许多其他编辑器支持语法高亮。

2.1.3. 执行 script

该脚本应该具有执行权限才能运行。设置权限时,请检查您是否确实获得了您想要的权限。完成后,脚本可以像任何其他命令一样运行:

  1. willy:~/scripts> **chmod u+x script1.sh**
  2. willy:~/scripts> **ls \-l script1.sh**
  3. -rwxrw-r-- 1 willy willy 456 Dec 24 17:11 script1.sh
  4. willy:~> **script1.sh**
  5. The script starts now.
  6. Hi, willy!
  7. I will now fetch you a list of connected users:
  8. 3:38pm up 18 days, 5:37, 4 users, load average: 0.12, 0.22, 0.15
  9. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
  10. root tty2 - Sat 2pm 4:25m 0.24s 0.05s -bash
  11. willy :0 - Sat 2pm ? 0.00s ? -
  12. willy pts/3 - Sat 2pm 3:33m 36.39s 36.39s BitchX willy ir
  13. willy pts/2 - Sat 2pm 3:33m 0.13s 0.06s /usr/bin/screen
  14. I'm setting two variables now.
  15. This is a string: black
  16. And this is a number: 9
  17. I'm giving you back your prompt now.
  18. willy:~/scripts> **echo $COLOUR**
  19. willy:~/scripts> **echo $VALUE**
  20. willy:~/scripts>

这是执行脚本的最常见方式。最好在子 shell 中执行这样的脚本。在这个子shell 中创建的变量、函数和别名只有该子shell 的特定bash 会话知道。当那个 shell 退出并且父进程重新获得控制权时,一切都被清理了,脚本对 shell 状态的所有更改都被遗忘了。

如果您没有将脚本目录放在PATH中,并且. (当前目录)也不在PATH中,您可以像这样激活脚本:

./script_name.sh

脚本也可以由给定的 shell 显式执行,但通常我们只在想要获得特殊行为时才这样做,例如检查脚本是否与另一个 shell 一起工作或打印跟踪以进行调试:

rbash script_name.sh

sh script_name.sh

bash -x script_name.sh

指定的 shell 将作为当前 shell 的子 shell 启动并执行脚本。当您希望脚本以特定选项或在脚本中未指定的特定条件下启动时,会执行此操作。

如果您不想启动新的 shell 但在当前 shell 中执行脚本,则可以source

source script_name.sh

2.1  创建和运行脚本 - 图3
source = .

Bash source 命令是 Bourne shell 的同义词 ,也就是./

在这种情况下,脚本不需要执行权限。命令在当前 shell 上下文中执行,因此当脚本完成执行时,对环境所做的任何更改都将可见:

  1. willy:~/scripts> **source script1.sh**
  2. --output ommitted--
  3. willy:~/scripts> **echo $VALUE**
  4. 9
  5. willy:~/scripts>

https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_01.html