2.1.1. 写作和命名
shell 脚本是您可以重复使用的一系列命令的组合。此序列通常通过在命令行中输入脚本名称来执行。或者,您可以使用脚本使用 cron 工具自动执行任务。脚本的另一个用途是在 UNIX 启动和关闭过程中,其中守护程序和服务的操作在 init 脚本中定义的。
要创建 shell 脚本,请在编辑器中打开一个新的空文件。任何文本编辑器都可以:vim、emacs、gedit、dtpad等。但是,您可能希望选择更高级的编辑器,例如vim或emacs,因为它们可以配置识别 shell 和 Bash 语法,并且可以极大地帮助防止初学者经常犯的错误,例如忘记括号和分号.
vim 中的语法高亮
要在vim中激活语法高亮,请使用命令
:syntax enable
或者
:sy enable
或者
:syn enable
可以将此设置添加到您的.vimrc文件中以使其永久化
将 UNIX 命令放入新的空文件中,就像在命令行中输入它们一样。如前一章所述(参见第 1.3 节),命令可以是 shell 函数、shell 内置程序、UNIX 命令和其他脚本。
给你的脚本起一个合理的名字,暗示脚本的作用。确保您的脚本名称与现有命令不冲突。为了确保不会引起混淆,脚本名称通常以.sh结尾;即便如此,您的系统上可能还有与您选择的脚本同名的其他脚本。使用which、whereis和其他命令来查找有关脚本的信息:
which -a script_name
whereis script_name
locate script_name
2.1.2. script1.sh
在此示例中,我们使用内置的echo Bash 来通知用户将要发生的事情,然后执行将创建输出的任务。强烈建议告知用户脚本正在做什么,以防止他们因为脚本没有做任何事情而变得紧张。
Figure 2-1. script1.sh
自己编写这个脚本。创建一个目录~/scripts来保存你的脚本。将该目录添加到PATH变量的内容中:
export PATH\=”$PATH:~/scripts”
如果您刚刚开始使用 Bash,请使用文本编辑器,编辑器对不同的 shell 结构使用不同的颜色。vim、gvim、(x)emacs、kwrite和许多其他编辑器支持语法高亮。
2.1.3. 执行 script
该脚本应该具有执行权限才能运行。设置权限时,请检查您是否确实获得了您想要的权限。完成后,脚本可以像任何其他命令一样运行:
willy:~/scripts> **chmod u+x script1.sh**
willy:~/scripts> **ls \-l script1.sh**
-rwxrw-r-- 1 willy willy 456 Dec 24 17:11 script1.sh
willy:~> **script1.sh**
The script starts now.
Hi, willy!
I will now fetch you a list of connected users:
3:38pm up 18 days, 5:37, 4 users, load average: 0.12, 0.22, 0.15
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty2 - Sat 2pm 4:25m 0.24s 0.05s -bash
willy :0 - Sat 2pm ? 0.00s ? -
willy pts/3 - Sat 2pm 3:33m 36.39s 36.39s BitchX willy ir
willy pts/2 - Sat 2pm 3:33m 0.13s 0.06s /usr/bin/screen
I'm setting two variables now.
This is a string: black
And this is a number: 9
I'm giving you back your prompt now.
willy:~/scripts> **echo $COLOUR**
willy:~/scripts> **echo $VALUE**
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
source = .
Bash source 命令是 Bourne shell 的同义词 ,也就是./
在这种情况下,脚本不需要执行权限。命令在当前 shell 上下文中执行,因此当脚本完成执行时,对环境所做的任何更改都将可见:
willy:~/scripts> **source script1.sh**
--output ommitted--
willy:~/scripts> **echo $VALUE**
9
willy:~/scripts>
https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_01.html