大连密封材料 发表于 2024-7-28 11:59:28

Linux工作原理11 Shell脚本

11 shell脚本

假如你能在 shell 中输入命令,你就能编写 shell 脚本。shell 脚本(也称为 Bourne shell 脚本)是写在文件中的一系列命令;shell 会从文件中读取这些命令,就像在终端中输入命令一样。
11.1 shell脚本基础

Bourne shell 脚本一般以下面一行开始,表示 /bin/sh 步调应实行脚本文件中的命令。(确保脚本文件开头没有空白)。
#!/bin/sh在本书的其他脚本中,你会看到#!你可以在#/bin/sh行后列出任何希望shell实行的命令。例如
#!/bin/sh
#
# Print something, then run ls

echo About to run the ls command.
lsshell 会忽略 # 字符之后一行的任何内容。利用注释来解释脚本中其他人阅读代码时可能难以理解的部门,或在日后重温代码时唤起自己的记忆。
与 Unix 体系上的任何步调一样,您必要为 shell 脚本文件设置可实行位,但同时也必须设置读取位,以便 shell 能够读取文件。最简朴的方法如下:
$ chmod +rx script这条 chmod 命令答应其他用户读取和实行脚本。假如不想如许,请利用绝对模式 700(有关权限的复习,请参阅第 2.17 节)。
创建 shell 脚本并设置读取和实行权限后,可以将脚本文件放在命令路径中的某个目次下,然后在命令行上运行脚本名称即可。假如脚本位于当前工作目次中,也可以运行 ./script,大概利用完整路径名。
例如,运行名为 myscript 的脚本会导致内核运行 /bin/sh myscript。
了解了基础知识后,让我们来看看 shell 脚本的一些限制。
Shebang,也称为 Hashbang 或 Hash-bang,是一种特殊的语法,通常出现在文本文件的第一行的前两个字符:#!。它的作用是指定脚本应该由哪个解释器来实行。用途如下:

[*]明白指定解释器: 不同的脚本语言有不同的解释器(比如 Bash、Python、Perl 等)。Shebang 告诉操纵体系,应该利用哪个解释器来运行这个脚本,避免了歧义。
[*]直接实行脚本: 有了 Shebang,你就可以直接运行脚本文件,而不必要每次都指定解释器。
[*]跨平台兼容性: 不同的体系可能默认的 shell 或解释器不同,Shebang 确保了脚本在不同体系上的可移植性。
Shebang 不一定是 #!/bin/sh;它可以构建为运行体系中任何接受脚本输入的步调,例如 #!/usr/bin/python,以运行 Python 步调。别的,你可能会碰到包罗 /usr/bin/env 的不同模式的脚本。例如,你可能会在第一行看到类似 #!/usr/bin/env python 的内容。这会指示env工具运行 python。如许做的原因很简朴:env 会在当前的命令路径中查找要运行的命令,因此不必要为可实行文件指定一个尺度位置。缺点是命令路径中第一个匹配的可实行文件可能不是你想要的。
https://img2024.cnblogs.com/blog/3174021/202407/3174021-20240727120353738-625142887.png
11.1.1 Shell 脚本的局限性

Bourne shell 可以相对轻松地操纵命令和文件。在第 2.14 节中,我们了解了 shell 重定向输出的方法,这也是 shell 脚本编程的重要元素之一。然而,shell 脚本只是 Unix 编程的一种工具,固然脚本具有相当强大的功能,但也有其局限性。
shell 脚本的主要上风之一是可以简化和自动实行原本可以在 shell 提示符下实行的任务,例如处理成批文件。但是,假如你想剔除字符串、实行重复的算术盘算或访问复杂的数据库,大概假如你想利用函数和复杂的控制布局,你最好利用 Python或awk如许的脚本语言,甚至可能利用 C 如许的编译语言(这一点很重要,以是你会在本章中看到)。
末了,要留意 shell 脚本的巨细。shell 脚本要简短。Bourne shell 脚本并不意味着要很大,尽管你无疑会碰到一些庞然大物。
11.2 引用和字面量

在利用 shell 和脚本的过程中,最令人狐疑的一点就是不知道什么时候以及为什么要利用引号(quotes)和其他标点符号。假设您想打印 $100 字符串,请实行以下操纵:
$ echo $100
00
$ echo "$100"
00
$ echo '$100'
$10011.2.1 字面量


当你利用引号时,通常是要创建一个字面形式,即 shell 在将其传递到命令行之前不应分析(或试图更改)的字符串。除了刚才例子中的 $ 之外,当你想将 * 字符传递给 grep 等命令而不是让 shell 睁开它,以及当你必要在命令中利用分号 (
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Linux工作原理11 Shell脚本