{"pdfData":[[{"bbox":[86,112,189,131],"type":"title","angle":0,"index":0,"text":"# 什么是 Shell？","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":0,"id":"7731cb93-8860-4adb-bb2b-31fac220d374","page_size":[595,841],"block_position":"0-0"},{"bbox":[86,168,189,181],"type":"text","angle":0,"index":1,"text":"是一种程序设计语言。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":0,"id":"4132e03f-a043-45ce-a7cc-564c32cdcefd","page_size":[595,841],"block_position":"0-1"},{"bbox":[86,184,504,212],"type":"text","angle":0,"index":2,"text":"Shell 是指一种应用程序，这个应用程序提供了一个界面，用户通过这个界面访问操作系统内核的服务。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":0,"id":"93b12656-a8fa-49dc-ade5-933917eb5a4d","page_size":[595,841],"block_position":"0-2"},{"bbox":[86,215,504,243],"type":"text","angle":0,"index":3,"text":"Bash（GNU Bourne-Again Shell）是一个为 GNU 计划编写的 Unix shell，它是许多Linux 平台默认使用的 shell。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":0,"id":"a6399c32-48ae-4b63-b76c-ccae968c363c","page_size":[595,841],"block_position":"0-3"},{"bbox":[86,246,504,306],"type":"text","angle":0,"index":4,"text":"shell 是一个命令解释器，是介于操作系统内核与用户之间的一个接口层。它也是一种能力很强的计算机语言，被称为解释性语言或脚本语言 script。可以通过将系统调用、公共程序、工具和编译过的二进制程序“粘合”在一起来建立应用，这是大多数脚本语言的共同特征，所以脚本语言又被称为“胶水语言”。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":0,"id":"372141d1-c6a3-4588-91a4-33a6e74d10a1","page_size":[595,841],"block_position":"0-4"},{"bbox":[86,308,505,354],"type":"text","angle":0,"index":5,"text":"Shell是系统的用户界面，提供了用户与内核进行交互操作的一种接口(命令解释器) 。它接收用户输入的命令并把它送入内核去执行。起着协调用户与系统的一致性和在用户与系统之 间 进 行 交 互 的 作 用 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":0,"id":"7ad7ff99-7bf1-462d-ad8c-cd00db98efb5","page_size":[595,841],"block_position":"0-5"},{"bbox":[88,356,376,502],"index":6,"angle":0,"type":"image","img_path":"/2f1fbe30e5df1933f987b31f395caca2a97bb40a4f308e9039adf97eb01bcfc5.jpg","color":{"line":"rgba(89, 92, 220, 1)","fill":"rgba(89, 92, 220, 1)"},"img_ratio":0.48403361344537815,"page_idx":0,"id":"180eaf57-a655-42b9-9bf0-46a5af6a0f38","page_size":[595,841],"block_position":"0-6"},{"bbox":[86,511,470,524],"type":"text","angle":0,"index":7,"text":"Python、PHP、Perl、javascript 等都是脚本语言，解释执行，有相似的基本特征。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":0,"id":"7b6f6f8d-cc19-4817-9bac-9c2d78d96a54","page_size":[595,841],"block_position":"0-7"},{"bbox":[86,527,508,539],"type":"text","angle":0,"index":8,"text":"事实上，所有的 UNIX 命令和工具再加上公共程序，对于 shell 脚本来说，都是可调用的。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":0,"id":"2d6594fe-e925-46bf-930f-4c0b45c5a941","page_size":[595,841],"block_position":"0-8"},{"bbox":[86,542,505,571],"type":"text","angle":0,"index":9,"text":"Shell 脚本对于实现管理系统任务的自动化和执行其它重复性工作来说，非常适合，灵活强大，比编写编译型程序更加高效灵活。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":0,"id":"a68319fc-0407-4682-9481-d60c24e1d320","page_size":[595,841],"block_position":"0-9"},{"bbox":[86,573,505,650],"type":"text","angle":0,"index":10,"text":"内 置 命 令 ： 出 于 效 率 的 考 虑 ， 将 一 些 常 用 命 令 的 解 释 程 序 构 造 在 Shell 内 部外 置 命 令 ： 存 放 在 /bin 、 /sbin 目 录 下 的 命 令实用程序：存放在/usr/bin、/usr/sbin、/usr/share、/usr/local/bin 等目录下的实用程序用 户 程 序 ： 用 户 程 序 经 过 编 译 生 成 可 执 行 文 件 后 ， 可 作 为 Shell 命 令 运 行Shell 脚 本 ： 由 Shell 语 言 编 写 的 批 处 理 文 件 ， 可 作 为 Shell 命 令 运 行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":0,"id":"8fd6c2f7-0aa5-4426-aaeb-ecdce7d443e0","page_size":[595,841],"block_position":"0-10"},{"bbox":[86,667,242,680],"type":"text","angle":0,"index":11,"text":"内部命令、应用程序、shell脚本","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":0,"id":"10479772-5e57-4474-9a96-989a5fbab3be","page_size":[595,841],"block_position":"0-11"},{"bbox":[86,682,505,758],"index":12,"angle":0,"type":"table_body","img_path":"/","id":"b713b442-4d5e-451b-91ed-17baf3365463","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>命\n命\n通</td><td>令\n令\n配</td><td>行\n种\n符</td><td>解\n执行\n顺序</td><td>释\nwild-card</td><td>characters</td><td>历史</td><td>I/O</td></tr></table>","page_idx":0,"page_size":[595,841],"block_position":"0-12"}],[{"bbox":[87,77,500,124],"index":0,"angle":0,"type":"table_body","img_path":"/","id":"074eb0b5-ed18-448f-b174-c709ac31b1d7","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>管</td><td>道</td><td>pipes</td><td>(</td></tr><tr><td>命</td><td>令 替 换</td><td>或 $(</td><td>或 $()</td></tr><tr><td>Shell</td><td>编 程 语 言</td><td>Shell</td><td>Script</td></tr></table>","page_idx":1,"page_size":[595,841],"block_position":"1-0"},{"bbox":[88,141,163,154],"type":"text","angle":0,"index":1,"text":"都有哪些 shell？","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"3228ebce-f0ff-44f3-9ef8-e831e82258e0","page_size":[595,841],"block_position":"1-1"},{"bbox":[88,169,337,304],"index":2,"angle":0,"type":"table_body","img_path":"/","id":"84e9f729-0ab0-430c-b272-e42f9b00bbb3","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>Bash (Bourne Again Shell)</td><td>bash是大多数Linux系统的默认Shell。 bash与bash完全向后兼容,并且在bash的基础上增加和增 强了很多特性。 bash也包含了很多C Shell和Korn Shell中的优点。 bash有很灵活和强大的编程接口,同时又有很友好的用 户界面</td></tr><tr><td>Ksh (Korn Shell)</td><td>Korn Shell(ksh)由Dave Korn所写。它是UNIX系统上的 标准Shell。 在Linux环境下有一个专门为Linux系统编写的Korn Shell的 扩展版本,即Public Domain Korn Shell(pdksh)。</td></tr><tr><td>tcsh (csh 的扩展)</td><td>tcsh是C Shell的扩展。tcsh与csh完全向后兼容,但它包 含了更多的使用户感觉方便的新特性,其最大的提高是在 命令行编辑和历史浏览方面</td></tr></table>","page_idx":1,"page_size":[595,841],"block_position":"1-2"},{"bbox":[87,311,508,420],"index":3,"angle":0,"type":"table_body","img_path":"/","id":"2e321ab6-43e1-4551-9007-040768bcfdf5","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>(</td><td>sh</td><td>、</td><td>bash</td><td>、</td><td>ksh</td><td>、</td><td>csh</td><td>等</td><td>)</td></tr><tr><td>登</td><td></td><td>录</td><td></td><td>login</td><td></td><td>:</td><td></td><td>stu01</td><td></td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td>password</td><td>:</td><td>student01</td><td></td></tr><tr><td></td><td></td><td></td><td>注意</td><td>:</td><td>case</td><td colspan=\"3\">sensitive(上限case/lowercase)</td><td></td></tr><tr><td>提</td><td>示</td><td>符</td><td></td><td></td><td></td><td>#</td><td>、</td><td>$</td><td></td></tr><tr><td>注</td><td></td><td>销</td><td></td><td></td><td></td><td colspan=\"3\">exit/login/Ctrl+D</td><td></td></tr><tr><td>重</td><td></td><td>启</td><td></td><td>动</td><td></td><td colspan=\"3\">reboot</td><td></td></tr></table>","page_idx":1,"page_size":[595,841],"block_position":"1-3"},{"bbox":[88,422,179,435],"type":"text","angle":0,"index":4,"text":"关闭系统 poweroff","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"deb47c9c-5e0b-4992-8f31-e3c9b4e4a6a4","page_size":[595,841],"block_position":"1-4"},{"bbox":[88,468,246,481],"type":"text","angle":0,"index":5,"text":"查看系统中目前可以使用的shells","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"8b01e663-e96d-426d-aaac-1ac57c53c3f6","page_size":[595,841],"block_position":"1-5"},{"bbox":[88,484,160,496],"type":"text","angle":0,"index":6,"text":"Cat /etc/shells","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"928d1a1d-02b3-45e7-b946-4e88f6e45234","page_size":[595,841],"block_position":"1-6"},{"bbox":[88,499,158,513],"type":"text","angle":0,"index":7,"text":"切换到sh模式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"d0452f94-1a8f-45a6-8aae-0b513358f951","page_size":[595,841],"block_position":"1-7"},{"bbox":[88,515,103,527],"type":"text","angle":0,"index":8,"text":"Sh","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"c2c4f08e-bbfa-4171-9fe5-4592985d9c04","page_size":[595,841],"block_position":"1-8"},{"bbox":[88,530,148,543],"type":"text","angle":0,"index":9,"text":"推出sh模式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"da241985-988f-44aa-bced-f01aefa602b9","page_size":[595,841],"block_position":"1-9"},{"bbox":[88,547,108,557],"type":"text","angle":0,"index":10,"text":"exit","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"252fe36f-af93-4c33-92ec-ccf624e8bbf5","page_size":[595,841],"block_position":"1-10"},{"bbox":[87,561,505,606],"type":"text","angle":0,"index":11,"text":"学习一门语言习惯与先写一个HelloWorld的程序，这里就写一个HelloWorld的脚本。下面启动 vim 编辑 hello.sh 脚本文件。后缀名“.sh”不是必须的，但是更容易表示这是一个脚本程序文件。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"9576990d-65dd-48e1-8509-a9c8505ef280","page_size":[595,841],"block_position":"1-11"},{"bbox":[88,624,149,636],"type":"text","angle":0,"index":12,"text":"vim hello.sh","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"d56438b4-da12-470b-976d-ef4c53a8634d","page_size":[595,841],"block_position":"1-12"},{"bbox":[88,651,147,664],"type":"text","angle":0,"index":13,"text":"#!/bin/bash","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"a1c126b5-6da5-4923-83cb-143f4539eeb3","page_size":[595,841],"block_position":"1-13"},{"bbox":[88,679,189,691],"type":"text","angle":0,"index":14,"text":"# This is a comment","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"183e09a9-bd10-4535-b528-a4984604bfdd","page_size":[595,841],"block_position":"1-14"},{"bbox":[88,707,174,719],"type":"text","angle":0,"index":15,"text":"echo Hello World","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"36b5e7c5-d28a-4b05-bf4f-108ccd7f050f","page_size":[595,841],"block_position":"1-15"},{"bbox":[88,734,252,748],"type":"text","angle":0,"index":16,"text":"上述例子包含三行，以下逐行解释。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":1,"id":"4a3d7451-f601-4e69-ae16-37422c74af3a","page_size":[595,841],"block_position":"1-16"}],[{"bbox":[86,79,505,109],"type":"text","angle":0,"index":0,"text":"第一行以“#!”开头，说明脚本的解释器的路径位置信息。Linux 系统根据#! 及该字符串后面的信息确定使用哪个解释器对该脚本进行解释执行。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"7c8d824d-e257-4b6a-9c00-c46026fff7ab","page_size":[595,841],"block_position":"2-0"},{"bbox":[86,121,508,214],"type":"text","angle":0,"index":1,"text":"上述例子中的 /bin/bash 就表明该文件是一个 BASH 程序，需要由 /bin 目录下的 bash 解析器来解释执行。BASH 一般是存放在 /bin 目录下，但是在有的发行版中，bash 也有可能被存放在 /sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或 /usr/local/sbin 这样的目录下，所以在“#!”之后要正确写出解释器路径位置；可以使用 locate、find、which 或whereis等命令找出确定bash的具体路径位置。也可以查看/etc/shells文件内容，确定bash 路径。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"8d0240dd-64b4-4492-81f9-f80f09e8365c","page_size":[595,841],"block_position":"2-1"},{"bbox":[87,227,370,242],"type":"text","angle":0,"index":2,"text":"另外要说明的是，该行要顶行顶格，前面不要有空行和空格。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"fa3007e7-45f3-4a33-9ecc-e8091d3432d3","page_size":[595,841],"block_position":"2-2"},{"bbox":[86,254,502,285],"type":"text","angle":0,"index":3,"text":"第二行以“#”字符开头，表示其后的内容是注释，不需要解释执行。这些注释语句是在脚本中做一些注释或标记，让脚本更具可读性。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"5dc4a885-9e56-40ee-8495-f545f588d4aa","page_size":[595,841],"block_position":"2-3"},{"bbox":[86,298,506,343],"type":"text","angle":0,"index":4,"text":"第三行的echo 语句的功能是把echo 后面的字符串打印到标准输出stdout。由于echo 后跟的是 \"Hello World\" 字符串，因此执行 echo 命令的结果是在终端上输出了 \"HelloWorld\"这个字符串。Bash脚本每行一条命令，无需“;”结束。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"81f6c628-b90e-4671-bdc2-1ff9b8870681","page_size":[595,841],"block_position":"2-4"},{"bbox":[87,357,155,371],"type":"title","angle":0,"index":5,"text":"# 命令解释过程","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":2,"id":"979226c5-9b27-4f5d-b7d4-82f8df0183fb","page_size":[595,841],"block_position":"2-5"},{"bbox":[92,388,197,491],"index":6,"angle":0,"type":"image","img_path":"/f0a7db17bad874101f01a82179061db465446ebe08a2ff895797836057ad4ded.jpg","color":{"line":"rgba(89, 92, 220, 1)","fill":"rgba(89, 92, 220, 1)"},"img_ratio":0.2,"page_idx":2,"id":"52c3c9c9-6bcd-4105-afe4-1f11b0a49384","page_size":[595,841],"block_position":"2-6"},{"bbox":[86,505,459,519],"type":"text","angle":0,"index":7,"text":"当命令不在命令行中执行，而是从一个文件中执行时，该文件就称为 Shell 脚本。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"94f4eaaa-7d6d-4d1b-a551-94cd1bbce59d","page_size":[595,841],"block_position":"2-7"},{"bbox":[87,521,207,534],"type":"text","angle":0,"index":8,"text":"Shell 脚本是纯文本文件。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"8e059602-942d-4d06-8e31-aa3871a73d06","page_size":[595,841],"block_position":"2-8"},{"bbox":[86,537,309,550],"type":"text","angle":0,"index":9,"text":"Shell 脚本通常以 .sh 作为后缀名，但不是必须。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"1637c4eb-81da-42dd-b019-f595944fddf2","page_size":[595,841],"block_position":"2-9"},{"bbox":[86,552,436,565],"type":"text","angle":0,"index":10,"text":"Shell 脚本是以行为单位的，在执行脚本的时候会分解成一行一行依次执行。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"94aed438-9012-4b0b-96cd-45a1944afa1b","page_size":[595,841],"block_position":"2-10"},{"bbox":[86,568,276,581],"type":"text","angle":0,"index":11,"text":"Shell 是一种功能强大的解释型编程语言","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"7464f363-8798-4f20-a054-213f1cf94eb4","page_size":[595,841],"block_position":"2-11"},{"bbox":[86,583,300,597],"type":"text","angle":0,"index":12,"text":"通常用于完成特定的、较复杂的系统管理任务","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"32388dae-8a20-480f-8d94-0dc6cfb99429","page_size":[595,841],"block_position":"2-12"},{"bbox":[86,599,296,613],"type":"text","angle":0,"index":13,"text":"Shell 脚本语言非常擅长处理文本类型的数据","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"1fda1df8-7316-4763-9960-45e2be838210","page_size":[595,841],"block_position":"2-13"},{"bbox":[87,614,168,628],"type":"text","angle":0,"index":14,"text":"shell 脚本的成分","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"882acb4a-494d-47cf-96c9-0d03a378a7c0","page_size":[595,841],"block_position":"2-14"},{"bbox":[86,642,133,655],"type":"text","angle":0,"index":15,"text":"程序元素","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"9f51c930-c12d-44b2-be8c-1a90888e9914","page_size":[595,841],"block_position":"2-15"},{"bbox":[86,658,207,671],"type":"text","angle":0,"index":16,"text":"保留字、运算符、表达式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"9a56b4c3-10b9-4077-b479-660c303bcdda","page_size":[595,841],"block_position":"2-16"},{"bbox":[87,673,195,686],"type":"text","angle":0,"index":17,"text":"变量、数组、输入输出","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"660227cd-d023-46ab-8d76-544cb8cb96ce","page_size":[595,841],"block_position":"2-17"},{"bbox":[86,688,294,703],"type":"text","angle":0,"index":18,"text":"控制结构（顺序、分支、循环、子程序调用）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"79bf5b26-7383-430e-8d9c-2ab43aa4f63b","page_size":[595,841],"block_position":"2-18"},{"bbox":[87,705,138,718],"type":"text","angle":0,"index":19,"text":"Shell 功能","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"6ef9cb9f-5093-4b37-bbca-bdfcac5f775a","page_size":[595,841],"block_position":"2-19"},{"bbox":[86,732,294,745],"type":"text","angle":0,"index":20,"text":"执行命令（内置命令、外部命令、自编程序）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"55e1d9f1-7cf9-4b75-976b-d18d6f6c1aff","page_size":[595,841],"block_position":"2-20"},{"bbox":[87,748,258,761],"type":"text","angle":0,"index":21,"text":"重定向、管道、命令替换、命令聚合","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":2,"id":"3ba20b25-a22d-491d-b31e-8bea479e0380","page_size":[595,841],"block_position":"2-21"}],[{"bbox":[87,79,195,91],"type":"text","angle":0,"index":0,"text":"通配符、注释符、……","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"7f2bd090-42ba-460c-aaf5-0e325296d91c","page_size":[595,841],"block_position":"3-0"},{"bbox":[88,95,168,106],"type":"text","angle":0,"index":1,"text":"Shell 脚本的建立","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"36bd1db3-44bd-400e-84ac-9f297bbf877c","page_size":[595,841],"block_position":"3-1"},{"bbox":[88,110,227,122],"type":"text","angle":0,"index":2,"text":"使用文本编辑器编辑脚本文件","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"1afc6549-304c-46b4-9ef5-8f32ebcca657","page_size":[595,841],"block_position":"3-2"},{"bbox":[88,126,155,137],"type":"text","angle":0,"index":3,"text":"$\\$ 1$ vi script-file","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"f38a3aae-96f8-49a2-8252-b2712545c89c","page_size":[595,841],"block_position":"3-3"},{"bbox":[88,141,216,153],"type":"text","angle":0,"index":4,"text":"为脚本文件添加可执行权限","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"a322a619-6d63-4f49-9081-3bd0ab17c994","page_size":[595,841],"block_position":"3-4"},{"bbox":[88,157,196,169],"type":"text","angle":0,"index":5,"text":"$\\$ 1$ chmod $+ { \\sf x }$ script-file","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"6790ed51-3f08-4902-afe6-15a825dd256a","page_size":[595,841],"block_position":"3-5"},{"bbox":[88,172,168,184],"type":"text","angle":0,"index":6,"text":"Shell 脚本的执行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"6bcf8b64-7619-4da1-8b83-774212e987f1","page_size":[595,841],"block_position":"3-6"},{"bbox":[88,188,170,200],"type":"text","angle":0,"index":7,"text":"在子 Shell 中执行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"2c4b891e-cdf1-47ff-b97d-eb521fc01531","page_size":[595,841],"block_position":"3-7"},{"bbox":[88,204,171,216],"type":"text","angle":0,"index":8,"text":"$\\$ 1$ bash script-file","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"30cf768e-1524-438f-ae11-3897a65ef85a","page_size":[595,841],"block_position":"3-8"},{"bbox":[88,220,144,232],"type":"text","angle":0,"index":9,"text":"$\\$ 1$ script-file","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"edc0e761-a54c-4f50-ab29-93018aa6a6c5","page_size":[595,841],"block_position":"3-9"},{"bbox":[88,235,180,247],"type":"text","angle":0,"index":10,"text":"在当前Shell中执行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"e8c55205-0697-4646-85f0-f5feca1efbfe","page_size":[595,841],"block_position":"3-10"},{"bbox":[88,250,180,263],"type":"text","angle":0,"index":11,"text":"$\\$ 1$ source script-file","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"75177929-4fff-469f-a8c2-5e07d0e6417e","page_size":[595,841],"block_position":"3-11"},{"bbox":[88,266,153,279],"type":"text","angle":0,"index":12,"text":"$\\$ 1$ . script-file","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"c71cbcbb-31a9-4713-8d06-0335ffb34642","page_size":[595,841],"block_position":"3-12"},{"bbox":[88,281,279,294],"type":"text","angle":0,"index":13,"text":"PATH 环境变量的默认值不包含当前目录，","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"06011eca-5317-4fb9-b436-affde055a11a","page_size":[595,841],"block_position":"3-13"},{"bbox":[88,297,292,310],"type":"text","angle":0,"index":14,"text":"若脚本文件在当前目录，应使用 ./script-file","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"25c9dbbe-1547-468f-a8e2-25ca948fd182","page_size":[595,841],"block_position":"3-14"},{"bbox":[88,312,279,325],"type":"text","angle":0,"index":15,"text":"PATH 环境变量的默认值包含 ~/bin 目录，","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"5a2118bb-6496-4a28-b0c2-bef04f90842c","page_size":[595,841],"block_position":"3-15"},{"bbox":[88,328,303,341],"type":"text","angle":0,"index":16,"text":"用户可以将自己的脚本文件存放在 ~/bin 目录，","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"3b8a87ef-8f77-4156-98ee-a0a2697d6297","page_size":[595,841],"block_position":"3-16"},{"bbox":[88,343,278,356],"type":"text","angle":0,"index":17,"text":"之后即可直接调用脚本文件名执行脚本了","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"99411005-ef76-4e3a-a68d-e4fa653a4f29","page_size":[595,841],"block_position":"3-17"},{"bbox":[88,359,199,372],"type":"text","angle":0,"index":18,"text":"shell脚本的编码与规范","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"c886431e-69d5-412d-bd42-0c0e1bb66657","page_size":[595,841],"block_position":"3-18"},{"bbox":[88,386,294,399],"type":"text","angle":0,"index":19,"text":"以 #! 开头：通知系统用何解释器执行此脚本","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"38d1e4dd-0ba5-4c02-8502-475cc1554595","page_size":[595,841],"block_position":"3-19"},{"bbox":[88,402,146,414],"type":"text","angle":0,"index":20,"text":"#!/bin/bash","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"33d677fe-645e-4d65-a799-83841bc75236","page_size":[595,841],"block_position":"3-20"},{"bbox":[88,418,140,430],"type":"text","angle":0,"index":21,"text":"#!/bin/ksh","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"7ae7e5fc-d36b-4f64-b8f4-c2e8ba83cf53","page_size":[595,841],"block_position":"3-21"},{"bbox":[88,433,220,446],"type":"text","angle":0,"index":22,"text":"以注释形式说明如下的内容：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"f7aa807a-e511-45d1-8b1a-3ad1e525aaf3","page_size":[595,841],"block_position":"3-22"},{"bbox":[88,449,142,462],"type":"text","angle":0,"index":23,"text":"# 脚本名称","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"0efa950f-58df-4aef-9da4-51c550d1ba8c","page_size":[595,841],"block_position":"3-23"},{"bbox":[88,465,142,477],"type":"text","angle":0,"index":24,"text":"# 脚本功能","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"b0899b50-b502-4b46-a175-9f7c8cc72a28","page_size":[595,841],"block_position":"3-24"},{"bbox":[88,481,173,493],"type":"text","angle":0,"index":25,"text":"# 作者及联系方式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"1d8f7a48-354f-49e3-a901-23b1c9bdbc69","page_size":[595,841],"block_position":"3-25"},{"bbox":[88,497,163,509],"type":"text","angle":0,"index":26,"text":"# 版本更新记录","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"b33f4ce3-06cb-4f3c-9460-ff61567cdaef","page_size":[595,841],"block_position":"3-26"},{"bbox":[88,512,142,524],"type":"text","angle":0,"index":27,"text":"# 版权声明","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"d5ce0c5c-917d-4819-88a6-c51918cc1112","page_size":[595,841],"block_position":"3-27"},{"bbox":[88,527,271,539],"type":"text","angle":0,"index":28,"text":"# 对算法做简要说明（如果是复杂脚本）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"e8093f4a-7047-4872-bc4a-ff95e3012103","page_size":[595,841],"block_position":"3-28"},{"bbox":[88,555,132,567],"type":"text","angle":0,"index":29,"text":"脚本调试","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"8acce582-eccb-4e88-ac96-bbd36e1ebb51","page_size":[595,841],"block_position":"3-29"},{"bbox":[88,571,224,582],"type":"text","angle":0,"index":30,"text":"在 bash 调用脚本时使用参数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"84e6e458-c0f7-4da3-885d-940dc1329c29","page_size":[595,841],"block_position":"3-30"},{"bbox":[88,586,241,599],"type":"text","angle":0,"index":31,"text":"$\\$ 1$ bash [-x] [-n] [-v] scriptName","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"615dcaf9-89cf-4e3c-b9ad-ce0e69e68ba7","page_size":[595,841],"block_position":"3-31"},{"bbox":[88,602,401,614],"type":"text","angle":0,"index":32,"text":"在脚本中使用 bash 内置的 set 命令使整个或部分脚本处于调试模式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"1ca33d27-e9be-450c-82c3-e3c0b021e775","page_size":[595,841],"block_position":"3-32"},{"bbox":[88,618,193,630],"type":"text","angle":0,"index":33,"text":"开启：set [-x] [-n] [-v]","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"7cb721a4-f733-4445-9ea1-5c86585cdc68","page_size":[595,841],"block_position":"3-33"},{"bbox":[88,634,200,646],"type":"text","angle":0,"index":34,"text":"结束：set $[ + \\mathsf { x } ] [ + \\mathsf { n } ] [ + \\mathsf { v } ]$","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"71a840ea-2a32-4ab8-b2e7-86c4455c791f","page_size":[595,841],"block_position":"3-34"},{"bbox":[88,649,149,661],"type":"text","angle":0,"index":35,"text":"sh $- { \\sf x }$ 脚本名","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"1f8df8ef-7a54-44cd-894c-9bf4f6492046","page_size":[595,841],"block_position":"3-35"},{"bbox":[88,664,496,692],"type":"text","angle":0,"index":36,"text":"该选项可以使用户跟踪脚本的执行，此时shell 对脚本中每条命令的处理过程为：先执行替换，然后显示，再执行它。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"66361a1a-7045-4057-9143-8fb8a117c065","page_size":[595,841],"block_position":"3-36"},{"bbox":[88,695,347,708],"type":"text","angle":0,"index":37,"text":"shell 显示脚本中的行时，会在行首添加一个加号 “ + ”。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"a5b68153-a8f3-4c33-8146-8ac17fc4dc2f","page_size":[595,841],"block_position":"3-37"},{"bbox":[88,711,149,723],"type":"text","angle":0,"index":38,"text":"sh –v 脚本名","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"e20cabd0-98a3-4231-9284-d17237e4d360","page_size":[595,841],"block_position":"3-38"},{"bbox":[88,726,321,739],"type":"text","angle":0,"index":39,"text":"在执行脚本之前，按输入的原样打印脚本中的各行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":3,"id":"ccbb7daf-db10-4dd4-b52f-56ac83514d69","page_size":[595,841],"block_position":"3-39"}],[{"bbox":[86,79,151,91],"type":"text","angle":0,"index":0,"text":"sh –n 脚本名","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"2d82a1d4-f6e8-4ebf-a487-457041a7a774","page_size":[595,841],"block_position":"4-0"},{"bbox":[86,94,498,122],"type":"text","angle":0,"index":1,"text":"对脚本进行语法检查，但不执行脚本。如果存在语法错误，shell 会报错，如果没有错误，则不显示任何内容。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"5d5cff1f-0bf2-45d5-9777-b6a5cb458524","page_size":[595,841],"block_position":"4-1"},{"bbox":[87,126,128,137],"type":"text","angle":0,"index":2,"text":"set 命令","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"89dfbba9-8618-4599-b5e9-4ec55f69eb20","page_size":[595,841],"block_position":"4-2"},{"bbox":[86,153,258,166],"type":"text","angle":0,"index":3,"text":"在脚本内使用 set 命令开启调试选项","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"5c033de1-5653-45d7-aa39-3a989035031a","page_size":[595,841],"block_position":"4-3"},{"bbox":[86,169,283,181],"type":"text","angle":0,"index":4,"text":"set -x ：显示由shell执行的命令及其参数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"ff191f2a-d07b-4de4-b43c-9f074108b808","page_size":[595,841],"block_position":"4-4"},{"bbox":[87,185,252,197],"type":"text","angle":0,"index":5,"text":"set -v ：显示由 shell 读入的命令行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"806514d2-aa3c-41ed-87e1-f3837c5aa325","page_size":[595,841],"block_position":"4-5"},{"bbox":[86,200,309,213],"type":"text","angle":0,"index":6,"text":"set -n ：读取命令但不执行他们，用于语法检查","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"813d42c5-baf9-464e-b2a5-6b7535367a0e","page_size":[595,841],"block_position":"4-6"},{"bbox":[86,215,298,228],"type":"text","angle":0,"index":7,"text":"在脚本内使用set命令关闭已开启的调试选项","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"f69f4d0d-e5d2-4bd0-97b3-7debd6a90dc4","page_size":[595,841],"block_position":"4-7"},{"bbox":[87,232,120,243],"type":"text","angle":0,"index":8,"text":"set $+ \\mathsf { x }$","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"87371dcd-0cb6-49d8-b2ab-a1b67242e50d","page_size":[595,841],"block_position":"4-8"},{"bbox":[87,248,120,259],"type":"text","angle":0,"index":9,"text":"set $+ \\nu$","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"94699f65-fea0-4aa2-8ed3-d31e904d3f06","page_size":[595,841],"block_position":"4-9"},{"bbox":[87,264,120,274],"type":"text","angle":0,"index":10,"text":"set $+ \\mathsf { n }$","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"7cd0f46f-8ef9-4e27-9711-0ab6645d9d54","page_size":[595,841],"block_position":"4-10"},{"bbox":[87,278,167,290],"type":"text","angle":0,"index":11,"text":"shell脚本的类型","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"6456f3fa-db2e-4d78-8e24-a0c00d598b00","page_size":[595,841],"block_position":"4-11"},{"bbox":[87,306,153,318],"type":"text","angle":0,"index":12,"text":"非交互式脚本","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"2d13a135-82f0-488d-bfde-250141f9a551","page_size":[595,841],"block_position":"4-12"},{"bbox":[87,321,327,333],"type":"text","angle":0,"index":13,"text":"不需要读取用户的输入, 也不用向用户反馈某些信息","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"f1e1bcc7-7417-4df2-832b-5744cd268572","page_size":[595,841],"block_position":"4-13"},{"bbox":[87,337,374,349],"type":"text","angle":0,"index":14,"text":"每次执行都是可预见的, 因为它不读取用户输入, 参数是固定的","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"423051ca-5031-420f-ae10-f031bb5eab30","page_size":[595,841],"block_position":"4-14"},{"bbox":[87,353,164,365],"type":"text","angle":0,"index":15,"text":"可以在后台执行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"614d7d4e-6643-47a3-869e-56b5ca88761f","page_size":[595,841],"block_position":"4-15"},{"bbox":[88,368,143,380],"type":"text","angle":0,"index":16,"text":"交互式脚本","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"d7e75681-433d-4a9d-b780-d4b736517bdd","page_size":[595,841],"block_position":"4-16"},{"bbox":[87,383,383,396],"type":"text","angle":0,"index":17,"text":"脚本可以读取用户的输入, 实时向用户反馈信息（输出某些信息）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"a47d9163-ebcc-47e8-b13a-87dbe93b81f6","page_size":[595,841],"block_position":"4-17"},{"bbox":[87,398,348,411],"type":"text","angle":0,"index":18,"text":"这样的脚本更灵活, 每次执行时的参数可由用户动态设定","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"f8b3ffe3-3502-4fa6-8c39-b0e020cb39e5","page_size":[595,841],"block_position":"4-18"},{"bbox":[87,414,351,428],"type":"text","angle":0,"index":19,"text":"用户界面更友好，但不适用于自动化任务（如 cron 任务）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"f53e7b27-8c1d-4350-954d-0b415e7540ac","page_size":[595,841],"block_position":"4-19"},{"bbox":[87,430,239,443],"type":"text","angle":0,"index":20,"text":"掌握一种文本编辑器的使用（Vi）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"1aa9ab1e-e172-4ca6-90ab-f7c6d5c455d4","page_size":[595,841],"block_position":"4-20"},{"bbox":[87,445,216,459],"type":"text","angle":0,"index":21,"text":"熟悉 Linux 文件系统的布局","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"75741693-fae9-4ddf-b422-074c485bba8a","page_size":[595,841],"block_position":"4-21"},{"bbox":[88,461,192,474],"type":"text","angle":0,"index":22,"text":"学习 Shell 的各种功能","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"d793fc7d-8109-4730-a5f6-9b49690d18f6","page_size":[595,841],"block_position":"4-22"},{"bbox":[87,476,258,490],"type":"text","angle":0,"index":23,"text":"重定向、管道、命令替换、命令聚合","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"ade5c8d5-7ea8-47be-b126-f7e79c8cbf89","page_size":[595,841],"block_position":"4-23"},{"bbox":[88,492,237,505],"type":"text","angle":0,"index":24,"text":"学习各种管理和监视命令的使用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"9cb03071-172f-4ec8-bcfa-e57c8b2c1aaf","page_size":[595,841],"block_position":"4-24"},{"bbox":[87,507,299,521],"type":"text","angle":0,"index":25,"text":"用户管理、权限管理、进程管理、包管理……","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"78d961c7-f371-478a-9502-6a65fd086c4a","page_size":[595,841],"block_position":"4-25"},{"bbox":[88,523,208,536],"type":"text","angle":0,"index":26,"text":"系统监视、网络监视……","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"b9252790-a8f4-43fa-a3cc-a4f658a39849","page_size":[595,841],"block_position":"4-26"},{"bbox":[87,539,227,552],"type":"text","angle":0,"index":27,"text":"学习各种文本文件工具的使用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"63f1e9f4-807e-4745-9e14-7e452b4e3abd","page_size":[595,841],"block_position":"4-27"},{"bbox":[87,555,234,568],"type":"text","angle":0,"index":28,"text":"cat、grep、tr、sed、awk ……","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"c3e4a440-512d-40e0-9743-5a20470c3ce8","page_size":[595,841],"block_position":"4-28"},{"bbox":[88,571,143,582],"type":"text","angle":0,"index":29,"text":"正则表达式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"4919f7af-c5ac-4743-b3cb-0e375c27e067","page_size":[595,841],"block_position":"4-29"},{"bbox":[87,613,137,626],"type":"text","angle":0,"index":30,"text":"Shell 环境","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"b34bff8e-768e-4f2d-ad72-d16794e29dc9","page_size":[595,841],"block_position":"4-30"},{"bbox":[87,656,189,669],"type":"text","angle":0,"index":31,"text":"运行脚本有多种方法：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"7b6755e5-1dd4-494d-a7e6-e3aacb878ed7","page_size":[595,841],"block_position":"4-31"},{"bbox":[87,684,179,698],"type":"text","angle":0,"index":32,"text":"# 使用 shell 来执行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"ba654f61-981b-486c-b640-277c3e240693","page_size":[595,841],"block_position":"4-32"},{"bbox":[88,712,143,724],"type":"text","angle":0,"index":33,"text":"sh hello.sh","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"44f89867-971f-4221-9f0d-2d642c651934","page_size":[595,841],"block_position":"4-33"},{"bbox":[87,739,180,752],"type":"text","angle":0,"index":34,"text":"# 使用 bash 来执行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":4,"id":"b1c41bd1-87d8-4044-95bc-cd17fa90f2a8","page_size":[595,841],"block_position":"4-34"}],[{"bbox":[86,79,157,90],"type":"text","angle":0,"index":0,"text":"bash hello.sh","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"c967e6aa-4c43-4877-9b6c-62b4694939ba","page_size":[595,841],"block_position":"5-0"},{"bbox":[86,106,362,119],"type":"text","angle":0,"index":1,"text":"# 还可以赋予脚本所有者执行权限，允许该用户执行该脚本","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"60ea4466-3c24-4ca7-9bff-9ba3bfbf0a44","page_size":[595,841],"block_position":"5-1"},{"bbox":[86,134,190,146],"type":"text","angle":0,"index":2,"text":"chmod $\\uplus \\dag \\boldsymbol { \\mathsf { r } } \\boldsymbol { \\mathsf { X } }$ hello.sh","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"d979b8b4-ff4d-4cf7-84f4-7eafd85ba470","page_size":[595,841],"block_position":"5-2"},{"bbox":[87,162,135,173],"type":"text","angle":0,"index":3,"text":"./hello.sh","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"7cb8caf7-a5ad-4ccf-8e77-3cc43350b05f","page_size":[595,841],"block_position":"5-3"},{"bbox":[86,189,249,201],"type":"text","angle":0,"index":4,"text":"# 使用.命令来执行，不创建子进程","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"35103f7a-5dda-41f5-89ed-0b236c836ce9","page_size":[595,841],"block_position":"5-4"},{"bbox":[87,216,141,228],"type":"text","angle":0,"index":5,"text":". ./hello.sh","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"66c8bb6f-9ece-4913-8e79-5845b5c8cf5c","page_size":[595,841],"block_position":"5-5"},{"bbox":[86,244,255,257],"type":"text","angle":0,"index":6,"text":"# 使用 source 来执行，与.命令等价","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"c5b511b8-67d2-467d-ad46-7cdfdfb3a883","page_size":[595,841],"block_position":"5-6"},{"bbox":[86,272,164,283],"type":"text","angle":0,"index":7,"text":"source hello.sh","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"c479700c-68e1-4897-bf08-d2ca6a8063b7","page_size":[595,841],"block_position":"5-7"},{"bbox":[87,300,242,312],"type":"title","angle":0,"index":8,"text":"# 1. ./hello.sh 报错 zsh: 权限不够","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":5,"id":"88bd150e-fee3-4df1-aaed-8dd6b4438b75","page_size":[595,841],"block_position":"5-8"},{"bbox":[86,327,498,340],"type":"text","angle":0,"index":9,"text":"当你直接运行 ./hello.sh 时，系统会尝试把 hello.sh 当作一个可执行程序运行，但要求：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"3590465b-e96b-4cc2-922c-cbfb044e53c8","page_size":[595,841],"block_position":"5-9"},{"bbox":[104,354,297,367],"type":"text","angle":0,"index":10,"text":" 文件必须具有可执行权限（ $\\mathbf { x }$ 权限）。","id":"0933be9e-2f35-4e95-aabc-3df4977d1242","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"page_size":[595,841],"block_position":"5-10"},{"bbox":[104,382,424,395],"type":"text","angle":0,"index":11,"text":" 如果文件没有 $\\pmb { \\times }$ 权限，就会报 权限不够（Permission denied）。","id":"8d70251c-3e19-465e-b1ac-0874cfd746fa","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"page_size":[595,841],"block_position":"5-11"},{"bbox":[123,410,168,421],"type":"text","angle":0,"index":13,"text":"Chomod","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"5d68de45-6fdd-4af4-9c2d-39c3e653ffe7","page_size":[595,841],"block_position":"5-12"},{"bbox":[86,437,211,450],"type":"title","angle":0,"index":14,"text":"# 2. . ./hello.sh 能正常运行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":5,"id":"7b4ffc5a-8ac1-4525-b24f-8e1176b532ab","page_size":[595,841],"block_position":"5-13"},{"bbox":[86,465,502,493],"type":"text","angle":0,"index":15,"text":"当你使用 . ./hello.sh（或等价的 source ./hello.sh）时，Shell 会直接在当前 Shell 进程中执行脚本内容，而不是启动一个新的子 Shell。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"12124285-3986-476b-962c-c5b61d8f781c","page_size":[595,841],"block_position":"5-14"},{"bbox":[86,496,178,509],"type":"text","angle":0,"index":16,"text":"这种方式的特点是：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"d2bb0cc0-05fc-44b2-b265-3fc9ee2170fc","page_size":[595,841],"block_position":"5-15"},{"bbox":[104,523,431,537],"type":"text","angle":0,"index":17,"text":" 不需要文件有可执行权限（因为 Shell 直接读取文件内容并执行）。","id":"3020fd92-5f71-442e-aa98-2ddbe8a8f6d8","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"page_size":[595,841],"block_position":"5-16"},{"bbox":[104,551,444,565],"type":"text","angle":0,"index":18,"text":" 脚本中的变量、函数等会影响当前 Shell 环境（而./hello.sh 不会）。","id":"6c567f27-2030-4e97-94c0-44a5b33b5c07","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"page_size":[595,841],"block_position":"5-17"},{"bbox":[86,578,169,592],"type":"title","angle":0,"index":20,"text":"# 为什么它能工作？","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":5,"id":"b3513255-6665-4b88-849b-0b2531404504","page_size":[595,841],"block_position":"5-18"},{"bbox":[104,606,377,619],"type":"text","angle":0,"index":21,"text":" .（或source）是 Shell 的内置命令，不依赖文件权限。","id":"01f10d79-9be4-4ea7-b220-2977e05c9d58","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"page_size":[595,841],"block_position":"5-19"},{"bbox":[104,634,424,647],"type":"text","angle":0,"index":22,"text":" 它直接读取文件内容并逐行执行，因此即使没有 $\\pmb { \\times }$ 权限也能运行。","id":"615ecc5d-647d-4830-aa7e-f27f38c17389","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"page_size":[595,841],"block_position":"5-20"},{"bbox":[86,661,408,675],"type":"text","angle":0,"index":24,"text":"如果想要保存脚本的输出 hello world 为一个文本，那么该怎么办呢？","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"820f419a-991c-4a96-80ac-a4c9d9efae96","page_size":[595,841],"block_position":"5-21"},{"bbox":[89,689,150,701],"type":"text","angle":0,"index":25,"text":"#!/bin/bash","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"0bc9a1e0-9c55-4bce-bdcf-5a59244239bc","page_size":[595,841],"block_position":"5-22"},{"bbox":[89,717,229,729],"type":"text","angle":0,"index":26,"text":"echo \"hello world\" $>$ my.out","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"69df4a07-4be6-4bf1-aeeb-b5ca8ed6020d","page_size":[595,841],"block_position":"5-23"},{"bbox":[86,745,257,758],"type":"text","angle":0,"index":27,"text":"用 cat 命令查看 my.out 文件的内容。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":5,"id":"777fc28f-e431-4008-9462-47eeca38b3d9","page_size":[595,841],"block_position":"5-24"}],[{"bbox":[87,79,142,92],"type":"text","angle":0,"index":0,"text":"cat my.out","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"266ff655-0bb4-45f8-ab06-0686c1a282af","page_size":[595,841],"block_position":"6-0"},{"bbox":[88,105,154,120],"type":"title","angle":0,"index":1,"text":"# 关键区别总结","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":6,"id":"c03cfa4f-62c4-44eb-8f71-54b410c0a4b9","page_size":[595,841],"block_position":"6-1"},{"bbox":[86,140,481,340],"index":2,"angle":0,"type":"table_body","img_path":"/","id":"5038b6a7-822c-4479-9e0e-9d104260874c","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>方式</td><td>是否需要x权限</td><td>执行环境</td><td>典型用途</td></tr><tr><td>./hello.sh</td><td>需要</td><td>新的子Shell</td><td>运行独立脚本</td></tr><tr><td>../hello.sh</td><td>不需要</td><td>当前Shell</td><td>加载环境变量或函数到当前会话</td></tr><tr><td>bashhello.sh</td><td>不需要</td><td>新的子Shell</td><td>直接指定解释器执行脚本</td></tr></table>","page_idx":6,"page_size":[595,841],"block_position":"6-2"},{"bbox":[88,353,143,366],"type":"title","angle":0,"index":3,"text":"# 正则表达式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":6,"id":"7b9b0569-9e12-440f-bf99-1f96c563726d","page_size":[595,841],"block_position":"6-3"},{"bbox":[86,380,500,394],"type":"text","angle":0,"index":4,"text":"正则表达式是使用某种模式（pattern）去匹配（matching）一类字符串的一个公式。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"88a385e2-c205-4b45-8181-e3a29753a564","page_size":[595,841],"block_position":"6-4"},{"bbox":[87,395,499,410],"type":"text","angle":0,"index":5,"text":"通 常 使 用 正 则 表 达 式 进 行 查 找 、 替 换 等 操 作 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"947b91c9-eed2-429c-862a-ef2bec53cfaa","page_size":[595,841],"block_position":"6-5"},{"bbox":[88,411,499,425],"type":"text","angle":0,"index":6,"text":"在 适 当 的 情 况 下 使 用 正 则 表 达 式 可 以 极 大 地 提 高 工 作 效 率 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"dcdd6d1f-c3ea-457d-8838-b17d0bfad1a7","page_size":[595,841],"block_position":"6-6"},{"bbox":[88,427,474,440],"type":"text","angle":0,"index":7,"text":"有 两 种 风 格 的 正 则 表 达 式 ：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"c57c284b-9c23-449d-821e-da6bfdc27c0f","page_size":[595,841],"block_position":"6-7"},{"bbox":[88,442,505,455],"type":"text","angle":0,"index":8,"text":"POSIX 风 格 的 正 则 表 达 式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"56bbd368-ff6f-44f9-9536-dc1158d5eb7b","page_size":[595,841],"block_position":"6-8"},{"bbox":[88,457,499,472],"type":"text","angle":0,"index":9,"text":"Perl 风 格 的 正 则 表 达 式 （ Perl-compatible regular expression ）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"c6062374-2a28-4737-aa30-2e4684b0b450","page_size":[595,841],"block_position":"6-9"},{"bbox":[88,473,505,488],"type":"text","angle":0,"index":10,"text":"基 本 的 正 则 表 达 式 Basic regular expression (BRE)","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"cb71b14a-ee83-48f3-9ee1-52a05d7ce3ed","page_size":[595,841],"block_position":"6-10"},{"bbox":[88,489,505,503],"type":"text","angle":0,"index":11,"text":"grep 按 模 式 匹 配 文 本","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"fdb5222f-97e0-46b0-a3d6-afb9fbaea5b6","page_size":[595,841],"block_position":"6-11"},{"bbox":[88,504,505,518],"type":"text","angle":0,"index":12,"text":"ed 个 原 始 的 行 编 辑 器","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"5dd329d7-d522-4913-9693-8dec93791794","page_size":[595,841],"block_position":"6-12"},{"bbox":[88,520,505,534],"type":"text","angle":0,"index":13,"text":"sed 个 流 编 辑 器","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"c6e73f14-e46b-47ec-9648-6c916bda4637","page_size":[595,841],"block_position":"6-13"},{"bbox":[88,535,505,550],"type":"text","angle":0,"index":14,"text":"vim 个 屏 幕 编 辑 器","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"91ee469c-1db0-48ed-81c5-b22c09f34f65","page_size":[595,841],"block_position":"6-14"},{"bbox":[88,551,505,565],"type":"text","angle":0,"index":15,"text":"emacs 个 屏 幕 编 辑 器","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"4dfe07f0-3805-4975-8461-b3e842d4bacb","page_size":[595,841],"block_position":"6-15"},{"bbox":[88,566,505,581],"type":"text","angle":0,"index":16,"text":"扩 展 的 正 则 表 达 式 Extended regular expression (ERE)","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"41fb3b3b-99b7-4c45-95a5-2c6ecc72c5b3","page_size":[595,841],"block_position":"6-16"},{"bbox":[88,582,505,597],"type":"text","angle":0,"index":17,"text":"egrep 按 模 式 匹 配 文 本","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"0f77b3e4-a020-4703-ab07-ca44bcc87b6f","page_size":[595,841],"block_position":"6-17"},{"bbox":[88,597,505,613],"type":"text","angle":0,"index":18,"text":"awk 进 行 简 单 的 文 本 处 理","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"a85e54ea-2c76-4921-825e-b0ab24414b05","page_size":[595,841],"block_position":"6-18"},{"bbox":[86,641,499,671],"type":"text","angle":0,"index":19,"text":"在 Shell 中有一些具有特殊的意义字符，称为 Shell 元字符（shell metacharacters）。若不以特殊方式（使用转义字符）指明，Shell 并不会把它们当做普通文字符使用。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":6,"id":"9b8bbf45-adc0-4738-8075-cc5222c3531f","page_size":[595,841],"block_position":"6-19"},{"bbox":[88,686,595,760],"index":20,"angle":0,"type":"table_body","img_path":"/","id":"bfc6424b-d38b-442d-9dd2-c1ba0e3a7377","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>字符</td><td>含义</td><td>字符</td><td>含义</td></tr><tr><td>'</td><td>强引用</td><td>*、?、!</td><td>通配符</td></tr><tr><td>\"</td><td>弱引用</td><td>&lt;、&gt;、&gt;&gt;</td><td>重定向</td></tr><tr><td>\\</td><td>转义字符</td><td>-</td><td>选项标</td></tr><tr><td>$</td><td>变量引用</td><td>#</td><td>注释符</td></tr><tr><td>;</td><td>命令分离符</td><td>空格、换行符</td><td>命令分</td></tr></table>","page_idx":6,"page_size":[595,841],"block_position":"6-20"}],[{"bbox":[88,76,595,221],"index":0,"angle":0,"type":"table_body","lines_deleted":true,"text":"","id":"bfc6424b-d38b-442d-9dd2-c1ba0e3a7377","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"","page_idx":7,"page_size":[595,841],"block_position":"7-0"},{"bbox":[88,233,167,247],"index":1,"angle":0,"type":"table_caption","text":"通配符（元字符）","id":"7df173e5-3c80-4959-b4f6-adf6ed5b568d","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":7,"page_size":[595,841],"block_position":"7-1"},{"bbox":[88,248,595,745],"index":2,"angle":0,"type":"table_body","img_path":"/","id":"40e2e6c4-25e3-4a7c-913a-b59fbe44d39d","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>元字符</td><td colspan=\"3\">含义</td><td>类型</td><td>举例</td><td colspan=\"2\">说明</td></tr><tr><td>^</td><td colspan=\"3\">匹配首字符</td><td>BRE</td><td>^x</td><td colspan=\"2\">以字符x开</td></tr><tr><td>$</td><td colspan=\"3\">匹配尾字符</td><td>BRE</td><td>x$</td><td colspan=\"2\">以x字符结</td></tr><tr><td>.</td><td colspan=\"3\">匹配任意一个字符</td><td>BRE</td><td>l..e</td><td colspan=\"2\">love, life, l</td></tr><tr><td>?</td><td colspan=\"3\">匹配任意一个可选字符</td><td>ERE</td><td>xy?</td><td colspan=\"2\">x, xy</td></tr><tr><td>*</td><td colspan=\"3\">匹配零次或多次重复</td><td>BRE</td><td>xy*</td><td colspan=\"2\">x, xy, xyy, x</td></tr><tr><td>+</td><td colspan=\"3\">匹配一次或多次重复</td><td>ERE</td><td>xy+</td><td colspan=\"2\">xy, xyy, xyy</td></tr><tr><td>[...]</td><td colspan=\"3\">匹配任意一个字符</td><td>BRE</td><td>[xyz]</td><td colspan=\"2\">x, y, z</td></tr><tr><td>()</td><td colspan=\"3\">对正则表达式分组</td><td>ERE</td><td>(xy)+</td><td colspan=\"2\">xy, xyxy, x</td></tr><tr><td colspan=\"2\">元字符</td><td>含义</td><td>类型</td><td colspan=\"2\">举例</td><td colspan=\"2\">说明</td></tr><tr><td colspan=\"2\">\\{n\\}</td><td>匹配n次</td><td>BRE</td><td colspan=\"2\">go{\\2}\\gle</td><td colspan=\"2\">google</td></tr><tr><td colspan=\"2\">\\{n,\\}</td><td>匹配最少n次</td><td>BRE</td><td colspan=\"2\">go{\\2,\\}gle</td><td colspan=\"2\">google, google, goooo</td></tr><tr><td colspan=\"2\">\\{n,m\\}</td><td>匹配n到m次</td><td>BRE</td><td colspan=\"2\">go{\\2,4}\\gle</td><td colspan=\"2\">google, google, goooo</td></tr><tr><td colspan=\"2\">{n}</td><td>匹配n次</td><td>ERE</td><td colspan=\"2\">go{2}gle</td><td colspan=\"2\">google</td></tr><tr><td colspan=\"2\">{n,}</td><td>匹配最少n次</td><td>ERE</td><td colspan=\"2\">go{2,}gle</td><td colspan=\"2\">google, google, goooo</td></tr><tr><td colspan=\"2\">{n,m}</td><td>匹配n到m次</td><td>ERE</td><td colspan=\"2\">go{2,4}gle</td><td colspan=\"2\">google, google, goooo</td></tr><tr><td colspan=\"2\">|</td><td>以或逻辑连接多个匹配</td><td>ERE</td><td colspan=\"2\">good|bon</td><td colspan=\"2\">匹配 good 或 bon</td></tr><tr><td colspan=\"2\">\\</td><td>转义字符</td><td>BRE</td><td colspan=\"2\">\\*</td><td colspan=\"2\">*</td></tr><tr><td>元字符</td><td colspan=\"4\">含义</td><td>类型</td><td>举例</td><td>说明</td></tr><tr><td colspan=\"2\">^</td><td colspan=\"3\">非（仅用于启始字符）</td><td>BRE</td><td>^[^xyz]</td><td>匹配xy</td></tr><tr><td colspan=\"2\">-</td><td colspan=\"3\">用于指明字符范围(不能是首字符和尾字符)</td><td>BRE</td><td>[a-zA-Z]</td><td>匹配任</td></tr><tr><td colspan=\"2\">\\</td><td colspan=\"3\">转义字符</td><td>BRE</td><td>[\\.]\\</td><td>.</td></tr></table>","page_idx":7,"page_size":[595,841],"block_position":"7-2"}],[{"bbox":[85,73,595,491],"index":0,"angle":0,"type":"table_body","lines_deleted":true,"text":"","id":"40e2e6c4-25e3-4a7c-913a-b59fbe44d39d","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"","page_idx":8,"page_size":[595,841],"block_position":"8-0"},{"bbox":[88,528,506,544],"type":"text","angle":0,"index":1,"text":"任 意 个 普 通 字 符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":8,"id":"98333e4a-e607-459c-b23c-0e19c118c222","page_size":[595,841],"block_position":"8-1"},{"bbox":[86,571,506,585],"type":"text","angle":0,"index":2,"text":"大 ： 匹 配 任 何 字 符 和 任 何 数 目 的 字 符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":8,"id":"c2156dde-c225-44d4-8b2b-0c154d6d0e9a","page_size":[595,841],"block_position":"8-2"},{"bbox":[88,587,505,602],"type":"text","angle":0,"index":3,"text":"? · 匹 配 单 一 数 目 的 任 何 字 符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":8,"id":"d5954f6d-5784-4b6f-a5ef-f1165495dc1a","page_size":[595,841],"block_position":"8-3"},{"bbox":[88,603,505,617],"type":"text","angle":0,"index":4,"text":"> 行 的 开 始","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":8,"id":"5e21dab6-b679-4940-b908-ccbc0715ef25","page_size":[595,841],"block_position":"8-4"},{"bbox":[88,619,505,632],"type":"text","angle":0,"index":5,"text":"$\\$ 1$ 行 的 结 束","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":8,"id":"fc61ac11-c69a-4ad3-9fd7-5e9c7a378739","page_size":[595,841],"block_position":"8-5"},{"bbox":[88,634,505,648],"type":"text","angle":0,"index":6,"text":"[…] 在 […] 列 表 中 的 任 意 一 个 字 符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":8,"id":"f22696d0-a94f-4839-81c1-197aa05d1611","page_size":[595,841],"block_position":"8-6"},{"bbox":[88,650,220,664],"type":"text","angle":0,"index":7,"text":"[^…] 不在列表中的任一字符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":8,"id":"ea5919eb-bfc5-426a-8567-bbe7a64a5175","page_size":[595,841],"block_position":"8-7"},{"bbox":[86,677,505,691],"type":"text","angle":0,"index":8,"text":"[! ] ： 匹 配 除 了 [! ] 之 外 的 任 意 一 个 字 符 ， ! 表 示 非 的 意 思","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":8,"id":"e1dc627f-dcf9-45e1-8c72-5fe7f14c9b98","page_size":[595,841],"block_position":"8-8"},{"bbox":[88,693,499,707],"type":"text","angle":0,"index":9,"text":"=*\" 能 匹 配 文 件 或 目 录 名 中 的 66 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":8,"id":"239ca7f1-02ab-4c02-859c-12ec748f52ef","page_size":[595,841],"block_position":"8-9"},{"bbox":[88,709,277,723],"type":"text","angle":0,"index":10,"text":"“*”不能匹配首字符是“.”的文件或目录名","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":8,"id":"380e0ba1-4a8e-4934-b3b7-4e34cc16bea5","page_size":[595,841],"block_position":"8-10"},{"bbox":[87,736,506,751],"type":"text","angle":0,"index":11,"text":"$ 代 表 变 量 值 置 换","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":8,"id":"2c1aa0b2-95b7-483f-bd44-8a80e2bf0a84","page_size":[595,841],"block_position":"8-11"}],[{"bbox":[88,79,508,154],"index":0,"angle":0,"type":"table_body","img_path":"/","id":"02945fd2-cff1-424f-b648-4215619d56c1","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>$</td><td></td><td>$PATH</td></tr><tr><td>$</td><td>echo</td><td>${mname}</td></tr><tr><td>$</td><td></td><td>nname=bigdata</td></tr><tr><td>$</td><td>echo</td><td>${mname}</td></tr></table>","page_idx":9,"page_size":[595,841],"block_position":"9-0"},{"bbox":[87,199,508,306],"index":1,"angle":0,"type":"table_body","img_path":"/","id":"d0f75ad8-81cf-4291-9a7b-96e3aff336b9","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td colspan=\"3\">特 点</td><td>(</td><td colspan=\"3\">characteristic</td><td>)</td></tr><tr><td>解</td><td></td><td></td><td>释</td><td></td><td></td><td></td><td>性</td></tr><tr><td>速</td><td></td><td></td><td>度</td><td></td><td></td><td></td><td>慢</td></tr><tr><td>组</td><td colspan=\"2\">合</td><td>、</td><td colspan=\"3\">灵</td><td>活</td></tr><tr><td>Tab</td><td>键</td><td>与</td><td>历</td><td>史</td><td colspan=\"2\">命</td><td>令</td></tr><tr><td>脚</td><td colspan=\"2\">本</td><td>与</td><td colspan=\"3\">函</td><td>数</td></tr><tr><td>子</td><td></td><td></td><td>程</td><td></td><td></td><td></td><td>序</td></tr></table>","page_idx":9,"page_size":[595,841],"block_position":"9-1"},{"bbox":[88,309,164,322],"type":"text","angle":0,"index":2,"text":"命令行执行过程","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":9,"id":"462ff1e6-8c0b-4bac-afed-4e623ba7c359","page_size":[595,841],"block_position":"9-2"},{"bbox":[88,335,502,396],"index":3,"angle":0,"type":"table_body","img_path":"/","id":"7ba5bb5e-fca8-472d-a98c-934eec9c411e","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>将</td><td>命</td><td>令</td><td>行</td><td>分</td><td>成</td><td>单</td><td>个</td><td>命</td><td>令</td><td>词</td></tr><tr><td>展</td><td></td><td>开</td><td></td><td></td><td>别</td><td></td><td></td><td>名</td><td></td><td></td></tr><tr><td>展</td><td>开</td><td>大</td><td>括</td><td>号</td><td>中</td><td>的</td><td>声</td><td>明</td><td>(</td><td>{}</td></tr><tr><td>展</td><td>开</td><td>颚</td><td>化</td><td></td><td>声</td><td></td><td>明</td><td></td><td>(</td><td>~</td></tr></table>","page_idx":9,"page_size":[595,841],"block_position":"9-3"},{"bbox":[88,398,502,506],"index":4,"angle":0,"type":"table_body","img_path":"/","id":"4ec7d704-0049-4c57-b37a-7958636c29d1","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td colspan=\"3\">命 令 替 换 ($() 或 “”)</td></tr><tr><td colspan=\"3\">再 次 把 命 令 行 分 成 命 令 词</td></tr><tr><td colspan=\"3\">展 开 文 件 通 配 (*、?、[abc] 等 等)</td></tr><tr><td colspan=\"3\">准 备 I/0 重 定 向 (&lt;、&gt;</td></tr><tr><td colspan=\"3\">运 行 命 令 !</td></tr><tr><td colspan=\"3\">显 示 当 前 Shell 可 见 的 全 局 变 量</td></tr><tr><td colspan=\"2\">export</td><td>[-p]</td></tr></table>","page_idx":9,"page_size":[595,841],"block_position":"9-4"},{"bbox":[88,507,505,600],"index":5,"angle":0,"type":"table_body","img_path":"/","id":"b78b57cc-c3cf-43f2-8810-34036c507513","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>定义 变量 值的 同时 声明 为 全局 变量 export &lt; 变量 名 1= 值 1&gt; [&lt; 变量 名 2= 值 2&gt; ...] 声 明 已 经 赋 值 的 某 个 ( 些 ) 局 部 变 量 为 全 局 变 量 export &lt; 变量 名 1&gt; [&lt; 变量 名 2&gt; ...] 声 明 已 经 赋 值 的 某 个 ( 些 ) 全 局 变 量 为 局 部 变 量 export -n &lt; 变量 名 1&gt; [&lt; 变量 名 2&gt; ...]</td></tr></table>","page_idx":9,"page_size":[595,841],"block_position":"9-5"},{"bbox":[88,635,154,654],"type":"title","angle":0,"index":6,"text":"# 变量概念","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":9,"id":"5c7dde17-8bad-49ea-9c1d-cd25a558002e","page_size":[595,841],"block_position":"9-6"},{"bbox":[86,691,509,751],"type":"text","angle":0,"index":7,"text":"Shell 变量就是计算机中用于记录一个值（不一定是数值，也可以是字符或字符串）的符号，而这些符号将用于不同的运算处理中。通常变量与值是一对一的关系，可以通过表达式读取它的值并赋值给其它变量，也可以直接指定数值赋值给任意变量。为了便于运算和处理大部分的编程语言会区分变量的类型，用于分别记录数值、字符或者字符串等等数据类型","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":9,"id":"92c05248-89ce-44b5-86f5-31096e21f1c0","page_size":[595,841],"block_position":"9-7"}],[{"bbox":[86,79,506,109],"type":"text","angle":0,"index":0,"text":"Shell 中的变量也基本如此，有不同类型（但不用专门指定类型名），可以参与运算，有作用域限定。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":10,"id":"dd0347d8-9b2b-4bff-9f76-ccf9cac0a8ae","page_size":[595,841],"block_position":"10-0"},{"bbox":[86,121,508,152],"type":"text","angle":0,"index":1,"text":"变量的作用域即变量的有效范围（比如一个函数中、一个源文件中或者全局范围），在该范围内只能有一个同名变量。一旦离开则该变量无效，如同不存在这个变量一般。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":10,"id":"7ac2921b-96b7-4f31-b1e5-305fc8ca13bd","page_size":[595,841],"block_position":"10-1"},{"bbox":[86,164,508,257],"type":"text","angle":0,"index":2,"text":"Shell 变 量 大 致 可 以 分 为 三 类内 部 变 量 ： 由 系 统 提 供 ， 用 户 只 能 使 用 不 能 修 改 。用 户 变 量 ： 由 用 户 建 立 和 修 改 ， 在 shell 脚 本 编 写 中 会 经 常 用 到 。环境变量：这些变量决定了用户工作的环境，它们不需要用户去定义，可以直接在 shell中 使 用 ， 其 中 某 些 变 量 用 户 可 以 修 改 。变量的操作","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":10,"id":"9d9c2bb5-e701-4c84-a016-24ea3b1c4029","page_size":[595,841],"block_position":"10-2"},{"bbox":[86,269,508,568],"index":3,"angle":0,"type":"table_body","img_path":"/","id":"72fe2639-a0fc-474f-a30b-41c06f0fe941","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>变</td><td>量</td><td></td><td>替</td><td></td><td>换</td><td></td><td>扩</td><td></td><td>展</td></tr><tr><td>变</td><td></td><td></td><td>量</td><td></td><td></td><td>测</td><td></td><td></td><td>试</td></tr><tr><td>变</td><td>量</td><td>的</td><td>字</td><td></td><td>符</td><td></td><td>串</td><td>操</td><td>作</td></tr><tr><td>变</td><td>量</td><td></td><td>的</td><td></td><td>间</td><td></td><td>接</td><td>引</td><td>用</td></tr><tr><td>变</td><td>量</td><td></td><td>的</td><td></td><td>数</td><td></td><td>值</td><td>计</td><td>算</td></tr><tr><td>$[expression]</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>$(expression))</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>expr</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>let</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>declare</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>-i</td></tr><tr><td>输</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>入</td></tr><tr><td>变</td><td></td><td></td><td>量</td><td></td><td></td><td>赋</td><td></td><td></td><td>值</td></tr><tr><td>name=value</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>readonly</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>从</td><td>标</td><td></td><td>准</td><td></td><td>输</td><td>入</td><td></td><td>读</td><td>取</td></tr><tr><td>read</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>输</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>出</td></tr><tr><td>echo</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>printf</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>","page_idx":10,"page_size":[595,841],"block_position":"10-3"},{"bbox":[88,594,154,608],"index":4,"angle":0,"type":"table_caption","text":"变量替换扩展","id":"c844b4b3-422f-4e2a-ab0f-f7449351e1be","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":10,"page_size":[595,841],"block_position":"10-4"},{"bbox":[86,634,595,753],"index":5,"angle":0,"type":"table_body","img_path":"/","id":"73fe0789-037f-4d18-9782-14707601ef59","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>Use Default Values</td><td>${var:-word}</td><td>若 var 存在且非空,则值为$var; 若 word, 但 var 的值不变。</td></tr><tr><td>Assign Default Values</td><td>${var:=word}</td><td>若 var 存在且非空,则值为$var; 若 word, 且 var 被赋值 word。</td></tr><tr><td></td><td></td><td></td></tr><tr><td>Display Error if Null or Unset</td><td>${var:?word}</td><td>若 var 存在且非空,则值为 $var; 若 v 息 word,并终止脚本。</td></tr><tr><td>Use Alternate Value</td><td>${var:+word}</td><td>若 var 存在且非空,则值为 word; 若变。</td></tr></table>","page_idx":10,"page_size":[595,841],"block_position":"10-5"}],[{"bbox":[86,76,595,243],"index":0,"angle":0,"type":"table_body","lines_deleted":true,"text":"","id":"73fe0789-037f-4d18-9782-14707601ef59","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"","page_idx":11,"page_size":[595,841],"block_position":"11-0"},{"bbox":[88,311,175,323],"index":1,"angle":0,"type":"table_caption","text":"字符串计数、截取","id":"7919734a-32ed-4ef3-8018-6d50c66e1137","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":11,"page_size":[595,841],"block_position":"11-1"},{"bbox":[87,323,595,581],"index":2,"angle":0,"type":"table_body","img_path":"/","id":"750912c6-dfd5-426b-b368-a8adbf0e65cf","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>${var}</td><td>返回字符串变量 var 的长度</td></tr><tr><td>${var:m}</td><td>返回${var}中从第 m 个字符到最后的部分</td></tr><tr><td>${var:m:len}</td><td>返回${var}中从第 m 个字符开始，长度为 len 的部分</td></tr><tr><td>${var#pattern}</td><td>删除${var}中开头部分与 pattern 匹配的最小部分</td></tr><tr><td>${var##pattern}</td><td>删除${var}中开头部分与 pattern 匹配的最大部分</td></tr><tr><td>${var%pattern}</td><td>删除${var}中结尾部分与 pattern 匹配的最小部分</td></tr><tr><td>${var%%pattern}</td><td>删除${var}中结尾部分与 pattern 匹配的最大部分</td></tr></table>","page_idx":11,"page_size":[595,841],"block_position":"11-2"},{"bbox":[88,592,143,605],"index":3,"angle":0,"type":"table_caption","text":"字符串替换","id":"60427c55-7945-4a91-9e78-ca6cac43f834","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":11,"page_size":[595,841],"block_position":"11-3"},{"bbox":[87,605,595,751],"index":4,"angle":0,"type":"table_body","img_path":"/","id":"3f90dace-56e7-442a-b63d-068105418ae6","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>${var/old/new}</td><td>用 new 替换${var}中第一次出现的 old</td></tr><tr><td>${var//old/new}</td><td>用 new 替换${var}中所有的 old(全局替换)</td></tr><tr><td>${var/#old/new}</td><td>用 new 替换${var}中开头部分与 old 匹配的部分</td></tr><tr><td>${var/%old/new}</td><td>用 new 替换${var}中结尾部分与 old 匹配的部分</td></tr></table>","page_idx":11,"page_size":[595,841],"block_position":"11-4"}],[{"bbox":[140,78,500,92],"type":"text","angle":0,"index":0,"text":"old 中 可 以 使 用 通 配 符 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"3e48145c-e1da-4a88-a7e0-5126c2ff6703","page_size":[595,841],"block_position":"12-0"},{"bbox":[140,94,505,123],"type":"text","angle":0,"index":1,"text":"（ 2 ） var 可 以 是 $@$ 或 * ， 表 示 对 每 个 位 置 参 数 进 行 替 换eval","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"3cd85744-e816-4e1c-868e-ca44cb048fed","page_size":[595,841],"block_position":"12-1"},{"bbox":[86,136,508,151],"type":"text","angle":0,"index":2,"text":"eval arg1 [arg2] .. [argN]","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"4cc0745d-98c1-491a-bcb7-28e87e7fd6b9","page_size":[595,841],"block_position":"12-2"},{"bbox":[88,153,506,167],"type":"text","angle":0,"index":3,"text":"listpage=\"ls -l | more\"","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"c05b9f0e-fc48-4bb6-be3d-ae188521db62","page_size":[595,841],"block_position":"12-3"},{"bbox":[88,169,506,182],"type":"text","angle":0,"index":4,"text":"eval $listpage","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"f4753c32-8041-43dd-b91c-44d17f2b490b","page_size":[595,841],"block_position":"12-4"},{"bbox":[86,211,507,224],"type":"text","angle":0,"index":5,"text":"eval newstr=\\$$str2","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"e6275f45-93c4-4159-8e40-0f014f28daff","page_size":[595,841],"block_position":"12-5"},{"bbox":[88,227,506,240],"type":"text","angle":0,"index":6,"text":"eval echo \\$${x}_URL","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"e7d81400-320d-4ae1-a709-8ebc6c4db98e","page_size":[595,841],"block_position":"12-6"},{"bbox":[86,269,506,283],"type":"text","angle":0,"index":7,"text":"对 参 数 进 行 两 次 扫 描 和 替 换","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"82062fe9-64d9-423d-8311-7592eec8d97b","page_size":[595,841],"block_position":"12-7"},{"bbox":[101,285,506,299],"type":"text","angle":0,"index":8,"text":"将 所 有 的 参 数 连 接 成 一 个 表 达 式 ， 并 计 算 或 执 行 该 表 达 式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"c0afc495-fc47-47ca-900b-9fd11edea2cf","page_size":[595,841],"block_position":"12-8"},{"bbox":[129,301,506,314],"type":"text","angle":0,"index":9,"text":"参 数 中 的 任 何 变 量 都 将 被 展 开","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"46dfba81-7a9f-432e-bfc2-31c9f2e0c3c6","page_size":[595,841],"block_position":"12-9"},{"bbox":[88,317,164,330],"type":"text","angle":0,"index":10,"text":"变量的间接引用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"b0abfb4a-70a2-4d5f-bf0d-30ee6869c564","page_size":[595,841],"block_position":"12-10"},{"bbox":[87,344,232,358],"type":"text","angle":0,"index":11,"text":"通过str2的值来引用str1的值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"8f511874-8d1f-4f3a-b870-7e9928935ff5","page_size":[595,841],"block_position":"12-11"},{"bbox":[86,371,508,386],"type":"text","angle":0,"index":12,"text":"str1=\"Hello World\"","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"f2bbca80-dc8a-491f-a46f-534bcc3c4964","page_size":[595,841],"block_position":"12-12"},{"bbox":[88,388,506,400],"type":"text","angle":0,"index":13,"text":"str2 $\\cdot ^ { = }$ str1","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"06dbf0e0-dcbe-4a0d-add0-5cc53df719cc","page_size":[595,841],"block_position":"12-13"},{"bbox":[88,404,506,416],"type":"text","angle":0,"index":14,"text":"echo $str2","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"ba0cfbd8-7c75-4844-9cb8-85208c69d570","page_size":[595,841],"block_position":"12-14"},{"bbox":[88,419,506,431],"type":"text","angle":0,"index":15,"text":"eval newstr=\\$$str2","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"77ecf718-6693-4b28-a476-773e5cace0da","page_size":[595,841],"block_position":"12-15"},{"bbox":[88,435,506,447],"type":"text","angle":0,"index":16,"text":"echo $newstr","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"1ebfcbd1-0e54-452e-b8a2-e292d9ae8063","page_size":[595,841],"block_position":"12-16"},{"bbox":[88,451,506,462],"type":"text","angle":0,"index":17,"text":"Hello World","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"f117d48c-796c-408c-add1-ace7b585a5a0","page_size":[595,841],"block_position":"12-17"},{"bbox":[88,466,101,478],"type":"text","angle":0,"index":18,"text":"或","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"cab17451-cc4c-41e9-a354-cbebb67a9349","page_size":[595,841],"block_position":"12-18"},{"bbox":[88,481,506,493],"type":"text","angle":0,"index":19,"text":"eval echo \\$$str2","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"e74370b2-2e58-45d2-9648-aad5b358e393","page_size":[595,841],"block_position":"12-19"},{"bbox":[88,497,506,509],"type":"text","angle":0,"index":20,"text":"Hello World","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"358d9da4-4f36-4acc-9793-6b1b77da8852","page_size":[595,841],"block_position":"12-20"},{"bbox":[88,513,506,525],"type":"text","angle":0,"index":21,"text":"＃ bash2.0 以 上 才 支 持","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"4d08d4d3-cebc-4251-be67-a4e695ff2555","page_size":[595,841],"block_position":"12-21"},{"bbox":[88,528,506,541],"type":"text","angle":0,"index":22,"text":"newstr=${!str2}","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"f5222075-da69-4be9-ab39-9bfab805229a","page_size":[595,841],"block_position":"12-22"},{"bbox":[88,544,506,556],"type":"text","angle":0,"index":23,"text":"echo $newstr","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"949606bb-5041-4929-9102-8d13b8cfc182","page_size":[595,841],"block_position":"12-23"},{"bbox":[88,560,506,571],"type":"text","angle":0,"index":24,"text":"Hello World","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"2926b769-f70a-4805-b04b-a4ef982fbae4","page_size":[595,841],"block_position":"12-24"},{"bbox":[88,576,101,587],"type":"text","angle":0,"index":25,"text":"或","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"0b92ee35-6f42-449b-8e61-d8dbd93887c1","page_size":[595,841],"block_position":"12-25"},{"bbox":[88,592,506,603],"type":"text","angle":0,"index":26,"text":"echo","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"1e13698e-8a83-48a2-8ecb-ab4c1a0a2d60","page_size":[595,841],"block_position":"12-26"},{"bbox":[88,607,506,618],"type":"text","angle":0,"index":27,"text":"Hello World","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"bb7e0b2b-72fd-4878-8950-ba138d25a872","page_size":[595,841],"block_position":"12-27"},{"bbox":[88,622,167,634],"type":"text","angle":0,"index":28,"text":"shell变量的分类","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"814ef928-f804-488e-adcc-348936c64c8d","page_size":[595,841],"block_position":"12-28"},{"bbox":[86,649,506,662],"type":"text","angle":0,"index":29,"text":"用 户 自 定 义 变 量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"2f0c343c-febd-48db-9a3d-2160e0e799da","page_size":[595,841],"block_position":"12-29"},{"bbox":[88,665,506,678],"type":"text","angle":0,"index":30,"text":"由 用 户 自 己 定 义 、 修 改 和 使 用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"85897e95-34c1-4c7a-87e2-54a7367f5173","page_size":[595,841],"block_position":"12-30"},{"bbox":[88,681,506,693],"type":"text","angle":0,"index":31,"text":"Shell 环 境 变 量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"38c8e385-9805-417f-8895-866fdd0602ea","page_size":[595,841],"block_position":"12-31"},{"bbox":[88,696,506,708],"type":"text","angle":0,"index":32,"text":"由 系 统 维 护 ， 用 于 设 置 用 户 的 Shell 工 作 环 境","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"9661d2dd-ec2d-4f70-962d-ab3dbefdec02","page_size":[595,841],"block_position":"12-32"},{"bbox":[88,711,506,724],"type":"text","angle":0,"index":33,"text":"只 有 少 数 的 变 量 用 户 可 以 修 改 其 值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"db105860-ecf3-4d93-98b0-663fd70870e2","page_size":[595,841],"block_position":"12-33"},{"bbox":[88,727,499,740],"type":"text","angle":0,"index":34,"text":"位 置 参 数 变 量 （ Positional Parameters ）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"8aab13d9-35c1-4323-b1c7-54e2d840f232","page_size":[595,841],"block_position":"12-34"},{"bbox":[86,743,506,756],"type":"text","angle":0,"index":35,"text":"通 过 命 令 行 给 程 序 传 递 执 行 参 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":12,"id":"4023b223-1021-40ea-ac48-5b5593c2d640","page_size":[595,841],"block_position":"12-35"}],[{"bbox":[86,77,508,155],"index":0,"angle":0,"type":"table_body","img_path":"/","id":"3fd38755-039a-44df-a406-ad6d584ca107","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td colspan=\"9\">可 用 shift 命 令 实 现 位 置 参 数 的 迁 移</td></tr><tr><td colspan=\"9\">专 用 参数 数 变 量 (Special Parameters)</td></tr><tr><td colspan=\"9\">Bash 预 定 义 的 特 殊 变 量</td></tr><tr><td colspan=\"9\">用 户 不 能 修 改 其 值</td></tr><tr><td colspan=\"9\">位置参数变量</td></tr></table>","page_idx":13,"page_size":[595,841],"block_position":"13-0"},{"bbox":[86,168,506,290],"index":1,"angle":0,"type":"table_body","img_path":"/","id":"dc7d15e4-12d1-4a11-814e-d1a20bf9f77c","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td colspan=\"2\">是 一 组 特 殊 的 内 置 变 量跟 在 脚 本 名 后 面 的 用 空 格 隔 开 的 每 个 字 符 串$1 表 示 第 1 个 参数 值 , ... , $9 表 示 第 9 个 参数 值${10} 表 示 第 10 个 参数 值, $\\{11\\} 表 示第 11 个 参数 值, ... ...位 置 参 数 的 用 途从 shell 命 令 / 脚 本 的 命 令 行 接 受 参数在 调 用 shell 函数 时 为 其 传 递 参数专用参数变量</td></tr></table>","page_idx":13,"page_size":[595,841],"block_position":"13-1"},{"bbox":[86,304,500,318],"type":"phonetic","angle":0,"index":2,"text":"$* 将所有位置参量看成一个字符串(以空格间隔)。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"364d3a3a-9d92-4167-b558-59c2288dfc71","page_size":[595,841],"block_position":"13-2"},{"bbox":[87,321,500,334],"type":"text","angle":0,"index":3,"text":"$@ 将 每 个 位 置 参 量 看 成 单 独 的 字 符 串 （ 以 空 格 间 隔 ） 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"e27f715a-40f0-4ecb-9f94-af9dfbee61c3","page_size":[595,841],"block_position":"13-3"},{"bbox":[96,336,499,350],"type":"text","angle":0,"index":4,"text":"“$*” 将 所 有 位 置 参 量 看 成 一 个 字 符 串 （ 以 $\\$ 105$ 间 隔 ） 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"5b59cddb-b737-4e49-8ebe-517fe3d821da","page_size":[595,841],"block_position":"13-4"},{"bbox":[96,352,499,365],"type":"text","angle":0,"index":5,"text":"$\" \\$ 0$ 将 每 个 位 置 参 量 看 成 单 独 的 字 符 串 （ 以 空 格 间 隔 ） 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"d2af9375-62f4-4576-a7ca-66f5b899eb90","page_size":[595,841],"block_position":"13-5"},{"bbox":[87,368,499,380],"type":"phonetic","angle":0,"index":6,"text":"$0 命令行上输入的 Shell 程序名。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"2821736d-8478-4750-b528-aa6f2aed5a2e","page_size":[595,841],"block_position":"13-6"},{"bbox":[87,383,499,396],"type":"text","angle":0,"index":7,"text":"$# 表 示 命 令 行 上 参 数 的 个 数 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"d9bc7577-837d-4b9c-94cf-7043ac72276f","page_size":[595,841],"block_position":"13-7"},{"bbox":[87,398,505,412],"type":"phonetic","angle":0,"index":8,"text":"进 程 状 态 相 关","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"d25ea1c3-89a8-4840-bfa5-6dbbb52b2836","page_size":[595,841],"block_position":"13-8"},{"bbox":[87,414,505,428],"type":"text","angle":0,"index":9,"text":"$\\$ 7$ 表 示 上 一 条 命 令 执 行 后 的 返 回 值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"c6e66be0-9f83-4e6e-acc9-cab0a479dbd5","page_size":[595,841],"block_position":"13-9"},{"bbox":[87,429,505,443],"type":"phonetic","angle":0,"index":10,"text":"$$ 当前 进程 的 进程号","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"4df4907c-c34d-4160-bf00-67ba75eb6586","page_size":[595,841],"block_position":"13-10"},{"bbox":[87,445,505,459],"type":"text","angle":0,"index":11,"text":"$\\$ !$ 显 示 运 行 在 后 台 的 最 后 一 个 作 业 的 PID","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"4815b94f-9bb0-4e7a-8204-a3a1207cc4ee","page_size":[595,841],"block_position":"13-11"},{"bbox":[87,460,505,474],"type":"phonetic","angle":0,"index":12,"text":"$_ 在此之前执行的命令或脚本的最后一个参数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"8e74a87b-588e-4304-85b6-49f573a383a0","page_size":[595,841],"block_position":"13-12"},{"bbox":[87,476,135,489],"type":"text","angle":0,"index":13,"text":"shift 命令","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"04323205-4594-4bff-b0e2-2a5b32ab35e5","page_size":[595,841],"block_position":"13-13"},{"bbox":[87,504,126,518],"type":"title","angle":0,"index":14,"text":"# Shift[n]","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":13,"id":"eb95a7f4-2524-42c6-acfe-100c43933895","page_size":[595,841],"block_position":"13-14"},{"bbox":[86,531,505,669],"index":15,"angle":0,"type":"table_body","img_path":"/","id":"17843e70-deb9-48ac-9a1a-0948b3a80a53","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td colspan=\"3\">将位置参量列表依次左移n次，缺省为左移一次</td></tr><tr><td colspan=\"3\">一旦位置参量列表被移动，最左端的那个参数就会从列表中删除</td></tr><tr><td colspan=\"3\">经常与循环结构语句一起使用，以便遍历每一个位置参数</td></tr><tr><td colspan=\"3\">$? : 返回上一条语句或脚本执行的状态</td></tr><tr><td>0</td><td>:</td><td>成功</td></tr><tr><td>1</td><td>-</td><td>255</td></tr><tr><td>exit</td><td>命</td><td>命</td></tr><tr><td>exit</td><td colspan=\"2\">命令用于退出脚本或当前 Shell</td></tr><tr><td>exit</td><td></td><td>n</td></tr></table>","page_idx":13,"page_size":[595,841],"block_position":"13-15"},{"bbox":[87,672,505,686],"type":"phonetic","angle":0,"index":16,"text":"n 是一 个从 0 到 255 的整数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"b9e4a569-2900-43c3-bdb2-6ed73ba76523","page_size":[595,841],"block_position":"13-16"},{"bbox":[87,687,505,701],"type":"text","angle":0,"index":17,"text":"0 表 示 成 功 退 出 ， 非 零 表 示 遇 到 某 种 失 败","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"586c011c-96b9-413d-9d09-ebac762fece8","page_size":[595,841],"block_position":"13-17"},{"bbox":[87,703,505,716],"type":"phonetic","angle":0,"index":18,"text":"返回 值 被 保存 在 状态 变 量 $? 中","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":13,"id":"d34f84f4-2d44-4de6-a166-94e519152761","page_size":[595,841],"block_position":"13-18"},{"bbox":[87,747,96,758],"type":"page_number","angle":0,"index":1000018,"text":"0","color":{"line":"rgba(164, 164, 164, 1)","fill":"rgba(164, 164, 164, 1)"},"page_idx":13,"is_discarded":true,"id":"f041d33a-8a37-4ad5-8bc7-3a58dbbe5d97","page_size":[595,841],"block_position":"13-19"}],[{"bbox":[87,77,508,201],"index":0,"angle":0,"type":"table_body","img_path":"/","id":"bb25fc71-fc25-49c3-b69d-6d152304e584","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>执</td><td></td><td>行</td><td></td><td></td><td>正</td><td></td><td></td><td>确</td></tr><tr><td>1</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>:</td></tr><tr><td>通</td><td></td><td>用</td><td></td><td></td><td>错</td><td></td><td></td><td>误</td></tr><tr><td>126</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>:</td></tr><tr><td>命</td><td>令</td><td>或</td><td>脚</td><td>本</td><td>没有</td><td>执行</td><td>行权</td><td>限</td></tr><tr><td>127</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>:</td></tr><tr><td>命</td><td></td><td>令</td><td></td><td>没</td><td></td><td>找</td><td></td><td>到</td></tr><tr><td>read</td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr></table>","page_idx":14,"page_size":[595,841],"block_position":"14-0"},{"bbox":[87,214,506,339],"index":1,"angle":0,"type":"table_body","img_path":"/","id":"8c147f2b-7bed-42da-89ad-8a0fe49913f4","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td colspan=\"3\">从键盘输入内容为变量赋值</td></tr><tr><td colspan=\"3\">read [-p]&quot; 信息&quot;] [var1 var2 ...]</td></tr><tr><td colspan=\"3\">若省略变量名,则将输入的内容存入REPLY变量</td></tr><tr><td colspan=\"3\">结合不同引号为变量赋值</td></tr><tr><td colspan=\"3\">双引号&quot;：允许通过$符号引用其他变量值</td></tr><tr><td colspan=\"3\">单引号&#x27;：禁止引用其他变量值,$视为普通字符</td></tr><tr><td colspan=\"3\">反撇号、`、`：将命令执行的结果输出给变量</td></tr><tr><td colspan=\"3\">只读变量</td></tr></table>","page_idx":14,"page_size":[595,841],"block_position":"14-1"},{"bbox":[88,352,507,460],"index":2,"angle":0,"type":"table_body","img_path":"/","id":"a8f13719-fa76-4308-a04d-97a4be93d18a","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td colspan=\"2\">readonly</td><td>variable</td></tr><tr><td>使</td><td>用</td><td>echo</td></tr><tr><td colspan=\"3\">多行内容中不能出现双引号，否则 echo 提前结束</td></tr><tr><td colspan=\"3\">若确实需要使用双引号，需使用转义字符：\\”</td></tr><tr><td>使</td><td>用</td><td>here file</td></tr><tr><td colspan=\"3\">.END_可以是任意字符串，只要上下一致即可多行内容中不能出现内容为.END_开始的行，否则 cat 提前结束</td></tr></table>","page_idx":14,"page_size":[595,841],"block_position":"14-2"},{"bbox":[86,495,182,514],"type":"title","angle":0,"index":3,"text":"# 2.2 变量声明","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":14,"id":"eb535ffe-99f5-4e4f-9c02-ecd0a056657d","page_size":[595,841],"block_position":"14-3"},{"bbox":[86,578,313,592],"type":"text","angle":0,"index":4,"text":"这里简单举例说明在 Shell 中如何创建一个变量：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":14,"id":"116d4484-1565-460b-9e17-03f15f44f62a","page_size":[595,841],"block_position":"14-4"},{"bbox":[86,606,318,620],"type":"text","angle":0,"index":5,"text":"使用 declare 命令创建一个变量名为 tmp 的变量：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":14,"id":"46e3e068-0358-4047-9a9e-a2a490daca5e","page_size":[595,841],"block_position":"14-5"},{"bbox":[86,634,149,647],"type":"text","angle":0,"index":6,"text":"declare tmp","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":14,"id":"4db332fb-1c1c-417b-8cbb-280a451791e3","page_size":[595,841],"block_position":"14-6"},{"bbox":[86,661,506,690],"type":"text","angle":0,"index":7,"text":"其实也可以不用 declare 预声明一个变量，直接即用即创建，这里只是告诉你 declare 的作用，这在创建其它指定类型的变量（如数组）时会用到。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":14,"id":"0869cbba-6bf4-4cd0-8a43-663ab70ca21e","page_size":[595,841],"block_position":"14-7"}],[{"bbox":[86,84,166,103],"type":"title","angle":0,"index":0,"text":"# 2.3 变量名","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":15,"id":"9bd88520-a420-4fdf-9fd2-4f61480e3134","page_size":[595,841],"block_position":"15-0"},{"bbox":[86,140,232,153],"type":"text","angle":0,"index":1,"text":"变量名的命名须遵循如下规则：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"aee253d6-3536-4825-b10d-08e29edbd7b7","page_size":[595,841],"block_position":"15-1"},{"bbox":[104,168,287,180],"type":"text","angle":0,"index":2,"text":"首个字符必须为字母（a-z，A-Z）。","id":"4044b8ff-a386-4bee-89ed-ef18f8ce48c2","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"page_size":[595,841],"block_position":"15-2"},{"bbox":[104,195,313,208],"type":"text","angle":0,"index":3,"text":" 中间不能有空格，可以使用下划线（_）。","id":"7b0ea926-419e-4d9b-b09f-1c2d34775f56","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"page_size":[595,841],"block_position":"15-3"},{"bbox":[104,222,214,235],"type":"text","angle":0,"index":4,"text":"不能使用标点符号。","id":"3b93c5c2-6c16-4471-bec4-378e0dac8079","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"page_size":[595,841],"block_position":"15-4"},{"bbox":[104,250,417,264],"type":"text","angle":0,"index":5,"text":" 不能使用 bash 里的关键字（可用 help 命令查看保留关键字）。","id":"683db80c-cff8-4f25-9f73-107fd9ecde26","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"page_size":[595,841],"block_position":"15-5"},{"bbox":[86,285,182,303],"type":"title","angle":0,"index":7,"text":"# 2.4 变量赋值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":15,"id":"c7740dca-c774-4099-8eaa-5e1ec2e80cfe","page_size":[595,841],"block_position":"15-6"},{"bbox":[86,339,500,354],"type":"text","angle":0,"index":8,"text":"变 量 赋 值 （ 定 义 变 量 ）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"763dc5e1-d07e-4b68-a9f7-f698223701e9","page_size":[595,841],"block_position":"15-7"},{"bbox":[87,356,168,368],"type":"text","angle":0,"index":9,"text":"varName=Value","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"dc5477c0-ca8b-4390-a4d2-d5c42ca4cbf6","page_size":[595,841],"block_position":"15-8"},{"bbox":[87,371,123,384],"type":"text","angle":0,"index":10,"text":"export","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"2ff509df-aecb-4940-9e4a-701a68bedd5e","page_size":[595,841],"block_position":"15-9"},{"bbox":[424,371,505,383],"type":"text","angle":0,"index":11,"text":"varName=Value","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"feec43e1-f6b0-40ef-8526-1330a605200b","page_size":[595,841],"block_position":"15-10"},{"bbox":[87,386,292,399],"type":"text","angle":0,"index":12,"text":"引 用 变 量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"542872ac-a9f4-47c7-b779-37d071429057","page_size":[595,841],"block_position":"15-11"},{"bbox":[452,387,505,398],"type":"text","angle":0,"index":13,"text":"$varName","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"cccf483b-4b1b-4fa2-9ba4-4cea23e60a2e","page_size":[595,841],"block_position":"15-12"},{"bbox":[86,402,499,415],"type":"text","angle":0,"index":14,"text":"一 般 地 ， 所 有 的 Shell 变 量 都 是 字 符 串 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"7bfae293-d32c-495b-8031-d4851613b8e4","page_size":[595,841],"block_position":"15-13"},{"bbox":[86,417,499,431],"type":"text","angle":0,"index":15,"text":"当 变 量 的 值 仅 仅 包 含 数 字 时 才 允 许 进 行 数 值 计 算 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"2b8397fd-77aa-4c4d-8928-fc3a1bb0c69f","page_size":[595,841],"block_position":"15-14"},{"bbox":[86,433,504,463],"type":"text","angle":0,"index":16,"text":"在较新的 bash 中，可是使用 declare 或 typeset 命令声明变量及其属性，但一般不需要声明。而且为了使脚本兼容于不同的 shell，在没有必要的情况下尽量不使用变量声明。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"e0bf9b89-e5a3-44fd-a0be-1d91a1824e77","page_size":[595,841],"block_position":"15-15"},{"bbox":[86,507,386,521],"type":"text","angle":0,"index":17,"text":"变量赋值时，变量名不加美元符号（$，PHP 语言中变量需要）。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"bea036af-f03a-4d2f-bab3-52dd75168c12","page_size":[595,841],"block_position":"15-16"},{"bbox":[86,535,338,549],"type":"text","angle":0,"index":18,"text":"使用 $=$ 号赋值运算符，将变量 tmp 赋值为 shiyanlou。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"338c8d0d-b29a-48be-88ae-1659c70c621b","page_size":[595,841],"block_position":"15-17"},{"bbox":[86,563,173,575],"type":"text","angle":0,"index":19,"text":"# 正确的赋值方法","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"a39bc704-baff-4cb8-b624-1e1de2c8f844","page_size":[595,841],"block_position":"15-18"},{"bbox":[87,591,164,603],"type":"text","angle":0,"index":20,"text":"tmp=shiyanlou","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"09fd4036-53e5-4b31-b2e8-a1ad3f81d425","page_size":[595,841],"block_position":"15-19"},{"bbox":[87,618,173,630],"type":"text","angle":0,"index":21,"text":"# 错误的赋值方法","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"0594f3dd-0172-4e61-bf32-0d95004803fd","page_size":[595,841],"block_position":"15-20"},{"bbox":[87,646,169,658],"type":"text","angle":0,"index":22,"text":"tmp $=$ shiyanlou","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"4622b72b-ced9-4ce0-bd98-7edcfd4707bc","page_size":[595,841],"block_position":"15-21"},{"bbox":[86,673,255,686],"type":"text","angle":0,"index":23,"text":"注意:变量名和等号之间不能有空格。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"393a3f50-e05e-4fed-88f2-9ca9b9a94841","page_size":[595,841],"block_position":"15-22"},{"bbox":[86,701,355,714],"type":"text","angle":0,"index":24,"text":"除了直接赋值，还可以用语句给变量赋值，如for 循环中：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"5df8a0b8-44d6-4a70-970a-b9fc23c59893","page_size":[595,841],"block_position":"15-23"},{"bbox":[87,728,172,740],"type":"text","angle":0,"index":25,"text":"for file in `ls /etc`","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":15,"id":"66ca5803-aebe-4ee9-945e-a0ce105e4664","page_size":[595,841],"block_position":"15-24"}],[{"bbox":[88,113,182,132],"type":"title","angle":0,"index":0,"text":"# 2.5 变量取值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":16,"id":"84af0340-cc20-4bde-b320-d8255dc8032c","page_size":[595,841],"block_position":"16-0"},{"bbox":[86,169,400,184],"type":"text","angle":0,"index":1,"text":"变量的名字就是变量保存值的地方。引用变量的值就叫做变量取值。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"3b14a215-80ee-4f47-8c23-2b61e1410442","page_size":[595,841],"block_position":"16-1"},{"bbox":[86,195,505,226],"type":"text","angle":0,"index":2,"text":"如果 variable 是一个变量的名字，那么 $variable 就是引用这个变量的值，即这变量所包含的数据。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"fd72aa55-de61-472b-b0ed-2239f85014de","page_size":[595,841],"block_position":"16-2"},{"bbox":[86,239,505,269],"type":"text","angle":0,"index":3,"text":"$variable 事实上只是 $\\$ 1$ {variable} 的简写形式。在某些上下文中 $variable 可能会引起错误，这时候就需要用 ${variable} 了。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"65ea5fbc-04bd-417d-98a1-d32622fc726c","page_size":[595,841],"block_position":"16-3"},{"bbox":[86,282,505,312],"type":"text","angle":0,"index":4,"text":"读取变量的值，使用 echo 命令和 $\\$ 9$ 符号（ $\\$ 5$ 符号用于表示引用一个变量的值，初学者经常忘记输入）：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"d8782370-5d71-4a0d-a8b9-9772ba798c35","page_size":[595,841],"block_position":"16-4"},{"bbox":[87,326,145,341],"type":"text","angle":0,"index":5,"text":"echo $tmp","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"3ce3c59b-8606-4351-a76d-df3357404bfd","page_size":[595,841],"block_position":"16-5"},{"bbox":[87,353,196,368],"type":"text","angle":0,"index":6,"text":"myname $=$ \"shiyanlou\"","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"9452b557-2f04-409c-9b5f-883dd8521f19","page_size":[595,841],"block_position":"16-6"},{"bbox":[88,380,167,395],"type":"text","angle":0,"index":7,"text":"echo $myname","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"b0ffa99c-0790-427f-b2b3-463e3bd79cb2","page_size":[595,841],"block_position":"16-7"},{"bbox":[88,408,174,422],"type":"text","angle":0,"index":8,"text":"echo ${myname}","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"cc4f0bc6-bcef-495d-9d68-5e4b3376346d","page_size":[595,841],"block_position":"16-8"},{"bbox":[88,436,201,449],"type":"text","angle":0,"index":9,"text":"echo ${myname}Good","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"384f17e0-af5a-4b36-abb2-86432f4e136e","page_size":[595,841],"block_position":"16-9"},{"bbox":[88,464,193,476],"type":"text","angle":0,"index":10,"text":"echo $mynameGood","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"33b2ca38-0a2b-4676-80e2-1b7b0f88e929","page_size":[595,841],"block_position":"16-10"},{"bbox":[88,491,173,504],"type":"text","angle":0,"index":11,"text":"myname $=$ \"miao\"","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"f0672992-050c-48a7-bfb3-0dd91b05d6fc","page_size":[595,841],"block_position":"16-11"},{"bbox":[88,518,174,532],"type":"text","angle":0,"index":12,"text":"echo ${myname}","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"8f4449d4-c747-41df-8fe2-1b425c8b367b","page_size":[595,841],"block_position":"16-12"},{"bbox":[86,574,504,602],"type":"text","angle":0,"index":13,"text":"使用readonly 命令可以将变量定义为只读变量，只读变量的值不能被改变。 下面的例子尝试更改只读变量，结果报错：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"8c444ad4-8e21-4910-8631-2469a038b78a","page_size":[595,841],"block_position":"16-13"},{"bbox":[88,617,147,629],"type":"text","angle":0,"index":14,"text":"#!/bin/bash","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"66ba1b0f-1cf5-4c01-bab0-c0c4d0596ebc","page_size":[595,841],"block_position":"16-14"},{"bbox":[88,645,264,658],"type":"text","angle":0,"index":15,"text":"myUrl=\"http://www.shiyanlou.com\"","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"f2bf3b0e-a02a-4e94-81e8-8ff44e056843","page_size":[595,841],"block_position":"16-15"},{"bbox":[88,672,166,686],"type":"text","angle":0,"index":16,"text":"readonly myUrl","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"a11fd881-77bb-4326-93c9-92377c6d6a4e","page_size":[595,841],"block_position":"16-16"},{"bbox":[88,700,256,714],"type":"text","angle":0,"index":17,"text":"myUrl=http://www.shiyanlou.com","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"89c8958d-0ea7-4a45-91f2-1fa7e5f79148","page_size":[595,841],"block_position":"16-17"},{"bbox":[88,727,206,740],"type":"text","angle":0,"index":18,"text":"变量的查询、显示和取消","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":16,"id":"afa33481-58a3-4064-981e-14954b4ece0e","page_size":[595,841],"block_position":"16-18"}],[{"bbox":[86,77,508,186],"index":0,"angle":0,"type":"table_body","img_path":"/","id":"ecbb34fd-38c8-4142-af15-e58048b12724","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td colspan=\"3\">显示当前已经定义的所有变量</td></tr><tr><td colspan=\"3\">所有有环境变量：env</td></tr><tr><td colspan=\"3\">所有变量和函数（包括环境变量）：set</td></tr><tr><td colspan=\"3\">显示某些个变量的值</td></tr><tr><td>echo $NAME1</td><td>[$NAME2]</td><td>......]</td></tr><tr><td colspan=\"3\">取消变量的声明或赋值</td></tr><tr><td>unset</td><td></td><td>&lt;NAME&gt;</td></tr></table>","page_idx":17,"page_size":[595,841],"block_position":"17-0"},{"bbox":[87,215,255,229],"type":"title","angle":0,"index":1,"text":"# 1. 子进程（Child Process）的本质","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":17,"id":"2bde6c50-2703-4f14-b916-74c46403b7bb","page_size":[595,841],"block_position":"17-1"},{"bbox":[104,243,493,257],"type":"text","angle":0,"index":2,"text":" 当你在 Shell 中运行 bash -c 'command' 时，会启动一个 全新的子 Shell 进程。","id":"19bb25f8-6ee1-4469-b765-bbc0f0a8a2bd","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":17,"page_size":[595,841],"block_position":"17-2"},{"bbox":[104,270,504,300],"type":"text","angle":0,"index":3,"text":"子进程会继承父进程的 环境变量（export 导出的变量），但 不会继承父进程的私有变量。","id":"4bd51d02-05d7-425f-b756-f10bc775d5ab","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":17,"page_size":[595,841],"block_position":"17-3"},{"bbox":[87,313,112,327],"type":"text","angle":0,"index":5,"text":"引用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":17,"id":"100d8c89-0498-42a9-8a6d-cec402587a08","page_size":[595,841],"block_position":"17-4"},{"bbox":[86,340,504,432],"index":6,"angle":0,"type":"table_body","img_path":"/","id":"b219ef0e-a777-40b9-83a3-b03b8a7eb112","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td colspan=\"11\">在bash中，有些字符具有特殊含义，如果需要忽略这些字符的特殊含义，就必须使用引用</td></tr><tr><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td></tr><tr><td>引用</td><td>可以</td><td>通过</td><td>下</td><td>面</td><td>三</td><td>种</td><td>方</td><td>式</td><td>实</td><td>现</td></tr><tr><td></td><td>使</td><td>用</td><td>转</td><td>义</td><td></td><td>字</td><td>符</td><td>:</td><td>\\</td><td></td></tr><tr><td></td><td>使</td><td>用</td><td>单</td><td>引</td><td>号</td><td>:</td><td>&#x27;</td><td></td><td>&#x27;</td><td></td></tr><tr><td></td><td>使</td><td>用</td><td>双</td><td>引</td><td>号</td><td>:</td><td>“</td><td></td><td>”</td><td></td></tr></table>","page_idx":17,"page_size":[595,841],"block_position":"17-5"},{"bbox":[86,435,440,449],"type":"text","angle":0,"index":7,"text":"转义字符的引用方法就是直接在字符前加反斜杠。例：\\$，\\‘，\\“，\\\\，\\ ，\\!","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":17,"id":"bd4f6162-908d-4a37-9082-65b02a5f71fc","page_size":[595,841],"block_position":"17-6"},{"bbox":[86,461,505,523],"index":8,"angle":0,"type":"table_body","img_path":"/","id":"ccdb7e52-a3bb-4203-b976-d1c43f190771","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>强</td><td colspan=\"3\">引</td><td>用</td></tr><tr><td>单</td><td>引</td><td>号</td><td>对</td><td>是 强 引 用</td></tr><tr><td colspan=\"5\">单引号对中的字符都将作为普通字符,但不允许出现另外的单引号。</td></tr><tr><td colspan=\"5\">弱引用</td></tr></table>","page_idx":17,"page_size":[595,841],"block_position":"17-7"},{"bbox":[87,525,174,538],"type":"text","angle":0,"index":9,"text":"双引号对是弱引用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":17,"id":"c9acc491-2f42-4b0f-a499-5b48d6520a87","page_size":[595,841],"block_position":"17-8"},{"bbox":[86,539,505,616],"index":10,"angle":0,"type":"table_body","img_path":"/","id":"fb94f2f9-189c-41a7-8622-865d4bcc3167","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td colspan=\"3\">双引号对中的部分字符仍保留特殊含义</td></tr><tr><td>$（ 美元 符 号）</td><td>-</td><td>变量 扩展</td></tr><tr><td>（ 反 引 号）</td><td>-</td><td>命 令 替 换</td></tr><tr><td>（ 反 斜 线）</td><td>-</td><td>禁止 单个 字符 扩展</td></tr><tr><td>！（ 叹 号）</td><td>-</td><td>历史 命 令 替 换</td></tr></table>","page_idx":17,"page_size":[595,841],"block_position":"17-9"},{"bbox":[86,652,181,671],"type":"title","angle":0,"index":11,"text":"# 4.1 环境变量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":17,"id":"8c477973-262d-4c51-97aa-7770f8e76dd5","page_size":[595,841],"block_position":"17-10"},{"bbox":[86,708,505,753],"type":"text","angle":0,"index":12,"text":"简单理解了变量的概念，就很容易理解环境变量了。环境变量的作用域比自定义变量的要大，如Shell 的环境变量作用于自身和它的子进程。在所有的 UNIX 和类UNIX 系统中，每个进程都有其各自的环境变量设置，且默认情况下，当一个进程被创建时，除了创建过程","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":17,"id":"a931c3bd-8193-4778-a7c5-1c8e994df42f","page_size":[595,841],"block_position":"17-11"}],[{"bbox":[86,79,505,109],"type":"text","angle":0,"index":0,"text":"中明确指定的话，它将继承其父进程的绝大部分环境设置。Shell 程序也作为一个进程运行在操作系统之上，而我们在 Shell 中运行的大部分命令都将以 Shell 的子进程的方式运行。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":18,"id":"2930582e-0a0b-492a-b95a-6e4d26d0eb67","page_size":[595,841],"block_position":"18-0"},{"bbox":[86,121,264,135],"type":"text","angle":0,"index":1,"text":"通常我们会涉及到的变量类型有三种：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":18,"id":"dddf68a4-a1ca-4f2d-9c44-9cfc7b22ce22","page_size":[595,841],"block_position":"18-1"},{"bbox":[104,149,504,178],"type":"text","angle":0,"index":2,"text":"当前 Shell 进程私有用户自定义变量，如上面我们创建的 tmp 变量，只在当前Shell 中有效。","id":"47780810-e86f-4c2f-804d-83c50145259b","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":18,"page_size":[595,841],"block_position":"18-2"},{"bbox":[105,193,230,206],"type":"text","angle":0,"index":3,"text":" Shell 本身内建的变量。","id":"ba671519-a8e0-438e-a561-866881ca39fb","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":18,"page_size":[595,841],"block_position":"18-3"},{"bbox":[105,221,267,233],"type":"text","angle":0,"index":4,"text":" 从自定义变量导出的环境变量。","id":"cf9d17c4-3ebe-4110-9f96-e66d9fcab663","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":18,"page_size":[595,841],"block_position":"18-4"},{"bbox":[86,248,506,276],"type":"text","angle":0,"index":6,"text":"也有三个与上述三种环境变量相关的命令：set，env，export。这三个命令很相似，都是用于打印环境变量信息，区别在于涉及的变量范围不同。详见下表：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":18,"id":"f40638c7-5002-4009-9ded-069b4ff05531","page_size":[595,841],"block_position":"18-5"},{"bbox":[87,277,454,475],"index":7,"angle":0,"type":"table_body","img_path":"/","id":"e66e2ae8-d496-4b8a-a43f-059c6fffc3ac","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>命令</td><td>说明</td></tr><tr><td>set</td><td>显示当前 Shell 所有变量，包括其内建环境变量（与 Shell 外观等相关），用户自定义变量及导出的环境变量。</td></tr><tr><td>env</td><td>显示与当前用户相关的环境变量，还可以让命令在指定环境中运行。</td></tr><tr><td>export</td><td>显示从 Shell 中导出成环境变量的变量，也能通过它将自定义变量导出为环境变量。</td></tr></table>","page_idx":18,"page_size":[595,841],"block_position":"18-6"},{"bbox":[86,487,246,501],"type":"text","angle":0,"index":8,"text":"vimdiff env.txt export.txt set.txt","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":18,"id":"75d8816c-0d6c-436c-b77e-ba14f0bd0f4f","page_size":[595,841],"block_position":"18-7"},{"bbox":[86,543,505,571],"type":"text","angle":0,"index":9,"text":"使用vimdiff 工具比较导出的几个文件的内容，退出 vimdiff 需要按下 Esc 后输入 :q 即可退出。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":18,"id":"7601e4ab-aaca-4027-93b6-1304a739a09e","page_size":[595,841],"block_position":"18-8"},{"bbox":[86,586,506,647],"type":"text","angle":0,"index":10,"text":"关于哪些变量是环境变量，可以简单地理解成在当前进程的子进程有效则为环境变量，否则不是（有些人也将所有变量统称为环境变量，只是以全局环境变量和局部环境变量进行区分，我们只要理解它们的实质区别即可）。我们这里用 export 命令来体会一下，先在Shell 中设置一个变量 temp=shiyanlou，然后再新创建一个子 Shell 查看 temp 变量的值：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":18,"id":"1df31800-648a-4b76-b75d-e6a33166cba9","page_size":[595,841],"block_position":"18-9"},{"bbox":[86,688,133,701],"type":"title","angle":0,"index":11,"text":"# 环境变量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":18,"id":"d5d0edf3-e636-40c2-9b9c-27eb62b06c02","page_size":[595,841],"block_position":"18-10"},{"bbox":[86,743,500,756],"type":"text","angle":0,"index":12,"text":"环 境 变 量 定 义 Shell 的 运 行 环 境 ， 保 证 Shell 命 令 的 正 确 执 行 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":18,"id":"79648169-9ace-4ccd-95a9-0223da80c876","page_size":[595,841],"block_position":"18-11"}],[{"bbox":[86,79,499,109],"type":"text","angle":0,"index":0,"text":"Shell 用环境变量来 确 定 查找路 径 、 注册目 录 、终端类型 、终端名 称 、 用 户 名 等 。所有环境变量都是全局变量（即可以传递给 Shell 的子进程），并可以由用户重新设置。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":19,"id":"8744ef36-00eb-4ad7-afd4-4f8640ce42ac","page_size":[595,841],"block_position":"19-0"},{"bbox":[86,122,594,587],"index":1,"angle":0,"type":"table_body","img_path":"/","id":"5557605d-8aa0-4558-bf02-fb2e3550926f","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>变量名</td><td>含义</td></tr><tr><td>HOME</td><td>用户主目录</td></tr><tr><td>LOGNAME</td><td>登录名</td></tr><tr><td>USER</td><td>用户名，与登录名相同</td></tr><tr><td>PWD</td><td>当前目录/工作目录名</td></tr><tr><td>MAIL</td><td>用户的邮箱路径名</td></tr><tr><td>HOSTNAME</td><td>计算机的主机名</td></tr><tr><td>INPUTRC</td><td>默认的键盘映像</td></tr><tr><td>SHELL</td><td>用户所使用的 shell 的路径名</td></tr><tr><td>LANG</td><td>默认语言</td></tr><tr><td>HISTSIZE</td><td>history 所能记住的命令的最多个数</td></tr><tr><td>PATH</td><td>shell 查找用户输入命令的路径(目录列表)</td></tr><tr><td>PS1、PS2</td><td>shell 一级、二级命令提示符</td></tr></table>","page_idx":19,"page_size":[595,841],"block_position":"19-1"},{"bbox":[86,628,399,641],"type":"text","angle":0,"index":2,"text":"注意：为了与普通变量区分，通常我们习惯将环境变量名设为大写。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":19,"id":"f9b209f6-1883-4bd1-8a7f-731dde6376b9","page_size":[595,841],"block_position":"19-2"},{"bbox":[86,655,151,667],"type":"title","angle":0,"index":3,"text":"# 4.2 变量时效","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":19,"id":"c95e59e8-af6b-4570-8a8c-db6bbc79ae0e","page_size":[595,841],"block_position":"19-3"},{"bbox":[86,682,504,711],"type":"text","angle":0,"index":4,"text":"当关机后，或者关闭当前的 shell 之后，环境变量就失效了。怎样才能让环境变量永久生效呢？","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":19,"id":"193dd822-5a20-4083-b8c0-719b407f87d9","page_size":[595,841],"block_position":"19-4"},{"bbox":[86,726,324,739],"type":"text","angle":0,"index":5,"text":"按变量的生存周期来划分，Linux 变量可分为两类：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":19,"id":"b167d0d4-d3ea-41b7-8106-c75defc46c21","page_size":[595,841],"block_position":"19-5"}],[{"bbox":[105,79,330,91],"type":"text","angle":0,"index":0,"text":"1. 永久的：需要修改配置文件，变量永久生效；","id":"c9edf1d5-1a1b-4866-97bc-778c3d8de8e8","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":20,"page_size":[595,841],"block_position":"20-0"},{"bbox":[105,106,426,119],"type":"text","angle":0,"index":1,"text":"2. 临时的：使用 export 命令行声明即可，变量在关闭 shell 时失效。","id":"cf110f13-3f14-4158-9d4d-c04dc50fa40d","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":20,"page_size":[595,841],"block_position":"20-1"},{"bbox":[86,134,504,163],"type":"text","angle":0,"index":3,"text":"这里介绍两个重要文件 /etc/bashrc（有的 Linux 没有这个文件） 和 /etc/profile ，它们分别存放的是 shell 变量和环境变量。还有要注意区别的是每个用户目录下的一个隐藏文件：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":20,"id":"60ae6d7d-8b6f-4e10-8227-d0ec5a0895c7","page_size":[595,841],"block_position":"20-2"},{"bbox":[86,177,505,237],"type":"text","angle":0,"index":4,"text":"这个 .profile 只对当前用户永久生效。因为它保存在当前用户的 Home 目录下，当切换用户时，工作目录可能一并被切换到对应的目录中，这个文件就无法生效。而写在 /etc/profile 里面的是对所有用户永久生效，所以如果想要添加一个永久生效的环境变量，只需要打开 /etc/profile，在最后加上要添加的环境变量。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":20,"id":"2ebb825f-9616-4813-bcce-5da54966c563","page_size":[595,841],"block_position":"20-3"},{"bbox":[86,258,193,276],"type":"title","angle":0,"index":5,"text":"# 4.3 PATH 变量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":20,"id":"70b29e9e-c9cb-4a6f-8fd3-9cd8c83170d4","page_size":[595,841],"block_position":"20-4"},{"bbox":[86,313,504,373],"type":"text","angle":0,"index":6,"text":"你可能很早之前就有疑问，我们在 Shell 中输入一个命令，Shell 是怎么知道去哪找到这个命令然后执行的呢？这是通过环境变量 PATH 来进行搜索的，熟悉 Windows 的用户可能知道 Windows 中的也是有这么一个 PATH 环境变量。这个 PATH 里面就保存了 Shell 中执行的命令的搜索路径。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":20,"id":"7ac09265-a97b-4572-a08c-7a9d9c2909c4","page_size":[595,841],"block_position":"20-5"},{"bbox":[105,388,198,401],"type":"title","angle":0,"index":7,"text":"# 1. 查看 PATH 内容","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":20,"id":"0921bfa6-23b2-479e-88c4-e541230f3b95","page_size":[595,841],"block_position":"20-6"},{"bbox":[86,415,220,428],"type":"text","angle":0,"index":8,"text":"查看PATH 环境变量的内容：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":20,"id":"7324155a-d980-4ab3-9492-cf8eefb43623","page_size":[595,841],"block_position":"20-7"},{"bbox":[87,443,149,454],"type":"text","angle":0,"index":9,"text":"echo $PATH","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":20,"id":"45f41c73-07b2-4483-ab75-5b018f63ee3a","page_size":[595,841],"block_position":"20-8"},{"bbox":[86,498,231,511],"type":"text","angle":0,"index":10,"text":"默认情况下你会看到如下输出：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":20,"id":"4b54254d-4c3d-4fd6-83eb-e26f3cc3a465","page_size":[595,841],"block_position":"20-9"},{"bbox":[86,526,480,555],"type":"text","angle":0,"index":11,"text":"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":20,"id":"45008ef8-3f6f-4fd6-be95-aaca479fc209","page_size":[595,841],"block_position":"20-10"},{"bbox":[86,597,504,656],"type":"text","angle":0,"index":12,"text":"如果你还记得 Linux 目录结构那一节的内容，你就应该知道上面这些目录下放的是哪一类文件了。通常这一类目录下放的都是可执行文件，当我们在 Shell 中执行一个命令时，系统就会按照 PATH 中设定的路径按照顺序依次到目录中去查找，如果存在同名的命令，则执行先找到的那个。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":20,"id":"94507a77-2999-4d05-9aac-9a3ea43e53e0","page_size":[595,841],"block_position":"20-11"},{"bbox":[86,671,504,715],"type":"text","angle":0,"index":13,"text":"回到上一级目录，也就是 shiyanlou 家目录，当再想运行那两个程序时，会发现提示命令找不到，除非加上命令的完整路径，但那样很不方便，如何做到像使用系统命令一样执行自己创建的脚本文件或者程序呢？那就要将命令所在路径添加到PATH 环境变量了。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":20,"id":"e06c49b7-ed8a-4054-84e2-0b2a5d2fe084","page_size":[595,841],"block_position":"20-12"},{"bbox":[105,729,208,742],"type":"title","angle":0,"index":14,"text":"# 3. 自定义 PATH 变量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":20,"id":"8a0e67c3-3d3b-429b-abe8-3a9ee0834ad5","page_size":[595,841],"block_position":"20-13"}],[{"bbox":[86,79,506,109],"type":"text","angle":0,"index":0,"text":"现在，我们添加自定义路径到“ PATH ”环境变量。在前面我们应该注意到 PATH 里面的路径是以: 作为分割符的，所以我们可以这样添加自定义路径：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":21,"id":"4a196b84-ddf2-481f-8e84-be8388717c29","page_size":[595,841],"block_position":"21-0"},{"bbox":[87,121,274,136],"type":"text","angle":0,"index":1,"text":"PATH=$PATH:/home/shiyanlou/mybin","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":21,"id":"ad67711b-1be7-4da6-aad5-a862cd96c856","page_size":[595,841],"block_position":"21-1"},{"bbox":[86,149,510,211],"type":"text","angle":0,"index":2,"text":"你可能会意识到这样还并没有很好的解决问题，因为我给 PATH 环境变量追加了一个路径，它也只是在当前 Shell 有效，我一旦退出终端，再打开就会发现又失效了。有没有方法让添加的环境变量全局有效？或者每次启动 Shell 时自动执行上面添加自定义路径到 PATH的命令？下面我们就来说说后一种方式——让它自动执行。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":21,"id":"789a53cd-9c3b-4f93-aee1-3a5034e7ff45","page_size":[595,841],"block_position":"21-2"},{"bbox":[86,224,508,300],"type":"text","angle":0,"index":3,"text":"在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本，以初始化环境，包括添加一些用户自定义环境变量等等。实验楼的环境使用的 Shell 是 zsh，它的配置文件是 .zshrc，相应的如果使用的 Shell 是 Bash，则配置文件为 .bashrc。它们在 etc下还都有一个或多个全局的配置文件，不过我们一般只修改用户目录下的配置文件。Shell的种类有很多，可以使用cat /etc/shells 命令查看当前系统已安装的 Shell。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":21,"id":"8573d1f8-9749-41f9-88e1-0f97cd53588c","page_size":[595,841],"block_position":"21-3"},{"bbox":[87,314,348,327],"type":"text","angle":0,"index":4,"text":"我们可以简单地使用下面命令直接添加内容到.zshrc 中：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":21,"id":"9966d0e0-1f61-411d-9704-885a6a7adc20","page_size":[595,841],"block_position":"21-4"},{"bbox":[87,341,357,354],"type":"text","angle":0,"index":5,"text":"echo \"PATH=$PATH:/home/shiyanlou/mybin\" >> .zshrc","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":21,"id":"8fd6710b-5556-42db-9889-199bddc56831","page_size":[595,841],"block_position":"21-5"},{"bbox":[86,396,507,442],"type":"text","angle":0,"index":6,"text":"上述命令中 $> >$ 表示将标准输出以追加的方式重定向到一个文件中，注意前面用到的 $>$ 是以覆盖的方式重定向到一个文件中，使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":21,"id":"a27bfdc8-e969-45ae-83ef-b0f76344f75d","page_size":[595,841],"block_position":"21-6"},{"bbox":[105,455,198,469],"type":"title","angle":0,"index":7,"text":"# 4. 修改 PATH 变量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":21,"id":"ba6a6bc9-e458-419d-a22a-a2749a95d318","page_size":[595,841],"block_position":"21-7"},{"bbox":[87,483,248,496],"index":8,"angle":0,"type":"table_caption","text":"PATH 变量的修改有以下几种方式：","id":"c54d01b6-0fb6-4d3e-84b5-9ba9cd4e8d56","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":21,"page_size":[595,841],"block_position":"21-8"},{"bbox":[88,497,455,747],"index":9,"angle":0,"type":"table_body","img_path":"/","id":"6376b7bd-1d4e-4446-b506-8d082df85a80","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>变量设置方式</td><td>说明</td></tr><tr><td>${变量名#匹配字串}</td><td>从头向后开始匹配，删除符合匹配字串的最短数据</td></tr><tr><td>${变量名##匹配字串}</td><td>从头向后开始匹配，删除符合匹配字串的最长数据</td></tr><tr><td>${变量名%匹配字串}</td><td>从尾向前开始匹配，删除符合匹配字串的最短数据</td></tr><tr><td>${变量名%%匹配字串}</td><td>从尾向前开始匹配，删除符合匹配字串的最长数据</td></tr><tr><td>${变量名/旧的字串/新的字串}</td><td>将符合旧字串的第一个字串替换为新的字串</td></tr><tr><td>${变量名//旧的字串/新的字串}</td><td>将符合旧字串的全部字串替换为新的字串</td></tr></table>","page_idx":21,"page_size":[595,841],"block_position":"21-9"}],[{"bbox":[88,76,454,222],"index":0,"angle":0,"type":"table_body","lines_deleted":true,"text":"","id":"6376b7bd-1d4e-4446-b506-8d082df85a80","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"","page_idx":22,"page_size":[595,841],"block_position":"22-0"},{"bbox":[86,234,172,248],"type":"title","angle":0,"index":1,"text":"# 4.4 环境变量删除","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":22,"id":"6446e8f1-abc9-455d-a5fd-2b78c22364fd","page_size":[595,841],"block_position":"22-1"},{"bbox":[87,262,274,275],"type":"text","angle":0,"index":2,"text":"可以使用unset 命令删除一个环境变量：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"id":"b03dc9e2-0d64-417f-8562-010ad4022cf7","page_size":[595,841],"block_position":"22-2"},{"bbox":[87,290,158,303],"type":"text","angle":0,"index":3,"text":"unset mypath","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"id":"d7983f49-ce83-434f-8c8d-4760e74d2951","page_size":[595,841],"block_position":"22-3"},{"bbox":[86,317,192,330],"type":"title","angle":0,"index":4,"text":"# 4.5 环境变量立即生效","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":22,"id":"45601e64-2526-4fd6-bbee-77bccea7a34f","page_size":[595,841],"block_position":"22-4"},{"bbox":[86,344,504,389],"type":"text","angle":0,"index":5,"text":"前面我们在 Shell 中修改了一个配置脚本文件之后（比如 zsh 的配置文件 home 目录下的.zshrc），每次都要退出终端重新打开甚至重启主机之后其才能生效，很是麻烦，我们可以使用source 命令来让其立即生效，如：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"id":"6f1c3b5c-b70c-4e60-8228-3e15d95a34c6","page_size":[595,841],"block_position":"22-5"},{"bbox":[87,404,188,416],"type":"text","angle":0,"index":6,"text":"cd /home/shiyanlou","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"id":"4f576b2c-bcc7-4562-b6cb-36da537dcc4b","page_size":[595,841],"block_position":"22-6"},{"bbox":[87,432,155,443],"type":"text","angle":0,"index":7,"text":"source .zshrc","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"id":"099c5d8d-8a05-4274-9616-f329035e031f","page_size":[595,841],"block_position":"22-7"},{"bbox":[86,486,426,499],"type":"text","angle":0,"index":8,"text":"source 命令还有一个别名就是 .，上面的命令如果替换成 . 的方式就该是：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"id":"bae369fc-2561-4d45-97d6-c82cdcec6e3d","page_size":[595,841],"block_position":"22-8"},{"bbox":[88,514,131,525],"type":"text","angle":0,"index":9,"text":". ./.zshrc","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"id":"6e0f8b9d-8556-478d-b81b-937c883a4a8b","page_size":[595,841],"block_position":"22-9"},{"bbox":[86,541,359,554],"type":"text","angle":0,"index":10,"text":"在使用.的时候，需要注意与表示当前路径的那个点区分开。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"id":"0e004354-fe35-4866-ab46-d99af3896e1a","page_size":[595,841],"block_position":"22-10"},{"bbox":[86,569,502,597],"type":"text","angle":0,"index":11,"text":"注意第一个点后面有一个空格，而且后面的文件必须指定完整的绝对或相对路径名source 则不需要。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"id":"68001f00-bd0e-4e53-8ee3-f35f43304eab","page_size":[595,841],"block_position":"22-11"},{"bbox":[87,613,111,624],"type":"title","angle":0,"index":12,"text":"# 总结","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":22,"id":"bc79fd9f-ad2d-4973-bbff-4157f6120aa7","page_size":[595,841],"block_position":"22-12"},{"bbox":[104,640,312,652],"type":"text","angle":0,"index":13,"text":" 加./：显式执行当前目录下的脚本/程序。","id":"9c9661b2-99b3-452c-b442-c7032eef4f84","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"page_size":[595,841],"block_position":"22-13"},{"bbox":[104,667,329,680],"type":"text","angle":0,"index":14,"text":" 不加 ./：要求命令位于 PATH 包含的目录中。","id":"d3f0720c-8868-42db-aa63-bb7d170fdf1d","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"page_size":[595,841],"block_position":"22-14"},{"bbox":[86,695,397,708],"type":"text","angle":0,"index":16,"text":"位置变量用于接收从命令行传递到脚本的参数： $\\$ 0$ ， $\\$ 1$ ， $\\$ 2$ ， $\\$ 3\\ldots$","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"id":"2395f470-eb44-450b-bf85-ff41b048f0c2","page_size":[595,841],"block_position":"22-15"},{"bbox":[86,723,498,751],"type":"text","angle":0,"index":17,"text":"$\\$ 0$ 就是脚本文件自身的名字， $\\$ 1$ 是第一个参数， $\\$ 2$ 是第二个参数， $\\$ 3$ 是第三个参数，然后是第四个。 $\\$ 9$ 之后的位置参数就必须用大括号括起来了，比如， $\\$ \\{10\\}$ ，${11}，","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":22,"id":"42203548-f085-41c6-ba08-9868765a422e","page_size":[595,841],"block_position":"22-16"}],[{"bbox":[88,79,120,92],"type":"text","angle":0,"index":0,"text":"${12}。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"a8c02665-e730-45f6-9edc-26564cfffe0d","page_size":[595,841],"block_position":"23-0"},{"bbox":[88,106,154,120],"type":"title","angle":0,"index":1,"text":"# 位置参数实例","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":23,"id":"febbe0f1-82bf-4bf1-b362-c4580e6b5015","page_size":[595,841],"block_position":"23-1"},{"bbox":[86,134,420,147],"type":"text","angle":0,"index":2,"text":"在运行脚本的时候，有时候是需要参数的，这里我们学习如何获取参数。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"b2fdd444-1f70-4d46-9858-8689e553c512","page_size":[595,841],"block_position":"23-2"},{"bbox":[104,161,260,173],"type":"text","angle":0,"index":3,"text":" $# ： 传递到脚本的参数个数","id":"7c159775-76ec-4c98-9e52-937426bed2b2","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"page_size":[595,841],"block_position":"23-3"},{"bbox":[104,189,504,217],"type":"text","angle":0,"index":4,"text":" $* ： 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过 9 个","id":"34146df5-076f-444d-9346-6bc17ad6ac8c","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"page_size":[595,841],"block_position":"23-4"},{"bbox":[104,232,274,244],"type":"text","angle":0,"index":5,"text":" $$ ： 脚本运行的当前进程 ID 号","id":"20668bc6-f217-4ffb-9ccd-2b7c49120d3b","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"page_size":[595,841],"block_position":"23-5"},{"bbox":[104,260,324,272],"type":"text","angle":0,"index":6,"text":" $! ： 后台运行的最后一个进程的进程 ID 号","id":"610164a5-7f1e-481f-ac99-c83b5922ee94","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"page_size":[595,841],"block_position":"23-6"},{"bbox":[104,287,418,300],"type":"text","angle":0,"index":7,"text":" $@ ： 与 $\\$ ^ { \\star }$ 相同,但是使用时加引号，并在引号中返回每个参数","id":"851a9867-b967-41f3-904f-7ff15cceb7ae","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"page_size":[595,841],"block_position":"23-7"},{"bbox":[104,315,504,343],"type":"text","angle":0,"index":8,"text":" $\\$ 7$ ： 显示最后命令的退出状态。 0 表示没有错误，其他任何值（如 1）表明有错误。","id":"b2d207e1-7656-4b1e-b5db-092a81255fb0","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"page_size":[595,841],"block_position":"23-8"},{"bbox":[105,358,171,370],"type":"text","angle":0,"index":10,"text":"用户工作环境","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"25bfb3f6-314a-45bf-8934-4942deb492a5","page_size":[595,841],"block_position":"23-9"},{"bbox":[104,386,504,414],"type":"text","angle":0,"index":11,"text":"用户登录系统时，Shell为用户自动定义唯一的工作环境并对该环境进行维护直至用户注 销 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"aff5908f-f05c-45b2-a4c2-601561c2f901","page_size":[595,841],"block_position":"23-10"},{"bbox":[104,417,503,444],"type":"text","angle":0,"index":12,"text":"该环境将定义如身份、工作场所和正在运行的进程等特性。这些特性由指定的环境变量 值 定 义 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"d12b1986-9e69-47f1-b705-f8ffe8a477cd","page_size":[595,841],"block_position":"23-11"},{"bbox":[104,448,504,491],"type":"text","angle":0,"index":13,"text":"用 户 工 作 环 境 有 登 录 环 境 和 非 登 录 环 境 之 分 。登录环境是指用户登录系统时的工作环境，此时的 Shell对登录用户而言是主Shell。非 登 录 环 境 是 指 用 户 再 调 用 子 Shell 时 所 使 用 的 用 户 环 境 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"1524e7e8-6e9b-4db0-aca3-dd8cfbba69aa","page_size":[595,841],"block_position":"23-12"},{"bbox":[104,494,504,538],"type":"text","angle":0,"index":14,"text":"对 所 有 用 户 进 行 设 置/etc/profile/etc/bashrc","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"84538f73-f478-4ee4-8872-77ad355a7522","page_size":[595,841],"block_position":"23-13"},{"bbox":[104,556,504,570],"type":"text","angle":0,"index":15,"text":"只 对 当 前 用 户 进 行 设 置","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"253c9e65-695e-4fc4-8467-c8b8b727999b","page_size":[595,841],"block_position":"23-14"},{"bbox":[104,573,181,585],"type":"text","angle":0,"index":16,"text":"~/.bash_profile","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"fb5d8ac7-625d-4d6f-95fc-3b05a06f58e5","page_size":[595,841],"block_position":"23-15"},{"bbox":[104,589,154,600],"type":"text","angle":0,"index":17,"text":"~/.bashrc","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"ab010c69-8fbd-4ec4-9e69-de1f0d522df3","page_size":[595,841],"block_position":"23-16"},{"bbox":[104,603,504,632],"type":"text","angle":0,"index":18,"text":"通 常 ， 个 人 bash 环 境 设 置 都 定 义 在 ~/.bashrc 文 件 里登录shell和非登录shell的启动过程","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"d0321895-9737-495a-bf64-55ce1f02d1ba","page_size":[595,841],"block_position":"23-17"},{"bbox":[104,647,504,660],"type":"text","angle":0,"index":19,"text":"Login shell","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"814418f6-5a17-4bad-b0cc-caf444039037","page_size":[595,841],"block_position":"23-18"},{"bbox":[104,663,504,675],"type":"text","angle":0,"index":20,"text":"/etc/profile  /etc/profile.d/*.sh","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"b369cf2c-bcce-4dca-afe2-e123ca79ecff","page_size":[595,841],"block_position":"23-19"},{"bbox":[105,693,212,706],"type":"text","angle":0,"index":21,"text":"$HOME/.bash_profile","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"a70f7326-dfe3-4f0a-8c98-f4d46b501427","page_size":[595,841],"block_position":"23-20"},{"bbox":[105,725,185,736],"type":"text","angle":0,"index":22,"text":"$HOME/.bashrc","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"865c6c36-2fea-4fc1-ba0e-417c4f5b5ec2","page_size":[595,841],"block_position":"23-21"},{"bbox":[312,725,320,735],"type":"text","angle":0,"index":23,"text":"","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"af60ca05-fc23-45c4-b16b-5ab371541c9a","page_size":[595,841],"block_position":"23-22"},{"bbox":[447,725,505,736],"type":"text","angle":0,"index":24,"text":"/etc/bashrc","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":23,"id":"4be60875-c54d-47a9-b0c4-41ab5201e218","page_size":[595,841],"block_position":"23-23"}],[{"bbox":[105,95,161,107],"type":"header","angle":0,"index":-99999,"text":"Non-Login","color":{"line":"rgba(164, 164, 164, 1)","fill":"rgba(164, 164, 164, 1)"},"page_idx":24,"is_discarded":true,"id":"f6082964-3c04-4580-97d6-c81ab4bd72f4","page_size":[595,841],"block_position":"24-0"},{"bbox":[105,110,186,121],"type":"header","angle":0,"index":-99998,"text":"$HOME/.bashrc","color":{"line":"rgba(164, 164, 164, 1)","fill":"rgba(164, 164, 164, 1)"},"page_idx":24,"is_discarded":true,"id":"f929cb95-84da-4299-aa27-86064911bf27","page_size":[595,841],"block_position":"24-1"},{"bbox":[105,126,151,138],"type":"header","angle":0,"index":-99997,"text":"命令补全","color":{"line":"rgba(164, 164, 164, 1)","fill":"rgba(164, 164, 164, 1)"},"page_idx":24,"is_discarded":true,"id":"edcb697d-137d-4c66-a3f7-47a00415f110","page_size":[595,841],"block_position":"24-2"},{"bbox":[480,95,506,106],"type":"header","angle":0,"index":-99996,"text":"shell","color":{"line":"rgba(164, 164, 164, 1)","fill":"rgba(164, 164, 164, 1)"},"page_idx":24,"is_discarded":true,"id":"160091fe-83a0-434f-bbcb-e523a8938688","page_size":[595,841],"block_position":"24-3"},{"bbox":[312,111,321,121],"type":"header","angle":0,"index":-99995,"text":"","color":{"line":"rgba(164, 164, 164, 1)","fill":"rgba(164, 164, 164, 1)"},"page_idx":24,"is_discarded":true,"id":"bcffb1b8-1272-437a-8185-9e72b1374770","page_size":[595,841],"block_position":"24-4"},{"bbox":[448,111,506,122],"type":"header","angle":0,"index":-99994,"text":"/etc/bashrc","color":{"line":"rgba(164, 164, 164, 1)","fill":"rgba(164, 164, 164, 1)"},"page_idx":24,"is_discarded":true,"id":"b22b3f12-0744-4ee4-8d05-14cd0ba433c8","page_size":[595,841],"block_position":"24-5"},{"bbox":[104,153,509,432],"type":"text","angle":0,"index":6,"text":"通常用户在 bash 下输入命令时不必把命令输全， shell 就能判断出你所要输入的命令。该功能的核心思想是：bash 根据用户已输入的信息来查找以这些信息开头的命令，从而试图完成当前命令的输入工作。用来执行这项功能的键是 Tab 键，按下一次 Tab 键后，bash 就试图完成整个命令的输入，如果不成功，可以再按一次 Tab 键，这时bash 将 列 出 所 有 能 够 与 当 前 输 入 字 符 相 匹 配 的 命 令 列 表 。通常用户在 bash 下输入命令时不必把命令输全， shell 就能判断出你所要输入的命令。该功能的核心思想是：bash 根据用户已输入的信息来查找以这些信息开头的命令，从而试图完成当前命令的输入工作。用来执行这项功能的键是 Tab 键，按下一次 Tab 键后，bash 就试图完成整个命令的输入，如果不成功，可以再按一次 Tab 键，这时bash 将 列 出 所 有 能 够 与 当 前 输 入 字 符 相 匹 配 的 命 令 列 表 。键 盘 快 捷 键最 简 单 的 方 法 是 用 上 下 方 向 键 、 <PgUp> 和 <PgDn> 键 来 查 看 历 史 命 令如果需要的话，可以使用键盘上的编辑功能键对显示在命令行上的命令进行编辑感 叹 号 的 用 法用 !! 执 行 最 近 执 行 过 的 命 令用 ! < 命 令 事 件 号 $>$ 执 行 已 经 运 行 过 的 命 令用 ! <已经使用过的命令前面的部分 $>$ 执行已经运行过的以该字符串开头的最近的命令命令别名","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":24,"id":"2d4a4bb6-9856-4107-9e9f-9ac1d0439a45","page_size":[595,841],"block_position":"24-6"},{"bbox":[104,444,506,631],"index":7,"angle":0,"type":"code","text":"```txt\n允许用户按照自己喜欢的方式对命令进行自定义格式  \nalias [alias_name='original_command']说明  \nalias_name 是用户给命令取的别名。original_command是原来的命令和参数。若命令中包含空格或其他的特殊字符串必须使用引号。在定义别名时，等号两边不允许有空格。不带任何参数的alias命令显示当前已定义的所有别名。可以使用unalias alias_name命令取消某个别名的定义。如果用户需要别名的定义在每次登录时均有效，应该将其写入用户自家目录下的.bashrc 文件 中\n```","id":"22692b0b-1f11-4a80-b400-461d107c7152","color":{"line":"rgba(200, 140, 58, 1)","fill":"rgba(200, 140, 58, 1)"},"page_idx":24,"page_size":[595,841],"block_position":"24-7"},{"bbox":[104,647,508,709],"index":8,"angle":0,"type":"code","text":"```shell\n定义 别 名 举 例  \nalias Ih='ls -lh'  \nalias grep='grep --color=auto'  \nalias gitcam='git commit -a -m'\n```","id":"7f710438-0669-4b8c-8250-cfc677135b38","color":{"line":"rgba(200, 140, 58, 1)","fill":"rgba(200, 140, 58, 1)"},"page_idx":24,"page_size":[595,841],"block_position":"24-8"},{"bbox":[105,711,506,756],"type":"text","angle":0,"index":9,"text":"注 意若系统中有一个命令，同时又定义了一个与之同名的别名（例如，系统中有 grep命令，且又 定义了 grep 的 别 名 ） ，则别 名 将优先 于 系 统 中原有 的 命 令 的 执 行 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":24,"id":"c103b436-a19e-445b-a14a-ddbb532a25d2","page_size":[595,841],"block_position":"24-9"}],[{"bbox":[105,79,506,110],"type":"text","angle":0,"index":0,"text":"要想临时使用系统中的命令而非别名，应该在命令前添加“\\”字符，例如，$ \\grep 命令将运行系统中原来的 grep 命令而不是 grep 别名，它不在输出中显示颜色。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":25,"id":"8343252e-a6ea-4ed0-9b1c-1136e48ae1db","page_size":[595,841],"block_position":"25-0"},{"bbox":[86,128,123,147],"type":"title","angle":0,"index":1,"text":"# 运算","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":25,"id":"e1ce060d-8a2d-4b21-a523-33c82b5a1aed","page_size":[595,841],"block_position":"25-1"},{"bbox":[86,199,505,290],"type":"text","angle":0,"index":2,"text":"Bash 变 量 没 有 严 格 的 类 型 定 义本 质 上 Bash 变 量 都 是 字 符 串若一个字面常量或变量的值是纯数字的，不包含字母或其他字符， Bash可以将其视为长整 型 值 ， 并 可 做 算 数 运 算 和 比 较 运 算 。Bash 也 允 许 显 式 地 声 明 整 型 变 量declare -i 变 量 名","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":25,"id":"239678ed-96ef-44ee-adbc-772bc03405d0","page_size":[595,841],"block_position":"25-2"},{"bbox":[103,290,421,438],"index":3,"angle":0,"type":"table_body","img_path":"/","id":"b43336f3-257d-4873-8206-14d2f938f820","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>+、-、*、/ (四则运算)</td></tr><tr><td>**、% (幂运算和模运算,取余数)</td></tr><tr><td>&lt;&lt;、&gt;&gt; (按位左移和按位右移)</td></tr><tr><td>&amp;、^、| (按位与、按位异或和按位或)</td></tr><tr><td>=、+=、-=、*=、/=、%=&gt;&lt;&lt;=、&gt;==、&amp;=、^=、|= (赋值运算)</td></tr><tr><td>&lt;、&gt;、&lt;=、&gt;=、==、!= (比较操作符)</td></tr><tr><td>&amp;&amp;、|| (逻辑与和逻辑或)</td></tr></table>","page_idx":25,"page_size":[595,841],"block_position":"25-3"},{"bbox":[106,453,348,470],"type":"text","angle":0,"index":4,"text":"注：按位运算是以二进制形式进行的。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":25,"id":"fae18779-57c6-4c68-9dbf-6898cd9eaefc","page_size":[595,841],"block_position":"25-4"},{"bbox":[86,507,510,553],"type":"text","angle":0,"index":5,"text":"Bash本身没有计算功能，需要借助其他命令完成表达式的运算，包括算术运算和逻辑运算。在表达式中使用了各种运算符，具体于使用的命令有关，参看相关命令的 man帮助手册。expr 命令可以进行一些算术运算，包括加、减、乘、除等。也可以进行一些逻辑运算。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":25,"id":"ec3f87e0-a738-483b-934d-3b557ebb36c3","page_size":[595,841],"block_position":"25-5"},{"bbox":[104,566,415,579],"type":"text","angle":0,"index":6,"text":"计算结果赋值给变量时，要注意使用反撇号（与~ 在同一个键）","id":"c2c290a2-6f9c-486a-8c2e-0b077b13442c","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":25,"page_size":[595,841],"block_position":"25-6"},{"bbox":[104,594,392,607],"type":"text","angle":0,"index":7,"text":"表达式和运算符之间要有空格， $\\$ 0+\\$ 6$ 写成 $\\$ 0+\\$ 6$ 不行","id":"bb5f2382-1bc7-4d86-a6ba-64fd9c2dcac1","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":25,"page_size":[595,841],"block_position":"25-7"},{"bbox":[104,621,356,634],"type":"text","angle":0,"index":8,"text":"乘号（*）前边必须加反斜杠（)才能实现乘法运算","id":"7fe92bd9-ac66-4ebe-ac0b-008be4a719e1","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":25,"page_size":[595,841],"block_position":"25-8"},{"bbox":[105,649,211,661],"type":"text","angle":0,"index":9,"text":"除法是取整的除法","id":"c1ee67e5-b754-4216-b8ca-91249628a290","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":25,"page_size":[595,841],"block_position":"25-9"},{"bbox":[86,677,504,705],"type":"text","angle":0,"index":11,"text":"Echo中单引号的原则是不管里面的内容是什么都原样输出，不能识别通配符、变量、命令等。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":25,"id":"f085589e-58e9-47f8-a382-d76c8cdbd7b3","page_size":[595,841],"block_position":"25-10"},{"bbox":[86,719,505,749],"type":"text","angle":0,"index":12,"text":"双引号就比单引号人性化一点，可以识别变量和特殊转义符，进行一步翻译再输出，同时我这里再强调一下在shell脚本中使用双引号必须结合 $\\$ 5$ 、/和`这三个来申明变量、引入特","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":25,"id":"82df127d-2fc6-4c64-989e-e128c1b505c0","page_size":[595,841],"block_position":"25-11"}],[{"bbox":[86,79,336,92],"type":"text","angle":0,"index":0,"text":"色符号和加如命令，这样才可以直接被编译器识别的。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"1469e784-bc25-465f-9746-86ffb65c170c","page_size":[595,841],"block_position":"26-0"},{"bbox":[86,106,138,120],"type":"text","angle":0,"index":1,"text":"逻辑运算：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"a3cfbecf-8c71-42a6-8f36-7ca39a502ba7","page_size":[595,841],"block_position":"26-1"},{"bbox":[86,134,505,163],"type":"text","angle":0,"index":2,"text":"（但这里要注意逻辑运算的话，&和|与一般的逻辑运算||和&&不同吧！不要将这两个搞混）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"db32dd26-6200-4cbb-b29d-7f6231cad9f0","page_size":[595,841],"block_position":"26-2"},{"bbox":[86,177,510,191],"type":"text","angle":0,"index":3,"text":"在 expr 命令中，| 不是逻辑或，而是一个 模式匹配（Alternation）运算符，其行为如下：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"cabc758f-d138-495d-9828-92040c527149","page_size":[595,841],"block_position":"26-3"},{"bbox":[104,205,153,218],"type":"text","angle":0,"index":4,"text":". 规则：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"d00df406-aee0-4c4a-b3e0-3b23f098ece6","page_size":[595,841],"block_position":"26-4"},{"bbox":[141,232,324,246],"type":"text","angle":0,"index":5,"text":"o 若 ARG1 非空且非零 返回 ARG1","id":"744065f2-185f-4cf7-9f04-60314a962201","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"page_size":[595,841],"block_position":"26-5"},{"bbox":[141,260,251,273],"type":"text","angle":0,"index":6,"text":"o 否则 返回 ARG2","id":"fae9422e-c49c-4cf6-8cb3-9f4b31b3924c","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"page_size":[595,841],"block_position":"26-6"},{"bbox":[104,287,414,301],"type":"text","angle":0,"index":8,"text":"返回值：直接返回 ARG1 或 ARG2 的原始值，不是布尔值 1/0。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"df21d41f-720b-4083-a80b-e843759b8125","page_size":[595,841],"block_position":"26-7"},{"bbox":[87,315,189,329],"type":"text","angle":0,"index":9,"text":". expr 中的 & 运算符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"1a3073a0-3f21-45ce-83e6-0f8087be0c9f","page_size":[595,841],"block_position":"26-8"},{"bbox":[86,343,414,356],"type":"text","angle":0,"index":10,"text":"在 expr 中，& 是 “匹配”运算符（Match Operator），其行为如下：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"d2625d9d-d472-48c7-bb91-24011a6c0ea2","page_size":[595,841],"block_position":"26-9"},{"bbox":[104,370,152,383],"type":"text","angle":0,"index":11,"text":". 规则：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"763e395b-3f89-4e1e-a793-2dfa3960d277","page_size":[595,841],"block_position":"26-10"},{"bbox":[141,397,380,411],"type":"text","angle":0,"index":12,"text":"o 若 ARG1 和 ARG2 都 非空且非零 返回 ARG1","id":"0b962633-ed51-4536-97b8-57f38ebcfa11","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"page_size":[595,841],"block_position":"26-11"},{"bbox":[141,425,228,438],"type":"text","angle":0,"index":13,"text":"o 否则 返回 0","id":"ab24ee0c-23c9-46b7-9c91-7702cdb161aa","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"page_size":[595,841],"block_position":"26-12"},{"bbox":[104,453,304,466],"type":"text","angle":0,"index":15,"text":"返回值：ARG1 或 0，不是布尔值 1/0。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"bfb9e6d8-9c30-4f37-9551-7675308f7c11","page_size":[595,841],"block_position":"26-13"},{"bbox":[86,481,277,493],"type":"title","angle":0,"index":16,"text":"# 另外的大小比较为真时返回 1 否则返回 0","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":26,"id":"79455510-5276-49ad-8877-a997a3b02313","page_size":[595,841],"block_position":"26-14"},{"bbox":[86,508,154,521],"type":"title","angle":0,"index":17,"text":"# Zsh 中的问题","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":26,"id":"593631f8-eca3-4c37-b923-179964a06776","page_size":[595,841],"block_position":"26-15"},{"bbox":[86,535,510,596],"type":"text","angle":0,"index":18,"text":"在 Zsh 中，当您运行 ret=`\\expr length \"hello\"`，反引号将会被解析成一个命令并尝试执行 expr length \"hello\"。然而，Zsh 报告了 command not found: 5 的错误。这表明，Zsh 在尝试解析输出结果时没有正确处理返回值。因为 expr length \"hello\"` 输出的是一个数字（5），Zsh 错误地将这个数字当作一个命令来执行。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"6783eeb3-711e-454d-8de4-168a85b5be13","page_size":[595,841],"block_position":"26-16"},{"bbox":[87,610,160,623],"type":"title","angle":0,"index":19,"text":"# Bash 中的行为","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":26,"id":"f6740c56-a2e2-4bfd-a4a7-176ae6837edc","page_size":[595,841],"block_position":"26-17"},{"bbox":[86,637,505,666],"type":"text","angle":0,"index":20,"text":"Bash 在处理这个命令时表现得更宽容。Bash 会将反引号中的命令输出正确地捕获，并将结果（即5）赋值给ret 变量，而不会尝试将其解释为命令。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"f6a19723-696c-4447-b54e-9b468da36f97","page_size":[595,841],"block_position":"26-18"},{"bbox":[86,681,215,694],"type":"title","angle":0,"index":21,"text":"# 2. 反引号与 $\\$ 0$ 语法的替代","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":26,"id":"615d69be-d480-4a9f-bbef-2260ec8fbf60","page_size":[595,841],"block_position":"26-19"},{"bbox":[86,708,506,753],"type":"text","angle":0,"index":22,"text":"虽然反引号 ` 在大多数情况下能正常工作，但它并不总是最清晰和最可靠的选择。尤其是当命令返回数值或字符串时，反引号可能会带来意料之外的结果。现代 Shell（包括 Zsh和 Bash）更推荐使用 $() 代替反引号，因为它更容易嵌套和理解，并且更少出现解析错","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":26,"id":"f92ca3d7-b205-4650-9e3f-ba853e06a823","page_size":[595,841],"block_position":"26-20"}],[{"bbox":[88,79,115,91],"type":"text","angle":0,"index":0,"text":"误。）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":27,"id":"c57e8bcd-f6ea-4f4b-bd12-9951318c21ff","page_size":[595,841],"block_position":"27-0"},{"bbox":[88,106,202,120],"type":"title","angle":0,"index":1,"text":"# 1. 为什么建议加双引号？","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":27,"id":"e1ed8864-d2fb-445a-ae6d-59fa11fd9967","page_size":[595,841],"block_position":"27-1"},{"bbox":[86,134,285,148],"type":"title","angle":0,"index":2,"text":"# (1) 防止变量值中的空格或特殊字符被解析","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":27,"id":"f1a5feae-2d6d-4971-81ac-4af9c6d8d7ff","page_size":[595,841],"block_position":"27-2"},{"bbox":[104,161,504,190],"type":"text","angle":0,"index":3,"text":"如果 $PATH 中包含空格或特殊字符（如 *、?、$），不加引号时 Shell 会对其进行分词或扩展：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":27,"id":"b11e4330-2882-4ce4-92c2-84d7a080dcd7","page_size":[595,841],"block_position":"27-3"},{"bbox":[86,205,180,218],"type":"title","angle":0,"index":4,"text":"# (2) 避免通配符扩展","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":27,"id":"665ac30c-94a7-4be3-8bbf-354c5dbe60b6","page_size":[595,841],"block_position":"27-4"},{"bbox":[104,232,448,246],"type":"text","angle":0,"index":5,"text":" 如果$PATH 包含* 或? 等通配符，不加引号时Shell 会尝试文件匹配：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":27,"id":"ccc08fa5-2915-4ca3-adfd-588667518938","page_size":[595,841],"block_position":"27-5"},{"bbox":[86,259,190,274],"type":"title","angle":0,"index":6,"text":"# (3) 确保变量引用完整","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":27,"id":"a2f8d4e6-46ed-44d6-9369-178e5b50a294","page_size":[595,841],"block_position":"27-6"},{"bbox":[105,287,340,301],"type":"text","angle":0,"index":7,"text":"双引号能明确变量边界，避免与后续字符混淆：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":27,"id":"5738deff-6222-4372-bee1-c2f533651d90","page_size":[595,841],"block_position":"27-7"},{"bbox":[86,315,436,327],"type":"text","angle":0,"index":8,"text":"# 不加引号时，若变量名后紧跟字母或下划线，会被误认为变量名的一部分","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":27,"id":"e105ecee-c79a-471e-aad4-49ff5804e43e","page_size":[595,841],"block_position":"27-8"},{"bbox":[86,343,233,355],"type":"title","angle":0,"index":9,"text":"# 2. 什么情况下可以省略双引号？","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":27,"id":"b706c323-9cd9-4fbd-85c1-42d18d0e0c08","page_size":[595,841],"block_position":"27-9"},{"bbox":[104,370,498,398],"type":"text","angle":0,"index":10,"text":"当变量值绝对不包含空格、通配符或特殊字符时（如纯字母数字和 : 的PATH），可以不加引号：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":27,"id":"842f1c37-91d5-4c77-ac89-bd5ba31781d7","page_size":[595,841],"block_position":"27-10"},{"bbox":[86,413,293,426],"type":"text","angle":0,"index":11,"text":"echo PATH=/usr/bin:/bin $> >$ .zshrc # 安全","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":27,"id":"6673f47c-ebf3-4de2-a24e-968fb1776369","page_size":[595,841],"block_position":"27-11"},{"bbox":[88,454,454,568],"index":12,"angle":0,"type":"table_body","img_path":"/","id":"4cfa1e86-2d76-48b3-aca6-be69f02d23a3","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>命令执行结果</td><td>$?取值</td><td>逻辑表达式值</td></tr><tr><td>成功</td><td>0</td><td>1（真）</td></tr><tr><td>失败</td><td>1</td><td>0（假）</td></tr></table>","page_idx":27,"page_size":[595,841],"block_position":"27-12"},{"bbox":[86,581,498,610],"type":"text","angle":0,"index":13,"text":"expr命令除了进行算术和逻辑运算之外（不是我想到&&与||，另外也并没有提到取非、异或、按位运算），还可以进行字符串的操作。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":27,"id":"2e51d6fd-20cf-40fa-9043-123c7259869b","page_size":[595,841],"block_position":"27-13"},{"bbox":[87,652,133,664],"type":"title","angle":0,"index":14,"text":"# Test 命令","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":27,"id":"058bb081-5ca4-4704-88e7-5f3a891a1ccc","page_size":[595,841],"block_position":"27-14"},{"bbox":[86,679,498,708],"type":"text","angle":0,"index":15,"text":"Bash对于逻辑表达式的求值需要借助 test命令完成。。test命令中逻辑运算符有两套，分为数值型和字符型，另外还有对于文件进行判断的运算符，和表达式复合的运算符。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":27,"id":"c15c6384-aae0-4927-9c79-7d7c8d51db8b","page_size":[595,841],"block_position":"27-15"},{"bbox":[87,723,132,735],"type":"title","angle":0,"index":16,"text":"# 主要区别","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":27,"id":"4cc8cec3-d6d9-4266-9c98-d61252aceb24","page_size":[595,841],"block_position":"27-16"}],[{"bbox":[83,96,512,441],"index":0,"angle":0,"type":"table_body","img_path":"/","id":"2510ae7f-7a5c-443b-a161-35660259119f","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>特性</td><td>test 10 -It 20 (或 [ 10 -It 20 ])</td><td>expr 10 \\\\&lt; 20</td></tr><tr><td>用途</td><td>Shell 条件测试</td><td>通用表达式计算</td></tr><tr><td>是 Shell 内置吗?</td><td>☐是(高效)</td><td>☐外部命令(较慢)</td></tr><tr><td>比较类型</td><td>数值比较</td><td>字符串比较(但数字仍可正确比较)</td></tr><tr><td>返回值(输出)</td><td>返 回 0 (true) 或 1 (false)</td><td>输出 1 (true) 或 0 (false),但 $?仍然是 0/1</td></tr><tr><td>符号</td><td>-It (必须用 - 开头的运算符)</td><td>&lt; (必须转义为 \\&lt; )</td></tr><tr><td>适用场景</td><td>if 条件判断</td><td>需要计算表达式并获取结果</td></tr></table>","page_idx":28,"page_size":[595,841],"block_position":"28-0"},{"bbox":[86,454,258,467],"type":"text","angle":0,"index":1,"text":"test -n $f echo $\\$ 7$ test -z $f echo $?","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":28,"id":"8a874ecb-f3c4-431b-a593-f8d28c3041ae","page_size":[595,841],"block_position":"28-1"},{"bbox":[86,481,175,495],"type":"text","angle":0,"index":2,"text":"结果都为0！奇怪。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":28,"id":"b42f72a2-c311-4508-b78b-783b042afbca","page_size":[595,841],"block_position":"28-2"},{"bbox":[86,509,504,555],"type":"text","angle":0,"index":3,"text":"bc是一个独立的bc是一个较为完整的工具，为Bash提供了更强的计算能力，提供了完备的类似C的编程语法的计算器，可以在交互式界面、文本或管道的方式方便的进行一些运算。支持多进制转换，任意精度调整，打印控制，函数支持，逻辑控制等。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":28,"id":"3bcd787b-1e79-4704-a400-6045d638abf3","page_size":[595,841],"block_position":"28-3"},{"bbox":[86,567,505,581],"type":"text","angle":0,"index":4,"text":"算 术 运 算 扩 展","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":28,"id":"a8cf8801-0827-4580-9176-6bedd0559c6f","page_size":[595,841],"block_position":"28-4"},{"bbox":[88,584,157,597],"type":"text","angle":0,"index":5,"text":"$[expression]","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":28,"id":"6c775d1a-a42a-42f0-947e-5e1fb00426ff","page_size":[595,841],"block_position":"28-5"},{"bbox":[88,599,162,613],"type":"text","angle":0,"index":6,"text":"$((expression))","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":28,"id":"f06acccc-3dc1-4e99-86d3-9bc0b37da9aa","page_size":[595,841],"block_position":"28-6"},{"bbox":[86,614,498,628],"type":"text","angle":0,"index":7,"text":"用 $[···] ， $\\$ (( \\cdots ) )$ 进 行整数 运 算时，括 号内变 量前 的美元符号 $\\$ 1$ 可 以省 略。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":28,"id":"078f4f5c-dfbf-4fe3-a117-2140627bb311","page_size":[595,841],"block_position":"28-7"},{"bbox":[88,630,504,645],"type":"text","angle":0,"index":8,"text":"注 意 ${···} ， $(···) ， $[···] ， $((···)) 的 不 同 作 用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":28,"id":"638ad1a7-e104-4f7d-936d-e72610f9a5a8","page_size":[595,841],"block_position":"28-8"},{"bbox":[87,680,154,698],"type":"title","angle":0,"index":9,"text":"# 双小括号","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":28,"id":"47bd46e1-1b31-4acb-b970-7d2404ee36e5","page_size":[595,841],"block_position":"28-9"},{"bbox":[86,735,450,749],"type":"text","angle":0,"index":10,"text":"双小括号中可以使用类似 C 语言的表达式，((exp))的格式更符合一般使用习惯。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":28,"id":"6d0b2d4f-5fab-4a3f-b1a3-f4ce17481c27","page_size":[595,841],"block_position":"28-10"}],[{"bbox":[104,79,341,92],"type":"text","angle":0,"index":0,"text":"这种扩展计算是整数型的计算，不支持浮点型。","id":"57234fc6-0c61-4a9a-a685-25a8fbadf557","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"page_size":[595,841],"block_position":"29-0"},{"bbox":[104,106,507,152],"type":"text","angle":0,"index":1,"text":"如果表达式的结果为0，那么返回的退出状态码为1，或者是\"假\"，而一个非零值的表达式所返回的退出状态码将为 0，或者是\"true\"。若是逻辑判断，表达式 exp为真则为 1,假则为 0。","id":"38766382-b77a-4be7-b124-4c9aaefc2572","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"page_size":[595,841],"block_position":"29-1"},{"bbox":[104,164,507,195],"type":"text","angle":0,"index":2,"text":"只要括号中的运算符、表达式符合 C 语言运算规则，都可用在$((exp))中，甚至是三目运算符","id":"604b182b-c5ee-4a15-9981-b5a75ffe52fa","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"page_size":[595,841],"block_position":"29-2"},{"bbox":[104,208,507,238],"type":"text","angle":0,"index":3,"text":"作不同进位(如二进制、八进制、十六进制)运算时，输出结果全都自动转化成了十进制。","id":"d56f5c9b-c268-439f-a305-deab51cc7f4f","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"page_size":[595,841],"block_position":"29-3"},{"bbox":[86,251,166,264],"index":5,"angle":0,"type":"code","text":"```lisp\necho $((16#5f))\n```","id":"89e09ea5-b977-461a-9b2d-fdee7f361413","color":{"line":"rgba(200, 140, 58, 1)","fill":"rgba(200, 140, 58, 1)"},"page_idx":29,"page_size":[595,841],"block_position":"29-4"},{"bbox":[86,279,201,292],"type":"text","angle":0,"index":6,"text":"95 #16 进制转 10 进制","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"6719f0a7-fa4d-4b0a-9304-e36009d19f7b","page_size":[595,841],"block_position":"29-5"},{"bbox":[104,333,399,348],"type":"text","angle":0,"index":7,"text":" 用于算术运算比较，双括号中的变量可以不使用$符号前缀。","id":"ae13ce2c-df56-4075-bdb3-ebb1862b2c49","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"page_size":[595,841],"block_position":"29-6"},{"bbox":[104,361,285,375],"type":"text","angle":0,"index":8,"text":"括号内支持多个表达式用逗号分开","id":"d927e13f-c70d-4c2f-b8aa-a2a72c35a565","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"page_size":[595,841],"block_position":"29-7"},{"bbox":[88,396,139,414],"type":"title","angle":0,"index":10,"text":"# 中括号","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":29,"id":"309ff1a3-5df9-4042-a00e-b1223177b6ff","page_size":[595,841],"block_position":"29-8"},{"bbox":[86,451,221,465],"type":"text","angle":0,"index":11,"text":"中括号也可以进行整数运算。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"c4026dce-1066-405d-987d-d3b11c4f77e4","page_size":[595,841],"block_position":"29-9"},{"bbox":[86,479,135,493],"type":"interline_equation","angle":0,"index":12,"text":"$$\n\\mathsf {b} = \\mathbb {S} [ 1 + 3 ]\n$$","color":{"line":"rgba(230, 122, 171, 1)","fill":"rgba(230, 122, 171, 1)"},"page_idx":29,"id":"fb344159-f42e-475d-81d8-d4ce6a6d5018","page_size":[595,841],"block_position":"29-10"},{"bbox":[87,507,130,518],"type":"interline_equation","angle":0,"index":13,"text":"$$\ne c h o \\mathbb {S} ^ {\\mathrm {b}}\n$$","color":{"line":"rgba(230, 122, 171, 1)","fill":"rgba(230, 122, 171, 1)"},"page_idx":29,"id":"9ddcb957-5a39-4a33-95a7-384498226b02","page_size":[595,841],"block_position":"29-11"},{"bbox":[87,534,96,545],"type":"text","angle":0,"index":14,"text":"4","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"ce2666a5-73a7-4cd4-835f-81e142cbcaf1","page_size":[595,841],"block_position":"29-12"},{"bbox":[87,562,107,573],"type":"text","angle":0,"index":15,"text":"Let","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"bdea152e-184c-41f6-aff2-0edcf469c998","page_size":[595,841],"block_position":"29-13"},{"bbox":[86,588,508,602],"type":"text","angle":0,"index":16,"text":"let 内 置 命 令 用 于 算 术 运 算","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"9f9ca257-e8d3-4b1a-ae28-d118ff5ea06d","page_size":[595,841],"block_position":"29-14"},{"bbox":[86,604,502,618],"type":"text","angle":0,"index":17,"text":"赋 值 符 号 和 运 算 符 两 边 不 能 留 空 格 ！","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"a8910521-59cd-46d8-8601-4fd41c03b89e","page_size":[595,841],"block_position":"29-15"},{"bbox":[101,619,506,634],"type":"text","angle":0,"index":18,"text":"如 果 将 字 符 串 赋 值 给 一 个 整 型 变 量 时 ， 则 变 量 的 值 为 0","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"e73237ba-1a35-467b-b01e-dc03ce8547b2","page_size":[595,841],"block_position":"29-16"},{"bbox":[86,635,506,649],"type":"text","angle":0,"index":19,"text":"如 果 变 量 的 值 是 字 符 串 ， 则 进 行 算 术 运 算 时 设 为 0","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"f1738374-194b-4e4a-8ee7-c5a03b6c9069","page_size":[595,841],"block_position":"29-17"},{"bbox":[86,651,505,664],"type":"text","angle":0,"index":20,"text":"let num2=4 + 1","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"c44dabb5-c1ee-4dec-91fd-37e5c1e50796","page_size":[595,841],"block_position":"29-18"},{"bbox":[86,666,506,681],"type":"text","angle":0,"index":21,"text":"let \"num2=4 + 1\" # 用 引 号 忽 略 空 格 的 特 殊 含 义","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"56644a16-c664-4471-a526-89446b701770","page_size":[595,841],"block_position":"29-19"},{"bbox":[86,682,287,696],"type":"text","angle":0,"index":22,"text":"用 let 命令进行算术运算时，最好加双引号","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"4cc351ca-adb5-432d-b7e7-98acdbfe8318","page_size":[595,841],"block_position":"29-20"},{"bbox":[87,711,113,723],"type":"text","angle":0,"index":23,"text":"expr","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"7635dd74-5d32-4b71-832b-894d50b26085","page_size":[595,841],"block_position":"29-21"},{"bbox":[86,737,506,751],"type":"text","angle":0,"index":24,"text":"通 用 的 表 达 式 计 算 命 令","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":29,"id":"22a5eb3f-6f7c-48d6-9f80-e6ae3e89184e","page_size":[595,841],"block_position":"29-22"}],[{"bbox":[86,78,502,108],"type":"text","angle":0,"index":0,"text":"表 达 式 中 参 数 与 操 作 符 必 须 以 空 格 分 开 。表 达 式 中 的 运 算 可 以 是 算 术 运 算 ， 比 较 运 算 ， 字 符 串 运 算 和 逻 辑 运 算 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"10b2192c-b99f-493b-9c1a-cea9fd4eeb5a","page_size":[595,841],"block_position":"30-0"},{"bbox":[87,110,505,139],"type":"text","angle":0,"index":1,"text":"expr \\( 2 + 5 \\) \\* 2 – 3 # 括 号 必 须 被 转 义expr 5 \\* 3 # 乘 法 符 号 必 须 被 转 义","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"5db5151b-2975-465d-8da0-8b18cd78bb54","page_size":[595,841],"block_position":"30-1"},{"bbox":[87,141,506,170],"type":"text","angle":0,"index":2,"text":"bash 只 支 持 整 数 运 算可 以 通 过 使 用 bc 或 awk 工 具 来 处 理 浮 点 数 运 算","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"146b7e81-5bf1-4a77-b895-68d04dc2b6f9","page_size":[595,841],"block_position":"30-2"},{"bbox":[87,172,506,201],"type":"text","angle":0,"index":3,"text":"$\\mathsf { m } \\boldsymbol { = }$ `awk 'BEGIN{x=2.45;y=3.123; \\printf \"%.3f\\n\", x*y}'`","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"5af1b071-0e7f-4594-b1cc-964d2713eb4f","page_size":[595,841],"block_position":"30-3"},{"bbox":[88,203,506,234],"type":"text","angle":0,"index":4,"text":"echo $m$\\mathsf { n } { = } \\$ 1$ (echo \"scale=3; 13/2\" | bc )","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"dc7d94a7-d526-44b7-ba76-b76c02ec8577","page_size":[595,841],"block_position":"30-4"},{"bbox":[88,235,506,247],"type":"text","angle":0,"index":5,"text":"echo $n","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"e6e4c339-6e07-47f0-aa35-2a5c11af5883","page_size":[595,841],"block_position":"30-5"},{"bbox":[87,278,140,290],"type":"title","angle":0,"index":6,"text":"# Printf 命令","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":30,"id":"ff0cf85c-0b44-4af7-acf5-5063e439711b","page_size":[595,841],"block_position":"30-6"},{"bbox":[86,305,506,319],"type":"text","angle":0,"index":7,"text":"printf format 输 出 参 数 列 表","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"ac23dc07-c9dc-4ab6-9059-3968e2ec060b","page_size":[595,841],"block_position":"30-7"},{"bbox":[87,321,506,336],"type":"text","angle":0,"index":8,"text":"printf \"%-12.5f\\n\" 123.456","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"bf5a17c9-65ba-47f9-8f22-c267ea8133c8","page_size":[595,841],"block_position":"30-8"},{"bbox":[92,360,190,370],"index":9,"angle":0,"type":"table_caption","text":"printf命令的格式说明符","id":"915a094c-7b99-4288-b0f1-6f394d0fd983","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"page_size":[595,841],"block_position":"30-9"},{"bbox":[94,373,299,420],"index":10,"angle":0,"type":"table_body","img_path":"/","id":"9fbbd7cf-4f97-4bba-939f-9d61ee62fd7e","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>c</td><td>字符型</td><td>g/G</td><td>浮点数（自动）</td></tr><tr><td>d</td><td>十进制整数</td><td>o</td><td>八进制</td></tr><tr><td>e/E</td><td>浮点数（科学计数法）</td><td>s</td><td>字符串</td></tr><tr><td>f</td><td>浮点数（小数形式）</td><td>x/X</td><td>十六进制</td></tr></table>","page_idx":30,"page_size":[595,841],"block_position":"30-10"},{"bbox":[93,423,174,433],"index":11,"angle":0,"type":"table_caption","text":"format中还可以使用","id":"4f5988da-db47-4450-b647-421ccb8846de","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"page_size":[595,841],"block_position":"30-11"},{"bbox":[94,433,299,492],"index":12,"angle":0,"type":"table_body","img_path":"/","id":"3a323cfd-ddc6-4c10-8d2e-8a74200d77d6","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>\\a</td><td>警铃</td><td>\\t</td><td>水平制表符</td></tr><tr><td>\\b</td><td>退后一格</td><td>\\v</td><td>垂直制表符</td></tr><tr><td>\\n</td><td>换行</td><td>\\</td><td>反斜杠</td></tr><tr><td>\\f</td><td>换页</td><td>\\&quot;</td><td>双引号</td></tr><tr><td>\\r</td><td>回车</td><td>\\\\&quot;</td><td>百分号</td></tr></table>","page_idx":30,"page_size":[595,841],"block_position":"30-12"},{"bbox":[87,516,132,529],"type":"title","angle":0,"index":13,"text":"# 数组变量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":30,"id":"4c52a912-8440-4c37-8e20-f173a784b95f","page_size":[595,841],"block_position":"30-13"},{"bbox":[86,543,502,557],"type":"text","angle":0,"index":14,"text":"使 用 declare 声 明 或 直 接 给 变 量 名 加 下 标 来 赋 值 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"44d99682-333f-4194-9879-822c19fc4412","page_size":[595,841],"block_position":"30-14"},{"bbox":[87,560,505,572],"type":"text","angle":0,"index":15,"text":"declare -a variable","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"4b1567bc-6031-43c5-b51d-f7f74f3413ae","page_size":[595,841],"block_position":"30-15"},{"bbox":[87,574,506,588],"type":"text","angle":0,"index":16,"text":"variable=(item1 item2 item2 )","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"3c421f77-b67f-4334-a018-eb4f25bf92aa","page_size":[595,841],"block_position":"30-16"},{"bbox":[87,591,506,603],"type":"text","angle":0,"index":17,"text":"variable=(item1 item2 item2 ... )","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"5fafdbe6-71cf-448b-aee9-384a063b9695","page_size":[595,841],"block_position":"30-17"},{"bbox":[87,606,175,619],"type":"text","angle":0,"index":18,"text":"variable[n]=value","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"d5ffd437-cddd-4402-8ea4-93b6b09c3899","page_size":[595,841],"block_position":"30-18"},{"bbox":[88,622,157,635],"type":"text","angle":0,"index":19,"text":"${variable[n]}","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"17344763-6b34-48fe-b1b8-f0360728839d","page_size":[595,841],"block_position":"30-19"},{"bbox":[86,665,296,678],"type":"text","angle":0,"index":20,"text":"Bash 2.x 以上支持一维数组，下标从0 开始。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"359269e9-d0d0-4403-a809-2c837b86e3cd","page_size":[595,841],"block_position":"30-20"},{"bbox":[87,692,127,705],"type":"text","angle":0,"index":21,"text":"Declare","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"96c540dc-8366-4ee2-9ab7-3b7f831afce8","page_size":[595,841],"block_position":"30-21"},{"bbox":[86,719,506,734],"type":"text","angle":0,"index":22,"text":"declare [ 选 项 ] variable[=value]","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":30,"id":"58e2c563-e549-4e21-ab79-5927dca3c24d","page_size":[595,841],"block_position":"30-22"}],[{"bbox":[85,75,595,333],"index":0,"angle":0,"type":"table_body","img_path":"/","id":"ce953ef9-9a15-4818-872f-317bede4ecce","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>选项</td><td>含义</td></tr><tr><td>-r</td><td>将变量设为只读 (readonly)</td></tr><tr><td>-x</td><td>将变量输出到子 shell 中 (export 为全局变量)</td></tr><tr><td>-i</td><td>将变量设为整型 (integer)</td></tr><tr><td>-a</td><td>将变量设置为一个数组 (array)</td></tr><tr><td>-f</td><td>列出函数的名字和定义 (function)</td></tr><tr><td>-F</td><td>只列出函数名</td></tr></table>","page_idx":31,"page_size":[595,841],"block_position":"31-0"},{"bbox":[86,344,507,359],"type":"text","angle":0,"index":1,"text":"条 件 测 试 可 以 判 断 某 个 特 定 条 件 是 否 满 足","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"f6ebfacb-1937-47c8-88ba-b62ef78f8bb8","page_size":[595,841],"block_position":"31-1"},{"bbox":[87,360,505,374],"type":"text","angle":0,"index":2,"text":"测 试 之 后 通 常 会 根 据 不 同 的 测 试 值 选 择 执 行 不 同 任 务","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"38e55de1-9ec8-4acb-a097-433890a965c3","page_size":[595,841],"block_position":"31-2"},{"bbox":[88,376,506,390],"type":"text","angle":0,"index":3,"text":"条 件 测 试 的 种 类","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"ba133345-9aad-4744-8df8-a0d577b54f9e","page_size":[595,841],"block_position":"31-3"},{"bbox":[88,392,506,405],"type":"text","angle":0,"index":4,"text":"命 令 成 功 或 失 败","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"8b0f31f4-e302-4a87-b078-18d7c870afc6","page_size":[595,841],"block_position":"31-4"},{"bbox":[88,407,506,421],"type":"text","angle":0,"index":5,"text":"表 达 式 为 真 或 假","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"ca90bc6c-363d-4d1c-8935-b7fc1cbf34df","page_size":[595,841],"block_position":"31-5"},{"bbox":[88,423,506,436],"type":"text","angle":0,"index":6,"text":"条 件 测 试 的 值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"800e0dfb-cea0-4899-b420-21ba0a5ce50a","page_size":[595,841],"block_position":"31-6"},{"bbox":[88,439,506,452],"type":"text","angle":0,"index":7,"text":"Bash 中 没 有 布 尔 类 型 变 量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"71f80780-94d6-4050-9744-90bf820667e4","page_size":[595,841],"block_position":"31-7"},{"bbox":[88,454,506,467],"type":"text","angle":0,"index":8,"text":"退 出 状 态 为 0 表 示 命 令 成 功 或 表 达 式 为 真","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"5107165c-470e-49f6-9d1d-23e9e3befd02","page_size":[595,841],"block_position":"31-8"},{"bbox":[88,470,506,482],"type":"text","angle":0,"index":9,"text":"非 0 则 表 示 命 令 失 败 或 表 达 式 为 假","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"3c384198-37f7-4116-975c-d647b7697608","page_size":[595,841],"block_position":"31-9"},{"bbox":[88,485,506,498],"type":"text","angle":0,"index":10,"text":"状 态 变 量 $\\$ 7$ 中 保 存 了 退 出 状 态 的 值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"a6094d2f-bf3a-401b-9fd5-3de564a34e00","page_size":[595,841],"block_position":"31-10"},{"bbox":[88,501,506,514],"type":"text","angle":0,"index":11,"text":"语 句","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"975af76d-3386-43d6-b343-e4f85be44deb","page_size":[595,841],"block_position":"31-11"},{"bbox":[88,517,506,529],"type":"text","angle":0,"index":12,"text":"格 式 1 ： test < 测 试 表 达 式 >","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"54ca47c0-1bdb-426e-beba-3820e6dfa71d","page_size":[595,841],"block_position":"31-12"},{"bbox":[88,532,506,545],"type":"text","angle":0,"index":13,"text":"格 式 2 ： [ < 测 试 表 达 式 > ]","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"7a5cc8bd-2940-4331-850d-f41247fa5006","page_size":[595,841],"block_position":"31-13"},{"bbox":[88,547,506,560],"type":"text","angle":0,"index":14,"text":"格 式 3 ： [[ < 测 试 表 达 式 > ]] （ bash 2.x 版 本 以 上 ）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"c9039fe2-65e8-43aa-8a87-219c75bdc351","page_size":[595,841],"block_position":"31-14"},{"bbox":[88,564,506,577],"type":"text","angle":0,"index":15,"text":"说 明","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"5304d8ff-cc70-40bf-a371-f51e29bd9894","page_size":[595,841],"block_position":"31-15"},{"bbox":[88,579,506,592],"type":"text","angle":0,"index":16,"text":"格 式 1 和 格 式 2 是 等 价 的 ， 格 式 3 是 扩 展 的 test 命 令","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"34cd7dec-b138-4e87-883e-478978f8ddb4","page_size":[595,841],"block_position":"31-16"},{"bbox":[88,595,506,608],"type":"text","angle":0,"index":17,"text":"在 [[ ]] 中 可 以 使 用 通 配 符 进 行 模 式 匹 配","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"0336fd38-0c8c-46ab-aa59-e74c35a7e355","page_size":[595,841],"block_position":"31-17"},{"bbox":[88,610,506,624],"type":"text","angle":0,"index":18,"text":"&&, ||, <, 和 $>$ 能 够 正 常 存 在 于 [[ ]] 中 ， 但 不 能 在 [] 中 出 现","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"f4030811-bc6e-4958-b104-40fdaa2cebaa","page_size":[595,841],"block_position":"31-18"},{"bbox":[88,626,506,639],"type":"text","angle":0,"index":19,"text":"[ 和 [[ 之 后 的 字 符 必 须 为 空 格 ， ] 和 ]] 之 前 的 字 符 必 须 为 空 格","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"663fca08-9aec-46ad-a789-c537729bb565","page_size":[595,841],"block_position":"31-19"},{"bbox":[88,641,506,654],"type":"text","angle":0,"index":20,"text":"要 对 整 数 进 行 关 系 运 算 也 可 以 使 用 (()) 进 行 测 试","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"07e654ab-c6e0-4aac-9d03-d220b914ce2c","page_size":[595,841],"block_position":"31-20"},{"bbox":[88,656,506,670],"type":"text","angle":0,"index":21,"text":"条 件 测 试 表 达 式 中 可 用 的 操 作 符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"d6c208da-f04b-4eb1-bd76-b399e0d1543f","page_size":[595,841],"block_position":"31-21"},{"bbox":[88,672,506,686],"type":"text","angle":0,"index":22,"text":"文 件 测 试 操 作 符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"25e44579-f6d7-4e54-ad7c-57ec3c302756","page_size":[595,841],"block_position":"31-22"},{"bbox":[88,688,506,701],"type":"text","angle":0,"index":23,"text":"字 符 串 测 试 操 作 符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"0bb1bc65-2fad-4c93-9725-88ded48a4748","page_size":[595,841],"block_position":"31-23"},{"bbox":[88,704,506,717],"type":"text","angle":0,"index":24,"text":"整 数 二 元 比 较 操 作 符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"b0769a10-f59c-4495-aff0-b48ad52c6991","page_size":[595,841],"block_position":"31-24"},{"bbox":[88,719,506,733],"type":"text","angle":0,"index":25,"text":"使 用 逻 辑 运 算 符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"bd3e062e-1bb7-4517-82a3-393dee9bf9fc","page_size":[595,841],"block_position":"31-25"},{"bbox":[88,735,132,748],"type":"text","angle":0,"index":26,"text":"文件测试","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":31,"id":"dac6d9b5-91df-46b8-8650-578c20b02a73","page_size":[595,841],"block_position":"31-26"}],[{"bbox":[85,74,595,715],"index":0,"angle":0,"type":"table_body","img_path":"/","id":"56a0c306-91ed-44cd-ab8c-484e4e15c288","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>[-f fname]</td><td>fname存在且是普通文件时，返回真（即返回</td></tr><tr><td>[-L fname]</td><td>fname存在且是链接文件时，返回真</td></tr><tr><td>[-d fname]</td><td>fname存在且是一个目录时，返回真</td></tr><tr><td>[-e fname]</td><td>fname（文件或目录）存在时，返回真</td></tr><tr><td>[-s fname]</td><td>fname存在且大小大于0时，返回真</td></tr><tr><td>[-r fname]</td><td>fname（文件或目录）存在且可读时，返回真</td></tr><tr><td>[-w fname]</td><td>fname（文件或目录）存在且可写时，返回真</td></tr><tr><td>[-x fname]</td><td>fname（文件或目录）存在且可执行时，返回</td></tr></table>","page_idx":32,"page_size":[595,841],"block_position":"32-0"},{"bbox":[88,729,143,741],"index":1,"angle":0,"type":"table_footnote","text":"字符串测试","id":"6cf8e7e3-efcf-4068-ac6b-3e7be79b3f8f","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":32,"page_size":[595,841],"block_position":"32-1"}],[{"bbox":[85,73,594,311],"index":0,"angle":0,"type":"table_body","img_path":"/","id":"0a034e6b-fce2-4b82-8a40-591432efdf8a","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>[-z string]</td><td>如果字符串string长度为0，返回真</td></tr><tr><td>[-n string]</td><td>如果字符串string长度不为0，返回真</td></tr><tr><td>[ str1 = str2]</td><td>两字符串相等（也可使用==）返回真</td></tr><tr><td>[ str1 != str2]</td><td>两字符串不等返回真</td></tr><tr><td>[[str1 == str2]]</td><td>两字符串相同返回真</td></tr><tr><td>[[str1 != str2]]</td><td>两字符串不相同返回真</td></tr><tr><td>[[str1~= str2]]</td><td>str2是str1的子串返回真</td></tr><tr><td>[[str1 &gt; str2]]</td><td>str1大于str2返回真</td></tr><tr><td>[[str1 &lt; str2]]</td><td>str1小于str2返回真</td></tr></table>","page_idx":33,"page_size":[595,841],"block_position":"33-0"},{"bbox":[87,324,506,353],"index":1,"angle":0,"type":"table_caption","text":"字 符 串 按 从 左 到 右 对 应 字 符 的 ASCII 码 进 行 比 较整数测试","id":"6e671629-0f39-449e-87b0-b070c3b6d6d1","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":33,"page_size":[595,841],"block_position":"33-1"},{"bbox":[86,354,594,648],"index":2,"angle":0,"type":"table_body","img_path":"/","id":"668f1ea0-c7ce-412a-8ac8-8e9a6cad6fea","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>[int1 -eq int2]</td><td colspan=\"2\">int1 等于 int2 返回真</td></tr><tr><td>[int1 -ne int2]</td><td colspan=\"2\">int1 不等于 int2 返回真</td></tr><tr><td>[int1 -gt int2]</td><td colspan=\"2\">int1 大于 int2 返回真</td></tr><tr><td>[int1 -ge int2]</td><td colspan=\"2\">int1 大于或等于 int2 返回真</td></tr><tr><td>[int1 -lt int2]</td><td colspan=\"2\">int1 小于 int2 返回真</td></tr><tr><td>[int1 -le int2]</td><td colspan=\"2\">int1 小于或等于 int2 返回真</td></tr><tr><td colspan=\"2\">[[int1 -eq int2]]</td><td>int1 等于 int2 返回真</td></tr><tr><td colspan=\"2\">[[int1 -ne int2]]</td><td>int1 不等于 int2 返回真</td></tr><tr><td colspan=\"2\">[[int1 -gt int2]]</td><td>int1 大于 int2 返回真</td></tr><tr><td colspan=\"2\">[[int1 -ge int2]]</td><td>int1 大于或等于 int2 返回真</td></tr><tr><td colspan=\"2\">[[int1 -lt int2]]</td><td>int1 小于 int2 返回真</td></tr><tr><td colspan=\"2\">[[int1 -le int2]]</td><td>int1 小于或等于 int2 返回真</td></tr></table>","page_idx":33,"page_size":[595,841],"block_position":"33-2"},{"bbox":[86,663,500,678],"index":3,"angle":0,"type":"table_caption","text":"操 作 符 两 边 必 须 留 空 格 ！","id":"9cfa9574-89e8-4356-b8fb-d8dae5bb83f5","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":33,"page_size":[595,841],"block_position":"33-3"},{"bbox":[86,692,593,752],"index":4,"angle":0,"type":"table_body","img_path":"/","id":"83137771-a6c3-45cd-b97c-401d528fad51","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>((int1 == int2))</td><td>int1 等于 int2 返回真</td></tr><tr><td>((int1 != int2))</td><td>int1 不等于 int2 返回真</td></tr><tr><td>((int1 &gt; int2))</td><td>int1 大于 int2 返回真</td></tr><tr><td>((int1 &gt;= int2))</td><td>int1 大于或等于 int2 返回真</td></tr><tr><td>((int1 &lt; int2))</td><td>int1 小于 int2 返回真</td></tr><tr><td>((int1 &lt;= int2))</td><td>int1 小于或等于 int2 返回真</td></tr></table>","page_idx":33,"page_size":[595,841],"block_position":"33-4"}],[{"bbox":[86,76,594,190],"index":0,"angle":0,"type":"table_body","lines_deleted":true,"text":"","id":"83137771-a6c3-45cd-b97c-401d528fad51","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"","page_idx":34,"page_size":[595,841],"block_position":"34-0"},{"bbox":[86,191,500,205],"type":"text","angle":0,"index":1,"text":"操 作 符 两 边 的 空 格 可 省 略 ！","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":34,"id":"ce81518d-09b3-43dd-aa2e-d6a674f9427a","page_size":[595,841],"block_position":"34-1"},{"bbox":[86,222,186,235],"type":"title","angle":0,"index":2,"text":"# 方括号前后要留空格","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":34,"id":"225eb878-d3e9-4c16-8276-a00ca47b5b01","page_size":[595,841],"block_position":"34-2"},{"bbox":[86,238,500,251],"type":"text","angle":0,"index":3,"text":"[] 内 不 能 使 用 通 配 符 ！","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":34,"id":"e61b5e75-ae2c-4ef5-9a46-679f3aff8e5c","page_size":[595,841],"block_position":"34-3"},{"bbox":[86,253,304,266],"type":"text","angle":0,"index":4,"text":"在 [[]] 中可以使用 shell 的通配符进行条件匹配","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":34,"id":"0948d24a-f8c7-41c8-bb0a-46f72c3d4b45","page_size":[595,841],"block_position":"34-4"},{"bbox":[86,269,186,282],"type":"text","angle":0,"index":5,"text":"通配符与正则表达式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":34,"id":"4d19aeae-c189-4b57-a5bb-96b95faa9577","page_size":[595,841],"block_position":"34-5"},{"bbox":[105,285,158,297],"type":"title","angle":0,"index":6,"text":"# 通配符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":34,"id":"27af119f-39cb-43c5-95bf-a2da80bd93f0","page_size":[595,841],"block_position":"34-6"},{"bbox":[141,301,297,313],"type":"text","angle":0,"index":7,"text":"o 由 Shell 解析（如 bash, zsh）","id":"0ea7694c-f6d9-4cc5-bc5c-ae4bc3b9ee7b","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":34,"page_size":[595,841],"block_position":"34-7"},{"bbox":[141,316,309,328],"type":"text","angle":0,"index":8,"text":"o 直接匹配文件名，无需外部工具","id":"53c4555e-66fc-40a6-9412-7a7e115bd979","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":34,"page_size":[595,841],"block_position":"34-8"},{"bbox":[141,332,359,345],"type":"text","angle":0,"index":9,"text":"o 例如 rm *.tmp 是 Shell 自身展开文件列表","id":"2119f6b3-e0f3-4505-8eed-41e4cfab2099","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":34,"page_size":[595,841],"block_position":"34-9"},{"bbox":[105,347,179,359],"type":"title","angle":0,"index":11,"text":"# 正则表达式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":34,"id":"0368e9a7-aa3c-4506-8dd2-1d2943ce4b89","page_size":[595,841],"block_position":"34-10"},{"bbox":[141,363,359,376],"type":"text","angle":0,"index":12,"text":"o 由文本处理工具解析（grep, sed, awk 等）","id":"e594b6b0-d451-4b16-b0f1-c70439a6bd9b","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":34,"page_size":[595,841],"block_position":"34-11"},{"bbox":[141,379,320,391],"type":"text","angle":0,"index":13,"text":"o 匹配文本内容，支持更复杂的模式","id":"74edaa62-e01b-4b36-bb1e-521f746f3a28","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":34,"page_size":[595,841],"block_position":"34-12"},{"bbox":[87,394,132,407],"index":15,"angle":0,"type":"table_caption","text":"逻辑测试","id":"c663f559-1b14-4003-896a-627248b65a2b","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":34,"page_size":[595,841],"block_position":"34-13"},{"bbox":[86,407,594,729],"index":16,"angle":0,"type":"table_body","img_path":"/","id":"27ac1bee-639b-4963-9c75-a7ef0e67d5ea","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>[ expr1 -a expr2 ]</td><td colspan=\"2\">逻辑与，都为真时，结果为真</td></tr><tr><td>[ expr1 -o expr2 ]</td><td colspan=\"2\">逻辑或，有一个为真时，结果为真</td></tr><tr><td>[! expr ]</td><td colspan=\"2\">逻辑非</td></tr><tr><td colspan=\"2\">[ [ pattern1 &amp;&amp; pattern2 ]]</td><td>逻辑与</td></tr><tr><td colspan=\"2\">[ [ pattern1 | | pattern2 ]]</td><td>逻辑或</td></tr><tr><td colspan=\"2\">[! ! pattern ]]</td><td>逻辑非</td></tr><tr><td colspan=\"2\">(( expr1 &amp;&amp; expr2 ))</td><td>逻辑与</td></tr><tr><td colspan=\"2\">(( expr1 | | expr2 ))</td><td>逻辑或</td></tr><tr><td colspan=\"2\">([! expr ))</td><td>逻辑非</td></tr></table>","page_idx":34,"page_size":[595,841],"block_position":"34-14"},{"bbox":[86,745,506,761],"type":"footer","angle":0,"index":1000016,"text":"注 ： 不 能 在 (()) 中 做 字 符 串 比 较","color":{"line":"rgba(164, 164, 164, 1)","fill":"rgba(164, 164, 164, 1)"},"page_idx":34,"is_discarded":true,"id":"8d6b37c8-2378-43b0-a02e-22b2efa71713","page_size":[595,841],"block_position":"34-15"}],[{"bbox":[86,78,506,92],"type":"text","angle":0,"index":0,"text":"注 不 能 随 便 添 加 括 号","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"b6d9431b-acb3-4ccd-90cb-fa89c0d2aa46","page_size":[595,841],"block_position":"35-0"},{"bbox":[86,110,506,122],"type":"text","angle":0,"index":1,"text":"(( $x == 1 )) && [[ $name = To? ]]; echo $?","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"c030b57a-b2fe-4dfa-93fd-e59297f31088","page_size":[595,841],"block_position":"35-1"},{"bbox":[86,125,500,138],"type":"text","angle":0,"index":2,"text":"此 处 的 && 并 非 逻 辑 运 算 符 ， 而 是 命 令 聚 合 （ Command Group ）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"8f87d198-4a6b-4241-9824-f7759bfc878b","page_size":[595,841],"block_position":"35-2"},{"bbox":[86,174,170,193],"type":"title","angle":0,"index":3,"text":"# if 分支结构","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":35,"id":"2a138f07-c628-4897-bdf4-62c89ddd48c3","page_size":[595,841],"block_position":"35-3"},{"bbox":[86,230,506,259],"type":"text","angle":0,"index":4,"text":"一般是对逻辑表达式进行判断。根据逻辑表达式的真、假，分走不同的分支。这个表达式也称为条件表达式。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"473650cb-0a01-4290-bd3b-08f0557391ed","page_size":[595,841],"block_position":"35-4"},{"bbox":[87,274,151,286],"type":"title","angle":0,"index":5,"text":"# 1.1 语法格式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":35,"id":"437e97b2-179b-4ce2-9846-bb88c63810da","page_size":[595,841],"block_position":"35-5"},{"bbox":[86,301,285,316],"type":"text","angle":0,"index":6,"text":"这里才是真正所谓的逻辑判断需要&&和||","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"acad6397-ed72-4626-b1fb-e4caa3f3d67a","page_size":[595,841],"block_position":"35-6"},{"bbox":[87,329,254,342],"type":"text","angle":0,"index":7,"text":"下面是if 分支结构的几种语法格式。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"264b4bbc-007b-409b-80c0-4bcd0584e87c","page_size":[595,841],"block_position":"35-7"},{"bbox":[87,344,140,357],"type":"text","angle":0,"index":8,"text":"格式一：if","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"ff8ab2c9-64e1-42cf-b050-3b57c970da3d","page_size":[595,841],"block_position":"35-8"},{"bbox":[86,372,150,386],"type":"text","angle":0,"index":9,"text":"if cond_cmd","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"012cd964-55e0-41e5-968f-8e7c070ee96f","page_size":[595,841],"block_position":"35-9"},{"bbox":[87,401,113,412],"type":"text","angle":0,"index":10,"text":"then","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"ec508407-2a8a-45d3-a50e-514931d31459","page_size":[595,841],"block_position":"35-10"},{"bbox":[98,428,156,439],"type":"text","angle":0,"index":11,"text":"command1","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"2b22fdfb-22dc-498c-a5f2-de9c7de9d593","page_size":[595,841],"block_position":"35-11"},{"bbox":[98,455,158,467],"type":"text","angle":0,"index":12,"text":"command2","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"04ede39f-9cae-4e4c-af06-88b3849331ea","page_size":[595,841],"block_position":"35-12"},{"bbox":[98,510,159,523],"type":"text","angle":0,"index":14,"text":"commandN","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"d0615bae-7189-4dca-af1f-25fa2ae59593","page_size":[595,841],"block_position":"35-13"},{"bbox":[87,538,97,549],"type":"text","angle":0,"index":15,"text":"fi","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"280fefdd-88e6-46ab-8c1f-eb4f82664118","page_size":[595,841],"block_position":"35-14"},{"bbox":[86,592,164,606],"type":"text","angle":0,"index":16,"text":"格式二：if-else","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"efe2997e-0cfb-4e4b-868d-06313f892c7f","page_size":[595,841],"block_position":"35-15"},{"bbox":[87,620,150,634],"type":"text","angle":0,"index":17,"text":"if cond_cmd","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"ad12075f-2b6e-4456-aa7a-26a249103d37","page_size":[595,841],"block_position":"35-16"},{"bbox":[87,649,113,660],"type":"text","angle":0,"index":18,"text":"then","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"a46f4312-1e96-41fd-bc21-27d9acbc4dbb","page_size":[595,841],"block_position":"35-17"},{"bbox":[98,676,156,687],"type":"text","angle":0,"index":19,"text":"command1","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"73e0a545-54ab-4b39-b930-60fae5599b7e","page_size":[595,841],"block_position":"35-18"},{"bbox":[98,703,158,715],"type":"text","angle":0,"index":20,"text":"command2","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":35,"id":"75916e7b-87f5-4a7d-89bf-48a8289e4d87","page_size":[595,841],"block_position":"35-19"}],[{"bbox":[88,79,160,174],"index":0,"angle":0,"type":"code","text":"```txt\ncommandN else command fi\n```","id":"b1a6461e-443a-4c33-832e-17f5944deeea","color":{"line":"rgba(200, 140, 58, 1)","fill":"rgba(200, 140, 58, 1)"},"page_idx":36,"page_size":[595,841],"block_position":"36-0"},{"bbox":[87,216,184,229],"index":1,"angle":0,"type":"code_caption","text":"格式三：if-elif-else","id":"2cc64718-3b81-4059-afbd-614ce171ec9a","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":36,"page_size":[595,841],"block_position":"36-1"},{"bbox":[88,243,160,476],"index":2,"angle":0,"type":"code","text":"```txt\nif cond_cmd  \nthen command1  \nelif con_cmd2  \nthen command2  \nelse commandN  \nfi\n```","id":"775d6d11-e6ed-4a9f-9175-96c8f2a4ed32","color":{"line":"rgba(200, 140, 58, 1)","fill":"rgba(200, 140, 58, 1)"},"page_idx":36,"page_size":[595,841],"block_position":"36-2"},{"bbox":[86,492,505,537],"type":"text","angle":0,"index":3,"text":"if 其实是判断其后面的命令是否执行成功为分支条件的，因此 if 之后不一定必须是test 命令，可以是任何其他的命令，只是这些命令一般不需要其输出，因为只需要知道执行成功与否，输出并不重要，一般就通过重定向到/dev/null 解决。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":36,"id":"48bd81a7-c77a-44cd-9e02-aa8e6640de74","page_size":[595,841],"block_position":"36-3"},{"bbox":[86,550,508,706],"index":4,"angle":0,"type":"code","text":"```txt\nif expr1 # 如果 expr1 为真（返回值为0) then # 那么 commands1 # 执行语句块 commands1 elif expr2 # 若 expr1 不真，而 expr2 为真 then # 那么 commands2 # 执行语句块 commands2 ... ... # 可以有多个 elif 语句 else # else 最多只能有一个 commands4 fi # if 语句必须以单词 fi 终止\n```","id":"e1da2bf4-d1f3-4186-858e-3cf98acef350","color":{"line":"rgba(200, 140, 58, 1)","fill":"rgba(200, 140, 58, 1)"},"page_idx":36,"page_size":[595,841],"block_position":"36-4"}],[{"bbox":[99,77,312,90],"type":"text","angle":0,"index":0,"text":"$\\spadesuit$ elif可以有任意多个（o个或多个)","id":"8b1dd095-642d-4638-a553-fe77720b9b35","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"page_size":[595,841],"block_position":"37-0"},{"bbox":[100,96,314,111],"type":"text","angle":0,"index":1,"text":"$\\bullet$ else最多只能有一个 (o个或1个)","id":"a1cd1fd8-2601-4075-a297-d24db7e8f637","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"page_size":[595,841],"block_position":"37-1"},{"bbox":[100,116,268,131],"type":"text","angle":0,"index":2,"text":"$\\bullet$ if 语句必须以fi表示结束","id":"d1013664-8866-424e-8444-f852ca5a2cf0","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"page_size":[595,841],"block_position":"37-2"},{"bbox":[99,139,411,169],"type":"text","angle":0,"index":3,"text":"exprx通常为条件测试表达式；也可以是多个命令，以最后一个命令的退出状态为条件值。","id":"7347cad7-6c1f-4de1-9a74-d74715a077c9","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"page_size":[595,841],"block_position":"37-3"},{"bbox":[99,176,411,221],"type":"text","angle":0,"index":4,"text":"$\\cdot$ commands为可执行语句块，如果为空，需使用shell提供的空命令“：”，即冒号。该命令不做任何事情，只返回一个退出状态0","id":"773088c2-0f72-4703-b36d-abd33e4e04fa","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"page_size":[595,841],"block_position":"37-4"},{"bbox":[100,227,233,242],"type":"text","angle":0,"index":5,"text":"$\\bullet$ if语句可以嵌套使用","id":"be212319-f52e-4e35-94e7-1aac528d4b61","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"page_size":[595,841],"block_position":"37-5"},{"bbox":[86,333,444,346],"type":"text","angle":0,"index":7,"text":"case 结构适合取值确定的多种情况的判断，但是也支持带通配符的模糊判断。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"id":"63ec634c-8a78-4845-8643-295056d92e2f","page_size":[595,841],"block_position":"37-6"},{"bbox":[87,367,193,386],"type":"title","angle":0,"index":8,"text":"# case语法格式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":37,"id":"30d911db-adb2-4c1b-a5ca-bb618f7b52e3","page_size":[595,841],"block_position":"37-7"},{"bbox":[86,423,498,451],"type":"text","angle":0,"index":9,"text":"Shell case 语句为多选择语句。可以用 case 语句匹配一个值与一个模式，如果匹配成功，执行相匹配的命令。case 语句格式如下：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"id":"257e827f-2c8f-4c92-8258-3ee204379ede","page_size":[595,841],"block_position":"37-8"},{"bbox":[87,466,137,478],"type":"text","angle":0,"index":10,"text":"case 值 in","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"id":"6f73a9ce-7c87-4e34-8059-0878f939224e","page_size":[595,841],"block_position":"37-9"},{"bbox":[87,493,123,506],"type":"text","angle":0,"index":11,"text":"模式 1)","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"id":"fe05a0e4-041d-4005-9c0f-5af744c6c040","page_size":[595,841],"block_position":"37-10"},{"bbox":[98,521,156,533],"type":"text","angle":0,"index":12,"text":"command1","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"id":"0ef3a6cc-b5c6-477f-8f7f-0c0237de6db3","page_size":[595,841],"block_position":"37-11"},{"bbox":[98,549,157,560],"type":"text","angle":0,"index":13,"text":"command2","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"id":"6d2c1efd-34db-482b-9f52-5ae588b04761","page_size":[595,841],"block_position":"37-12"},{"bbox":[98,603,158,615],"type":"text","angle":0,"index":15,"text":"commandN","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"id":"7bf807c0-3eb5-40ef-8402-5dcdc37c63cd","page_size":[595,841],"block_position":"37-13"},{"bbox":[87,659,123,671],"type":"text","angle":0,"index":17,"text":"模式 2）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"id":"3b5d04de-1d56-4785-b0ff-64eb865a990f","page_size":[595,841],"block_position":"37-14"},{"bbox":[98,687,156,698],"type":"text","angle":0,"index":18,"text":"command1","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"id":"ce2f07cd-1a06-4f01-966e-78dcacc3c545","page_size":[595,841],"block_position":"37-15"},{"bbox":[98,714,157,726],"type":"text","angle":0,"index":19,"text":"command2","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":37,"id":"1288a0fc-2a5b-4a44-9390-fcabe96ea8aa","page_size":[595,841],"block_position":"37-16"}],[{"bbox":[99,79,158,89],"type":"text","angle":0,"index":0,"text":"commandN","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"id":"c359b08c-416b-46ac-8baa-f35618802cae","page_size":[595,841],"block_position":"38-0"},{"bbox":[88,135,113,144],"type":"text","angle":0,"index":1,"text":"esac","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"id":"fb84b039-ae1f-4b7a-9819-df47ecafd38d","page_size":[595,841],"block_position":"38-1"},{"bbox":[104,189,345,201],"type":"text","angle":0,"index":2,"text":" case 之后是取值，所以变量名之前不要忘记了$","id":"2c3334de-388f-4fd1-8f00-49599ebd87a7","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"page_size":[595,841],"block_position":"38-2"},{"bbox":[105,216,232,229],"type":"text","angle":0,"index":3,"text":"取值后面必须为单词in","id":"a0bacc70-24b5-4804-94fa-51cb69e87114","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"page_size":[595,841],"block_position":"38-3"},{"bbox":[105,244,271,257],"type":"text","angle":0,"index":4,"text":" 每一模式必须以右小括号) 结束","id":"84e5bcdd-86eb-4ae9-a0f4-cadbf08631cf","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"page_size":[595,841],"block_position":"38-4"},{"bbox":[105,272,231,284],"type":"text","angle":0,"index":5,"text":"取值可以为变量或常数","id":"27a4c16b-bec8-4c44-8350-2cf2c8566eca","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"page_size":[595,841],"block_position":"38-5"},{"bbox":[104,299,504,327],"type":"text","angle":0,"index":6,"text":"匹配发现取值符合某一模式后，其间所有命令开始执行直至双分 ;; 号结束，表示break","id":"d92ec4a3-1b8a-4f59-93cb-167c5f5eebec","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"page_size":[595,841],"block_position":"38-6"},{"bbox":[105,342,336,355],"type":"text","angle":0,"index":7,"text":"执行完匹配模式相应命令后不再继续其他模式","id":"1366d5e1-898b-491f-844e-f7b722c2f060","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"page_size":[595,841],"block_position":"38-7"},{"bbox":[104,370,409,383],"type":"text","angle":0,"index":8,"text":" 如果无一匹配模式，使用星号* 捕获该值，再执行后面的命令","id":"70f6cb16-9885-4c2b-bd4d-69533fdaf2b2","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"page_size":[595,841],"block_position":"38-8"},{"bbox":[105,397,356,411],"type":"text","angle":0,"index":9,"text":"需要一个 esac（就是 case 反过来）作为结束标记","id":"a6ea42ef-434e-41bf-b0ef-db931ac74b6f","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"page_size":[595,841],"block_position":"38-9"},{"bbox":[122,444,405,470],"type":"text","angle":0,"index":11,"text":"$\\cdot$ 表达式expr按顺序匹配每个模式，一旦有一个模式匹配成功，则执行该模式后面的所有命令，然后退出case。","id":"bde9e6b4-6db4-45f9-a8f3-40bb8e3fac6b","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"page_size":[595,841],"block_position":"38-10"},{"bbox":[121,480,411,506],"type":"text","angle":0,"index":12,"text":"$\\bullet$ 如果expr 没有找到匹配的模式，则执行缺省值“*）”后面的命令块(类似于if 中的else); \"*)”可以不出现。","id":"fe8e119b-72bf-4de8-ae43-a87ca57312df","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"page_size":[595,841],"block_position":"38-11"},{"bbox":[122,520,398,533],"type":"text","angle":0,"index":13,"text":"$\\bullet$ 所给的匹配模式pattern中可以含有通配符和“」” ","id":"128a36ec-86c7-4a77-b3bc-dea15619a4e8","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"page_size":[595,841],"block_position":"38-12"},{"bbox":[121,546,405,572],"type":"text","angle":0,"index":14,"text":"$\\bullet$ 每个命令块的最后必须有一个双分号，可以独占一行，或放在最后一个命令的后面。","id":"3698d1ad-059e-46fd-910f-f4d188fc78fa","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"page_size":[595,841],"block_position":"38-13"},{"bbox":[86,615,236,634],"type":"title","angle":0,"index":16,"text":"# for 循环一般格式为：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":38,"id":"13458055-e5a7-45b2-a5ca-bc68c44e4d3e","page_size":[595,841],"block_position":"38-14"},{"bbox":[86,671,241,682],"type":"text","angle":0,"index":17,"text":"for var in item1 item2 ... itemN","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"id":"da7449bc-b8e9-49ad-99c3-4e86d5f44322","page_size":[595,841],"block_position":"38-15"},{"bbox":[98,727,155,737],"type":"text","angle":0,"index":19,"text":"command1","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":38,"id":"9b71a59f-db92-464f-bfa6-0fc3f1f8dd25","page_size":[595,841],"block_position":"38-16"}],[{"bbox":[98,79,157,89],"type":"text","angle":0,"index":0,"text":"command2","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"433429c4-43f9-43a9-be20-c7afdbfd66d2","page_size":[595,841],"block_position":"39-0"},{"bbox":[98,134,158,145],"type":"text","angle":0,"index":2,"text":"commandN","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"9dfaa23e-77c8-453a-864e-67f9be12b9b0","page_size":[595,841],"block_position":"39-1"},{"bbox":[88,162,116,173],"type":"text","angle":0,"index":3,"text":"done","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"becd0c0d-a0d6-4b67-ac4f-869d073867e9","page_size":[595,841],"block_position":"39-2"},{"bbox":[86,216,499,246],"type":"text","angle":0,"index":4,"text":"上述for 循环中，in 之后是取值列表，逐个赋值给var变量，每次赋值就进行一次循环。这种循环类似于一些高级语言中的for each 循环结构。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"af0c966f-6ec6-413e-b236-f13e1b889fe1","page_size":[595,841],"block_position":"39-3"},{"bbox":[86,259,506,273],"type":"text","angle":0,"index":5,"text":"列表 list 可以是命令替换、变量名替换、字符串和文件名列表 ( 可包含通配符 )，每个列表","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"cabdced0-0b17-4606-89e4-3f04039d25a2","page_size":[595,841],"block_position":"39-4"},{"bbox":[87,275,506,288],"type":"text","angle":0,"index":6,"text":"项 以 空 格 间 隔","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"0b537031-20e9-4bd8-8fdc-00a7590b5432","page_size":[595,841],"block_position":"39-5"},{"bbox":[98,290,506,304],"type":"text","angle":0,"index":7,"text":"for 循 环 执 行 的 次 数 取 决 于 列 表 list 中 单 词 的 个 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"bab5b038-bafa-4c2b-9d27-3b6839383feb","page_size":[595,841],"block_position":"39-6"},{"bbox":[112,306,506,320],"type":"text","angle":0,"index":8,"text":"可 以 省 略 in list ， 省 略 时 相 当 于 in \"$@\"","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"64d0b996-5bf8-41bc-9ada-4b553425fb2a","page_size":[595,841],"block_position":"39-7"},{"bbox":[86,349,324,364],"type":"text","angle":0,"index":9,"text":"另外，在 for 循环结构中，可以使用双小括号形式。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"1489687b-b50d-4668-8259-825964f73310","page_size":[595,841],"block_position":"39-8"},{"bbox":[86,377,182,390],"type":"text","angle":0,"index":10,"text":"for $( ( \\mathrm { i } { = } 0 ; \\mathrm { i } { < } 1 0 0 ; \\mathrm { i } { + } + ) )$ ","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"984878da-4285-4dc2-a933-f1056ceb3076","page_size":[595,841],"block_position":"39-9"},{"bbox":[87,406,103,416],"type":"text","angle":0,"index":11,"text":"do","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"0a345ad5-569b-44cd-844b-4988c84a3104","page_size":[595,841],"block_position":"39-10"},{"bbox":[87,460,116,471],"type":"text","angle":0,"index":13,"text":"done","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"c4bcc525-9d24-4fbf-a1e0-a012e9733ab2","page_size":[595,841],"block_position":"39-11"},{"bbox":[87,487,134,501],"type":"text","angle":0,"index":14,"text":"break [n]","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"fe0782bb-cac5-49cd-be19-6006c75d51e9","page_size":[595,841],"block_position":"39-12"},{"bbox":[86,515,500,528],"type":"text","angle":0,"index":15,"text":"用 于 强 行 退 出 当 前 循 环 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"349bf6eb-db9e-4aac-a64d-bf5c5a66710b","page_size":[595,841],"block_position":"39-13"},{"bbox":[86,530,504,544],"type":"text","angle":0,"index":16,"text":"如果是嵌套循环，则 break 命令后面可以跟一数字 n，表示退出第 n 重循环（最里面的为","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"e76deca6-e7f0-43ba-8401-34b2ecf1cd09","page_size":[595,841],"block_position":"39-14"},{"bbox":[87,546,500,560],"type":"text","angle":0,"index":17,"text":"第 重 循 环 ） 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"aa8cb651-7b3c-4eb3-93ea-3fbeee7118b6","page_size":[595,841],"block_position":"39-15"},{"bbox":[87,563,504,575],"type":"text","angle":0,"index":18,"text":"continue","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"e2a26353-467e-495b-a837-a482b766df91","page_size":[595,841],"block_position":"39-16"},{"bbox":[86,577,499,591],"type":"text","angle":0,"index":19,"text":"用 于 忽 略 本 次 循 环 的 剩 余 部 分 ， 回 到 循 环 的 顶 部 ， 继 续 下 一 次 循 环 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"dcf3b140-29f2-40e5-972d-e3053a35ef11","page_size":[595,841],"block_position":"39-17"},{"bbox":[89,593,475,607],"type":"text","angle":0,"index":20,"text":"如果是嵌套循环，continue 命令后面也可跟一数字 n，表示回到第 n 重循环的顶部","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"2a18f609-17a6-4a7a-a072-26eb0ef4ef84","page_size":[595,841],"block_position":"39-18"},{"bbox":[86,620,345,634],"type":"text","angle":0,"index":21,"text":"注意跟 case 的区别，for 之后是变量名，所以不要加$。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"3e6c8104-63e1-45d6-878f-10851db33d4d","page_size":[595,841],"block_position":"39-19"},{"bbox":[86,648,504,677],"type":"text","angle":0,"index":22,"text":"while 循环用于不断执行一系列命令，也用于从输入文件中读取数据；命令通常为测试条件。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":39,"id":"a49e9d12-ff30-44c7-abc1-8e638f12032b","page_size":[595,841],"block_position":"39-20"}],[{"bbox":[86,84,303,103],"type":"title","angle":0,"index":0,"text":"# while 循环结构的语法格式为：","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":40,"id":"ed9f916a-dc29-41a3-98de-dab66e67db77","page_size":[595,841],"block_position":"40-0"},{"bbox":[86,140,170,153],"type":"text","angle":0,"index":1,"text":"while cond_cmd","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"4f99b243-716c-4785-aea1-f97074d206b7","page_size":[595,841],"block_position":"40-1"},{"bbox":[87,169,103,179],"type":"text","angle":0,"index":2,"text":"do","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"ef9ffd08-ba50-478f-952c-714db7d34830","page_size":[595,841],"block_position":"40-2"},{"bbox":[98,195,151,206],"type":"text","angle":0,"index":3,"text":"command","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"b1a15753-3aa3-40b5-9ccc-f89cbe098307","page_size":[595,841],"block_position":"40-3"},{"bbox":[87,223,115,233],"type":"text","angle":0,"index":4,"text":"done","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"504d3001-e5ef-442f-8667-70a0f801d996","page_size":[595,841],"block_position":"40-4"},{"bbox":[86,278,498,306],"type":"text","angle":0,"index":5,"text":"while循环需要弄清楚的是条件命令执行成功的时候做循环，直到条件命令执行不成功，则退出循环。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"6b1a4138-88b9-4731-abae-04a8cff8f9ed","page_size":[595,841],"block_position":"40-5"},{"bbox":[87,321,150,333],"type":"title","angle":0,"index":6,"text":"# 2.3 无限循环","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":40,"id":"c6e9bd04-cb63-4ce3-82ad-feaf963e9f0b","page_size":[595,841],"block_position":"40-6"},{"bbox":[87,349,122,360],"type":"text","angle":0,"index":7,"text":"while :","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"009e7fb4-c41d-43d3-8f0d-08b74b2e73d5","page_size":[595,841],"block_position":"40-7"},{"bbox":[87,377,103,387],"type":"text","angle":0,"index":8,"text":"do","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"a9f0c811-d3b2-48a9-b638-bd0dad8203bc","page_size":[595,841],"block_position":"40-8"},{"bbox":[98,404,151,415],"type":"text","angle":0,"index":9,"text":"command","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"8f713fbe-232c-4005-9ebc-f8d61c3ebfc3","page_size":[595,841],"block_position":"40-9"},{"bbox":[87,432,115,443],"type":"text","angle":0,"index":10,"text":"done","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"d7dc9fdf-3852-4470-ab78-b409612948e0","page_size":[595,841],"block_position":"40-10"},{"bbox":[87,486,111,498],"type":"text","angle":0,"index":11,"text":"或者","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"ec320e00-f1b1-4d4f-8db8-62fa1cfd0fa1","page_size":[595,841],"block_position":"40-11"},{"bbox":[87,514,139,525],"type":"text","angle":0,"index":12,"text":"while true","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"e3163587-8435-4317-9e6d-97864e34b38a","page_size":[595,841],"block_position":"40-12"},{"bbox":[87,542,103,552],"type":"text","angle":0,"index":13,"text":"do","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"b1612aae-34cf-4198-9dbd-e47afe74f5ad","page_size":[595,841],"block_position":"40-13"},{"bbox":[98,570,151,581],"type":"text","angle":0,"index":14,"text":"command","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"b830c8d4-4084-4835-874e-49fc34e81ed6","page_size":[595,841],"block_position":"40-14"},{"bbox":[87,597,115,608],"type":"text","angle":0,"index":15,"text":"done","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"9aa427ec-a7dd-4773-b36a-0d215e6318a5","page_size":[595,841],"block_position":"40-15"},{"bbox":[87,652,111,664],"type":"text","angle":0,"index":16,"text":"或者","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"24d466e1-29c7-4eaa-9ca3-1ce17cd23e23","page_size":[595,841],"block_position":"40-16"},{"bbox":[87,679,133,692],"type":"text","angle":0,"index":17,"text":"for (( ; ; ))","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"15385a27-abe9-424a-be42-bb76e5025f5a","page_size":[595,841],"block_position":"40-17"},{"bbox":[86,707,505,751],"type":"text","angle":0,"index":18,"text":"until 循环执行一系列命令直至条件为真时停止。 until 循环与while 循环在处理方式上刚好相反。 一般 while 循环优于until 循环，但在某些时候—也只是极少数情况下，until 循环更加有用。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":40,"id":"d61a532e-f626-4952-9991-f188297aac90","page_size":[595,841],"block_position":"40-18"}],[{"bbox":[87,79,160,92],"type":"text","angle":0,"index":0,"text":"until 语法格式:","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"02f09f54-ab1c-4ed9-bcf2-def8bf7fb9dc","page_size":[595,841],"block_position":"41-0"},{"bbox":[87,106,165,120],"type":"text","angle":0,"index":1,"text":"until cond_cmd","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"9d659e76-9903-4fef-9bfc-9df10e622824","page_size":[595,841],"block_position":"41-1"},{"bbox":[88,134,103,145],"type":"text","angle":0,"index":2,"text":"do","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"b8fcb6c8-ae88-46c6-8ce5-189d0c49a424","page_size":[595,841],"block_position":"41-2"},{"bbox":[98,162,151,173],"type":"text","angle":0,"index":3,"text":"command","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"3db33f08-164a-4282-a366-85b8e7bf83f7","page_size":[595,841],"block_position":"41-3"},{"bbox":[88,190,116,200],"type":"text","angle":0,"index":4,"text":"done","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"f67d2a56-c8d2-411f-8993-07372de09dd8","page_size":[595,841],"block_position":"41-4"},{"bbox":[86,244,493,258],"type":"text","angle":0,"index":5,"text":"条件可为任意测试条件，测试发生在循环末尾，因此循环至少执行一次，请注意这一点。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"e55d925d-9798-4fc7-8d75-0d8d42c0749d","page_size":[595,841],"block_position":"41-5"},{"bbox":[87,272,157,285],"type":"text","angle":0,"index":6,"text":"until false; do","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"1bf25d62-341c-40c8-91d2-90c257851997","page_size":[595,841],"block_position":"41-6"},{"bbox":[98,301,156,312],"type":"text","angle":0,"index":7,"text":"commands","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"ebd038ac-b071-4a7f-b621-1ccda26164ba","page_size":[595,841],"block_position":"41-7"},{"bbox":[98,327,320,340],"type":"text","angle":0,"index":8,"text":"[ condition ] && break # 条件满足时退出循环","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"6c68578f-3654-4eda-ae09-91a4dd8949e2","page_size":[595,841],"block_position":"41-8"},{"bbox":[87,355,116,366],"type":"text","angle":0,"index":9,"text":"done","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"6d66fe8e-ca59-4a23-99b4-d565a32218ae","page_size":[595,841],"block_position":"41-9"},{"bbox":[86,382,505,395],"type":"text","angle":0,"index":10,"text":"一 般 地 ， 使 用 while 循 环 配 合 case 实 现","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"c699d88a-e043-4b86-8539-7243c58dcf18","page_size":[595,841],"block_position":"41-10"},{"bbox":[87,425,200,439],"type":"title","angle":0,"index":11,"text":"# 后台执行循环（done &","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":41,"id":"1674cf2b-9d98-431a-a3ba-ecbfda841238","page_size":[595,841],"block_position":"41-11"},{"bbox":[86,452,505,466],"type":"text","angle":0,"index":12,"text":"Bash 提 供 了 专 门 的 select 循 环","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"37d3fa35-b921-4c8e-97e0-8e0dc4d9e918","page_size":[595,841],"block_position":"41-12"},{"bbox":[87,468,505,481],"type":"text","angle":0,"index":13,"text":"select 循 环 主 要 用 于 创 建 菜 单","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"cc169a9c-08ec-49a2-a55d-d1b052dc2ba4","page_size":[595,841],"block_position":"41-13"},{"bbox":[87,483,505,497],"type":"text","angle":0,"index":14,"text":"select 是 个 无 限 循 环","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"05a79c48-5e5f-497d-958c-3877c4014314","page_size":[595,841],"block_position":"41-14"},{"bbox":[87,499,505,513],"type":"text","angle":0,"index":15,"text":"通 常 要 配 合 case 语 句 处 理 不 同 的 选 单 及 退 出","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"7561f445-0892-4b3a-ba48-beeeae1a4ce2","page_size":[595,841],"block_position":"41-15"},{"bbox":[87,515,505,528],"type":"text","angle":0,"index":16,"text":"select 循 环 的 退 出","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"e0f30f33-9d65-4298-8f4d-d110d7d41c9d","page_size":[595,841],"block_position":"41-16"},{"bbox":[87,530,505,544],"type":"text","angle":0,"index":17,"text":"按 $\\mathsf { c t r } \\mathsf { l } { + } \\mathsf { c }$ 退 出 循 环","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"26053b2e-6e15-4d53-a125-4950c3d44a97","page_size":[595,841],"block_position":"41-17"},{"bbox":[87,545,505,560],"type":"text","angle":0,"index":18,"text":"在 循 环 体 内 用 break 命 令 退 出 循 环","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"2e6a387b-f24e-46dc-bd61-4797e63c4f6d","page_size":[595,841],"block_position":"41-18"},{"bbox":[87,561,505,575],"type":"text","angle":0,"index":19,"text":"或 用 exit 命 令 终 止 脚 本","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"1be7a7a3-c8b7-4637-86b3-56a07abaeb85","page_size":[595,841],"block_position":"41-19"},{"bbox":[87,577,146,590],"type":"text","angle":0,"index":20,"text":"#!/bin/bash","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"75c196aa-5441-4241-a77d-c561e33776b7","page_size":[595,841],"block_position":"41-20"},{"bbox":[87,592,505,607],"type":"text","angle":0,"index":21,"text":"## filename: what-lang-do-you-like_while.sh","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"2379a77d-b6fe-4dfe-9839-bba031237487","page_size":[595,841],"block_position":"41-21"},{"bbox":[87,608,505,621],"type":"text","angle":0,"index":22,"text":"while","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"b447aedb-c9d0-4e75-a335-341e0ae440d6","page_size":[595,841],"block_position":"41-22"},{"bbox":[87,624,103,636],"type":"text","angle":0,"index":23,"text":"do","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"5e5c1da4-a339-4cce-8ced-7f8be1329a61","page_size":[595,841],"block_position":"41-23"},{"bbox":[160,640,505,654],"type":"text","angle":0,"index":24,"text":"echo \"====== Scripting Language ======\"","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"9050b983-3d74-4012-8249-0ea4f23f157d","page_size":[595,841],"block_position":"41-24"},{"bbox":[264,655,505,668],"type":"text","angle":0,"index":25,"text":"echo \"1) bash\"","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"a9cd99e6-349a-47be-9c67-354f69034ace","page_size":[595,841],"block_position":"41-25"},{"bbox":[264,671,505,684],"type":"text","angle":0,"index":26,"text":"echo \"2) perl\"","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"faf6f339-2280-4a9c-8d2a-ddb79ac107a6","page_size":[595,841],"block_position":"41-26"},{"bbox":[258,687,505,700],"type":"text","angle":0,"index":27,"text":"echo \"3) python\"","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"833868f9-877d-4c0a-b241-5b91b09ecd2d","page_size":[595,841],"block_position":"41-27"},{"bbox":[264,703,505,715],"type":"text","angle":0,"index":28,"text":"echo \"4) ruby\"","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"b7071b26-05a4-4ef5-8e1f-8fac9d8c03d6","page_size":[595,841],"block_position":"41-28"},{"bbox":[227,718,505,731],"type":"text","angle":0,"index":29,"text":"echo \"5) (Quit) 1","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"e804024c-056e-4034-b413-51eade21ca72","page_size":[595,841],"block_position":"41-29"},{"bbox":[113,733,505,747],"type":"text","angle":0,"index":30,"text":"read -p \"What is your preferred scripting language? \" lang","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"6bf144d9-ef9d-4157-84ea-a1ade95a567d","page_size":[595,841],"block_position":"41-30"},{"bbox":[266,750,505,762],"type":"text","angle":0,"index":31,"text":"case $lang in","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":41,"id":"80fe2ce2-5645-4536-be23-8a200be98e8f","page_size":[595,841],"block_position":"41-31"}],[{"bbox":[99,77,508,91],"type":"text","angle":0,"index":0,"text":"1|bash) echo \"You selected bash\" ","id":"5adb44d3-e190-4a4b-80bb-baec0b79595d","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"page_size":[595,841],"block_position":"42-0"},{"bbox":[98,94,507,108],"type":"text","angle":0,"index":1,"text":"2|perl) echo \"You selected perl\"","id":"f74d6d7d-249c-45f5-a859-c7944ca15b99","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"page_size":[595,841],"block_position":"42-1"},{"bbox":[99,110,506,124],"type":"text","angle":0,"index":2,"text":"3|python) echo \"You selected python\";;","id":"b82147f2-f00e-4dcc-8a0d-7e907396b2d7","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"page_size":[595,841],"block_position":"42-2"},{"bbox":[99,126,506,139],"type":"text","angle":0,"index":3,"text":"4|ruby) echo \"You selected ruby\" ;;","id":"e0650360-fe28-4f6a-bd5b-0d4fb4587845","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"page_size":[595,841],"block_position":"42-3"},{"bbox":[99,141,506,154],"type":"text","angle":0,"index":4,"text":"5|quit) break ;;","id":"8e3a52f2-f810-4f21-b576-4e98f9c3a5ed","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"page_size":[595,841],"block_position":"42-4"},{"bbox":[481,158,506,168],"type":"text","angle":0,"index":6,"text":"esac","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"a1562b3c-5acd-4b4e-bf35-5e84b788b434","page_size":[595,841],"block_position":"42-5"},{"bbox":[86,173,116,185],"type":"text","angle":0,"index":7,"text":"done","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"d2815962-57fb-4604-ac77-5ad3a0c9ca71","page_size":[595,841],"block_position":"42-6"},{"bbox":[86,188,142,201],"type":"text","angle":0,"index":8,"text":"select 语法","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"1f8734e5-001c-4553-ad82-d1265b2c150b","page_size":[595,841],"block_position":"42-7"},{"bbox":[86,214,508,229],"type":"text","angle":0,"index":9,"text":"按 数 值 顺 序 排 列 的 菜 单 项 （ list item ） 会 显 示 到 标 准 错 误","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"fdf2df54-482a-4d7f-b8bd-2c63bceb5647","page_size":[595,841],"block_position":"42-8"},{"bbox":[88,231,506,244],"type":"text","angle":0,"index":10,"text":"菜 单 项 的 间 隔 符 由 环 境 变 量 IFS 决 定","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"e232e964-047a-4e84-8f58-ce0740bb5b53","page_size":[595,841],"block_position":"42-9"},{"bbox":[88,246,506,259],"type":"text","angle":0,"index":11,"text":"用 于 引 导 用 户 输 入 的 提 示 信 息 存 放 在 环 境 变 量 PS3 中","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"b36b050b-aa6b-42aa-a209-071186f1d211","page_size":[595,841],"block_position":"42-10"},{"bbox":[88,262,506,275],"type":"text","angle":0,"index":12,"text":"用 户 输 入 的 值 会 被 存 储 在 内 置 变 量 RELAY 中","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"85bb4e60-e0fe-427a-97b0-72b3b9ea104b","page_size":[595,841],"block_position":"42-11"},{"bbox":[88,278,506,290],"type":"text","angle":0,"index":13,"text":"用 户 直 接 输 入 回 车 将 重 新 显 示 菜 单","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"c884d198-a443-4737-8f23-dfc92522ec7b","page_size":[595,841],"block_position":"42-12"},{"bbox":[88,293,506,306],"type":"text","angle":0,"index":14,"text":"与 for 循 环 类 似 ， 省 略 in list 时 等 价 于 in “$*”","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"bd43ca03-9749-423b-8f6f-4fd5bd3d489c","page_size":[595,841],"block_position":"42-13"},{"bbox":[88,309,506,322],"type":"text","angle":0,"index":15,"text":"select variable in list","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"d3e1628d-3e51-47b2-a551-9e94b12dd706","page_size":[595,841],"block_position":"42-14"},{"bbox":[88,324,506,338],"type":"text","angle":0,"index":16,"text":"do # 循 环 开 始 的 标 志","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"c1d3a3ac-ea29-4346-9fd7-bf4c2982a634","page_size":[595,841],"block_position":"42-15"},{"bbox":[88,339,506,354],"type":"text","angle":0,"index":17,"text":"commands # 循 环 变 量 每 取 一 次 值 ， 循 环 体 就 执 行 一 遍","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"3151433b-e0c3-42b8-8495-3a15e6becc0d","page_size":[595,841],"block_position":"42-16"},{"bbox":[88,356,506,369],"type":"text","angle":0,"index":18,"text":"done # 循 环 结 束 的 标 志","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"69f46a80-340c-479f-8f58-cf6f6aae208c","page_size":[595,841],"block_position":"42-17"},{"bbox":[88,371,132,384],"type":"text","angle":0,"index":19,"text":"参数处理","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"adf33cda-0eac-4e39-8913-b5f9ac1994bf","page_size":[595,841],"block_position":"42-18"},{"bbox":[86,398,508,412],"type":"text","angle":0,"index":20,"text":"在 脚 本 中 经 常 使 用 流 程 控 制 处 理 位 置 参 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"e603c705-fe10-418c-903d-2898f3e42d24","page_size":[595,841],"block_position":"42-19"},{"bbox":[88,414,506,428],"type":"text","angle":0,"index":21,"text":"循 环 结 构 while for","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"9a97b9d3-fc53-4780-befa-c45b67ff95dd","page_size":[595,841],"block_position":"42-20"},{"bbox":[88,429,506,443],"type":"text","angle":0,"index":22,"text":"多 分 支 结 构 case","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"764d8ddd-92d0-4ed0-9357-a590cc962392","page_size":[595,841],"block_position":"42-21"},{"bbox":[88,445,506,459],"type":"text","angle":0,"index":23,"text":"在 脚 本 中 经 常 使 用 如 下 命 令 配 合 位 置 参 数 处 理","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"ea73ea61-24d6-44e1-b3ab-e1ced8ed1da5","page_size":[595,841],"block_position":"42-22"},{"bbox":[88,461,113,474],"type":"text","angle":0,"index":24,"text":"shift","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"1f5054a0-8706-4001-89a8-5d8f8eb3802f","page_size":[595,841],"block_position":"42-23"},{"bbox":[88,478,128,491],"type":"text","angle":0,"index":25,"text":"getopts","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"0cd9de68-3ca1-42f0-acf8-c3c787618c88","page_size":[595,841],"block_position":"42-24"},{"bbox":[86,507,508,522],"type":"text","angle":0,"index":26,"text":"mybackup -z -c /etc/mybackup.conf -r -v ./foo.txt ./mydir","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"cf156c31-cf9f-4a5f-ae51-c0bd73151647","page_size":[595,841],"block_position":"42-25"},{"bbox":[88,523,506,537],"type":"text","angle":0,"index":27,"text":"-z 是 个 选 项 （ option ） ， 以 减 号 开 始 的 单 字 符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"8a00545a-fe45-4f7a-88e4-d232abd80824","page_size":[595,841],"block_position":"42-26"},{"bbox":[88,539,499,553],"type":"text","angle":0,"index":28,"text":"-c 也是个选项，/etc/mybackup.conf 是该选项的附加参数（additional argument ）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"90e32064-de28-448a-84e5-d61bc6ee43da","page_size":[595,841],"block_position":"42-27"},{"bbox":[88,555,506,568],"type":"text","angle":0,"index":29,"text":"-r 和 -v 也 是 选 项 ， 且 不 带 附 加 参 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"9c1dbf6e-1b3f-435d-b049-613430151ade","page_size":[595,841],"block_position":"42-28"},{"bbox":[88,570,506,584],"type":"text","angle":0,"index":30,"text":"./foo.txt 和 ./mydir 是脚本的处理对象，他们是不与任何选项相关的参数，在 POSIX®标","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"04b87309-949a-4a0a-9bcf-0799d72fe05d","page_size":[595,841],"block_position":"42-29"},{"bbox":[88,586,284,600],"type":"text","angle":0,"index":31,"text":"准中称其为“操作 对象/数”（operands）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"7d6df431-a269-4071-aae6-7ebc8c9ac72e","page_size":[595,841],"block_position":"42-30"},{"bbox":[86,669,506,682],"type":"text","angle":0,"index":32,"text":"getopts OPTSTRING VARNAME [ARGS...]","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"1afd9dbb-02fa-4e2b-b0ff-d94d6de12ccc","page_size":[595,841],"block_position":"42-31"},{"bbox":[88,684,148,697],"type":"text","angle":0,"index":33,"text":"OPTSTRING","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"9f423af5-c3be-4ae6-8d26-a0255d739833","page_size":[595,841],"block_position":"42-32"},{"bbox":[86,699,508,713],"type":"text","angle":0,"index":34,"text":"是 由 若 干 有 效 的 选 项 标 识 符 组 成 的 选 项 字 符 串","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"81e77fe1-8cc8-4d96-9088-2d7cd867c2a3","page_size":[595,841],"block_position":"42-33"},{"bbox":[88,715,506,729],"type":"text","angle":0,"index":35,"text":"若 某 选 项 标 识 符 后 有 冒 号 ， 则 表 示 此 选 项 有 附 加 参 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"6db6a07f-9dd8-4898-bdf8-3233d512fc25","page_size":[595,841],"block_position":"42-34"},{"bbox":[88,731,506,744],"type":"text","angle":0,"index":36,"text":"若 整 个 字 符 串 前 有 冒 号 ， 将 使 用 “ 安 静 ” 的 错 误 模 式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"3b0756d4-0a58-422f-a92f-3dffc641b054","page_size":[595,841],"block_position":"42-35"},{"bbox":[88,746,506,759],"type":"text","angle":0,"index":37,"text":"VARNAME ： 每 次 匹 配 成 功 的 选 项 保 存 在 变 量 中","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":42,"id":"4e56f5f1-15d9-4afc-8735-8f96a800e12a","page_size":[595,841],"block_position":"42-36"}],[{"bbox":[86,77,508,91],"type":"text","angle":0,"index":0,"text":"ARGS 参 数 列 表 ， 省 略 时 为 ” $@”","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"0737943a-af86-4a8e-89fd-1344da665570","page_size":[595,841],"block_position":"43-0"},{"bbox":[87,95,507,108],"type":"text","angle":0,"index":1,"text":"getopts c:zrv opt","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"0e97a17a-9450-44db-b9d7-1c09519fac8b","page_size":[595,841],"block_position":"43-1"},{"bbox":[88,111,506,123],"type":"text","angle":0,"index":2,"text":"getopts :c:zrv opt","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"0f97604a-95fa-46f0-b769-59293a890e75","page_size":[595,841],"block_position":"43-2"},{"bbox":[86,125,506,138],"type":"text","angle":0,"index":3,"text":"通常需要以循环的方式执行多次 getopts 来解析位置参数中的选项以及可能存在的选项附","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"4f36f7f6-364b-4f47-9ee5-2dce8ed3c928","page_size":[595,841],"block_position":"43-3"},{"bbox":[87,141,506,154],"type":"text","angle":0,"index":4,"text":"加 参 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"267b4d60-f0d7-4f5b-ac9a-9a4883b06dc6","page_size":[595,841],"block_position":"43-4"},{"bbox":[86,156,506,170],"type":"text","angle":0,"index":5,"text":"每 次 调 用 getopts ， 将 会 处 理 参 数 列 表 中 的 “ 下 一 个 ” 选 项","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"4a402347-3333-4eba-9184-d0e0cf7638b4","page_size":[595,841],"block_position":"43-5"},{"bbox":[87,172,506,185],"type":"text","angle":0,"index":6,"text":"将 选 项 存 储 在 VARNAME 变 量 中","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"940ab98b-f62b-4289-9823-13e09e32bbd2","page_size":[595,841],"block_position":"43-6"},{"bbox":[86,188,506,201],"type":"text","angle":0,"index":7,"text":"将 此 选 项 对 应 的 附 加 参 数 存 储 在 环 境 变 量 OPTARG 中","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"15abf8b8-2987-48d4-9d0b-993d0f684347","page_size":[595,841],"block_position":"43-7"},{"bbox":[86,203,506,216],"type":"text","angle":0,"index":8,"text":"对环境变量OPTIND进行自增操作，使 $OPTIND 总是指向原始参数列表中“下一个”要","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"f5e7fcf6-27ba-4d13-b002-05c82694bc78","page_size":[595,841],"block_position":"43-8"},{"bbox":[87,219,506,232],"type":"text","angle":0,"index":9,"text":"处 理 的 元 素 位 置","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"e2b7b7b3-584c-4606-b8e8-e14bba82728e","page_size":[595,841],"block_position":"43-9"},{"bbox":[86,234,506,248],"type":"text","angle":0,"index":10,"text":"若$VARNAME 与$OPTSTRING 的所有选项均不匹配，则做“invalid option”的错误设置","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"b560305c-f9c0-4093-9711-bc8b756cbf50","page_size":[595,841],"block_position":"43-10"},{"bbox":[86,250,506,264],"type":"text","angle":0,"index":11,"text":"若 某 选 项 的 参 数 不 存 在 ， 则 做 “ required argument not found” 的 错 误 设 置","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"c4d2f973-cdab-473d-97b4-c70305d7c3b7","page_size":[595,841],"block_position":"43-11"},{"bbox":[86,265,506,280],"type":"text","angle":0,"index":12,"text":"冗 余 (Verbose) 模 式 （ OPTSTRING 不 以 : 开 头 ）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"05b14189-6f8f-4c81-ac30-d9511b630b05","page_size":[595,841],"block_position":"43-12"},{"bbox":[87,281,506,295],"type":"text","angle":0,"index":13,"text":"“invalid option”","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"3bf13127-9f8e-4a0c-a4a3-e5022003dab9","page_size":[595,841],"block_position":"43-13"},{"bbox":[87,296,506,310],"type":"text","angle":0,"index":14,"text":"VARNAME=“?” unset OPTARG","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"8fdacaad-ad62-4b65-b5a6-b8aac310c679","page_size":[595,841],"block_position":"43-14"},{"bbox":[88,312,506,325],"type":"text","angle":0,"index":15,"text":"“required argument not found”","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"637144b4-e3de-410e-96d3-45d845ec4419","page_size":[595,841],"block_position":"43-15"},{"bbox":[86,328,506,341],"type":"text","angle":0,"index":16,"text":"VARNAM $\\bar { \\cdot } = \" ? \\prime$ unset OPTARG 并 输 出 错 误 信 息","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"8183e88a-8881-49d5-a672-5694386a22e9","page_size":[595,841],"block_position":"43-16"},{"bbox":[87,343,506,357],"type":"text","angle":0,"index":17,"text":"安 静 (Silent) 模 式 （ OPTSTRING 以 : 开 头 ）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"fc5d472f-721b-4a62-90a4-c2dd86d4cb64","page_size":[595,841],"block_position":"43-17"},{"bbox":[88,359,506,373],"type":"text","angle":0,"index":18,"text":"“invalid option”","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"0687780d-377f-49a5-8068-561a19701bc6","page_size":[595,841],"block_position":"43-18"},{"bbox":[86,375,506,388],"type":"text","angle":0,"index":19,"text":"VARNAME $: = \" ? \"$ OPTARG=‘ 无 效 的 选 项 字 符 ，","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"badc940e-62c8-41b6-81ae-76751180c416","page_size":[595,841],"block_position":"43-19"},{"bbox":[88,391,506,404],"type":"text","angle":0,"index":20,"text":"“required argument not found”","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"ef27c74c-b94d-4ff7-bdbb-bae360d3602c","page_size":[595,841],"block_position":"43-20"},{"bbox":[86,406,506,418],"type":"text","angle":0,"index":21,"text":"VARNAME=“:” ; OPTARG=‘ 与 参 数 对 应 的 选 项 字 符","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"5e8179eb-0e18-4c08-8372-a43db80cd488","page_size":[595,841],"block_position":"43-21"},{"bbox":[87,437,112,450],"type":"title","angle":0,"index":22,"text":"# 函数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":43,"id":"7e7f97f7-4bf9-417f-bafb-0354d34a2258","page_size":[595,841],"block_position":"43-22"},{"bbox":[86,464,506,478],"type":"text","angle":0,"index":23,"text":"为 了 避 免 大 型 脚 本 变 得 复 杂 、 晦 涩 而 使 用 函 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"05ac8958-98a7-4db0-a1d3-30cafa363689","page_size":[595,841],"block_position":"43-23"},{"bbox":[86,480,506,493],"type":"text","angle":0,"index":24,"text":"将 大 型 脚 本 代 码 分 割 成 小 块 ， 将 这 些 被 命 名 的 代 码 块 称 为 函 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"673e0ba3-5a55-49c1-838f-a382b09e9b17","page_size":[595,841],"block_position":"43-24"},{"bbox":[86,496,506,509],"type":"text","angle":0,"index":25,"text":"一 个 函 数 就 是 一 个 子 程 序 ， 用 于 完 成 特 定 的 任 务","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"23a2cbb5-9268-44ec-b3d4-5a29c56b315f","page_size":[595,841],"block_position":"43-25"},{"bbox":[86,511,506,524],"type":"text","angle":0,"index":26,"text":"如 ： 添 加 一 个 用 户 、 判 断 用 户 是 否 为 管 理 员 等","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"f7eccf12-873e-4f4c-b883-948136aeb251","page_size":[595,841],"block_position":"43-26"},{"bbox":[86,527,506,540],"type":"text","angle":0,"index":27,"text":"函 数 定 义 之 后 可 以 被 使 用 它 的 主 程 序 调 用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"06697662-8716-4f74-b226-54e263f6f8a8","page_size":[595,841],"block_position":"43-27"},{"bbox":[86,542,506,555],"type":"text","angle":0,"index":28,"text":"调 用 函 数 的 方 法 与 执 行 Shell 命 令 无 异","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"a0b81219-819b-42e3-a98c-1cad08d831bd","page_size":[595,841],"block_position":"43-28"},{"bbox":[86,558,506,571],"type":"text","angle":0,"index":29,"text":"可 以 在 Shell 脚 本 中 调 用 （ 函 数 需 先 定 义 而 后 调 用 ）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"33a22d77-202d-4cfa-a9c8-d65bb4c49695","page_size":[595,841],"block_position":"43-29"},{"bbox":[86,574,506,587],"type":"text","angle":0,"index":30,"text":"在 命 令 行 上 直 接 调 用 （ 定 义 函 数 的 文 件 需 先 加 载 ）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"f7ecabbd-2d96-43bf-bfaa-20e00fd2e6cb","page_size":[595,841],"block_position":"43-30"},{"bbox":[86,589,506,602],"type":"text","angle":0,"index":31,"text":"简 化 程 序 代 码 ， 实 现 代 码 重 用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"113c69a9-8b2f-4cd3-b960-adb259e74e7c","page_size":[595,841],"block_position":"43-31"},{"bbox":[86,605,506,618],"type":"text","angle":0,"index":32,"text":"实现一次定义多次调用。如：is_root_user（）函数可以由不同的 shell脚本重复使用。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"56b10de7-3ee2-4a85-92bb-dc2b8d95b7e8","page_size":[595,841],"block_position":"43-32"},{"bbox":[86,620,506,634],"type":"text","angle":0,"index":33,"text":"实 现 结 构 化 编 程","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"6f481428-3c89-4301-a6e6-8b3740b35939","page_size":[595,841],"block_position":"43-33"},{"bbox":[86,635,506,649],"type":"text","angle":0,"index":34,"text":"使 脚 本 内 容 更 加 简 洁 ， 增 强 程 序 的 易 读 性","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"ad74e288-d41f-45c7-b7ad-df3992696432","page_size":[595,841],"block_position":"43-34"},{"bbox":[86,651,506,665],"type":"text","angle":0,"index":35,"text":"提 高 执 行 效 率","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"e2105e4d-62ec-4514-ab60-ac90bc332760","page_size":[595,841],"block_position":"43-35"},{"bbox":[86,666,506,681],"type":"text","angle":0,"index":36,"text":"将 常 用 的 功 能 定 义 为 多 个 函 数 并 将 其 保 存 在 一 个 文 件 中","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"2bed3653-4b72-4149-9ae0-69fd3ebbda55","page_size":[595,841],"block_position":"43-36"},{"bbox":[86,682,506,696],"type":"text","angle":0,"index":37,"text":"类 似 其 他 语 言 的 66 模 块 ” 文 件","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"d7ff585d-6467-4bf2-be29-add0aa06bb06","page_size":[595,841],"block_position":"43-37"},{"bbox":[86,698,506,711],"type":"text","angle":0,"index":38,"text":"在 ~/bashrc 或 命 令 行 上 使 用 source 命 令 调 用 这 个 文 件","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"ea413a65-4dd4-4f3a-9cf6-55c8c40008b5","page_size":[595,841],"block_position":"43-38"},{"bbox":[86,714,506,727],"type":"text","angle":0,"index":39,"text":"此 文 件 中 定 义 的 多 个 函 数 一 次 性 地 调 入 内 存 ， 从 而 加 快 运 行 速 度","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"5c1b1cf9-1773-4d8f-8ee6-a86b5bc90243","page_size":[595,841],"block_position":"43-39"},{"bbox":[86,729,506,743],"type":"text","angle":0,"index":40,"text":"function 函 数 名 {","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"4edfc2e6-f95f-474a-b300-42e84ce64496","page_size":[595,841],"block_position":"43-40"},{"bbox":[448,746,506,757],"type":"text","angle":0,"index":41,"text":"commands","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":43,"id":"44d84558-e738-4973-8592-c9ffbf716245","page_size":[595,841],"block_position":"43-41"}],[{"bbox":[87,79,95,91],"type":"text","angle":0,"index":0,"text":"}","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"5994e7fe-192d-4d82-b025-0b54d0825906","page_size":[595,841],"block_position":"44-0"},{"bbox":[87,95,506,108],"type":"text","angle":0,"index":1,"text":"函 数 的 存 储","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"b38ff4cc-4d76-459e-981b-2c6e33617947","page_size":[595,841],"block_position":"44-1"},{"bbox":[88,110,505,122],"type":"text","angle":0,"index":2,"text":"函 数 和 调 用 它 的 主 程 序 保 存 在 同 一 个 文 件 中","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"9b4f5ba3-88f9-44db-be07-7bb75deb243d","page_size":[595,841],"block_position":"44-2"},{"bbox":[88,125,505,138],"type":"text","angle":0,"index":3,"text":"函 数 的 定 义 必 须 出 现 在 调 用 之 前","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"75d76115-0ac7-4d81-af92-86f98b8a45cd","page_size":[595,841],"block_position":"44-3"},{"bbox":[88,141,505,154],"type":"text","angle":0,"index":4,"text":"函 数 和 调 用 它 的 主 程 序 保 存 在 不 同 的 文 件 中","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"d347a961-f10a-4135-bf9d-52c56c610ea9","page_size":[595,841],"block_position":"44-4"},{"bbox":[88,157,505,170],"type":"text","angle":0,"index":5,"text":"保 存 函 数 的 文 件 必 须 先 使 用 source 命 令 执 行 ， 之 后 才 能 调 用 其 中 的 函 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"1753cd61-f781-418c-9f9d-d8e14cbf7684","page_size":[595,841],"block_position":"44-5"},{"bbox":[88,173,505,185],"type":"text","angle":0,"index":6,"text":"函 数 的 显 示","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"34e7c25d-0c76-4fc5-b298-6ad87f32ebe7","page_size":[595,841],"block_position":"44-6"},{"bbox":[88,188,505,201],"type":"text","angle":0,"index":7,"text":"显 示 当 前 Shell 可 见 的 所 有 函 数 名","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"527db49e-796f-4f14-9dbf-c632fc6491f4","page_size":[595,841],"block_position":"44-7"},{"bbox":[88,205,505,216],"type":"text","angle":0,"index":8,"text":"$\\$ 1$ declare -F","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"89fca5fb-425a-44b6-9be3-c816a5ab81ff","page_size":[595,841],"block_position":"44-8"},{"bbox":[88,219,505,232],"type":"text","angle":0,"index":9,"text":"显 示 当 前 Shell 可 见 的 所 有 （ 指 定 ） 的 函 数 定 义","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"769b67ea-f640-49e9-9156-650123aeacf8","page_size":[595,841],"block_position":"44-9"},{"bbox":[88,235,505,247],"type":"text","angle":0,"index":10,"text":"$\\$ 1$ declare -f","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"ce964018-92d1-4ac4-9d34-9827c2f1038f","page_size":[595,841],"block_position":"44-10"},{"bbox":[88,250,505,263],"type":"text","angle":0,"index":11,"text":"$\\$ 1$ declare -f <functionName>","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"d82736b8-49e0-406b-8303-36d1b4814ad1","page_size":[595,841],"block_position":"44-11"},{"bbox":[88,265,505,279],"type":"text","angle":0,"index":12,"text":"参 数 (Arguments)","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"cb82f1e9-0ce6-48cf-8881-7e7dbcc57273","page_size":[595,841],"block_position":"44-12"},{"bbox":[88,281,505,294],"type":"text","angle":0,"index":13,"text":"调 用 函 数 时 ， 使 用 位 置 参 数 的 形 式 为 函 数 传 递 参 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"6f32f6ce-02d2-4a67-ae43-dfa94203009a","page_size":[595,841],"block_position":"44-13"},{"bbox":[88,297,505,310],"type":"text","angle":0,"index":14,"text":"函 数 内 的 $\\$ 1-\\$ 12$ $\\$ \\star$ 和機 $\\$ 0$ 表 示 其 接 收 的 参 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"b42b8837-4488-4592-bfd1-fc4b92cd2854","page_size":[595,841],"block_position":"44-14"},{"bbox":[88,312,505,325],"type":"text","angle":0,"index":15,"text":"函 数 调 用 结 束 后 位 置 参 数 $\\$ 1-\\$ 12$ 、 $\\$ \\star$ 和 $\\$ 0$ 将 被 重 置 为 调 用 函 数 之 前 的 值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"fb0ae88d-64bd-40c9-b1c3-8e51a678220b","page_size":[595,841],"block_position":"44-15"},{"bbox":[88,328,505,341],"type":"text","angle":0,"index":16,"text":"在 主 程 序 和 函 数 中 ， $\\$ 0$ 始 终 代 表 脚 本 名","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"5ab62fbd-73ab-451c-8281-b1b0f325b214","page_size":[595,841],"block_position":"44-16"},{"bbox":[88,343,505,356],"type":"text","angle":0,"index":17,"text":"变 量 (Variables)","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"aa9ccfb9-f95c-4d1a-bd16-96052e618ffb","page_size":[595,841],"block_position":"44-17"},{"bbox":[88,359,505,372],"type":"text","angle":0,"index":18,"text":"函 数 内 使 用 local 声 明 的 变 量 是 局 部 （ Local ） 变 量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"13be29dc-970f-434e-9cb8-637a11231979","page_size":[595,841],"block_position":"44-18"},{"bbox":[88,375,505,387],"type":"text","angle":0,"index":19,"text":"局 部 变 量 的 作 用 域 是 当 前 函 数 以 及 其 调 用 的 所 有 函 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"cf353b82-018b-41a6-9b9b-4b476b0d1bea","page_size":[595,841],"block_position":"44-19"},{"bbox":[88,391,505,403],"type":"text","angle":0,"index":20,"text":"函 数 内 未 使 用 local 声 明 的 变 量 是 全 局 （ Global ） 变 量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"245907e7-7e64-4650-8fa9-ac38fb6f13ee","page_size":[595,841],"block_position":"44-20"},{"bbox":[88,406,505,418],"type":"text","angle":0,"index":21,"text":"即 主 程 序 和 函 数 中 的 同 名 变 量 是 一 个 变 量 （ 地 址 一 致 ）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"d6249239-f05f-4a15-ad0a-bafe6916fabd","page_size":[595,841],"block_position":"44-21"},{"bbox":[88,422,505,434],"type":"text","angle":0,"index":22,"text":"当 函 数 的 最 后 一 条 命 令 执 行 结 束 函 数 即 结 束","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"f25009fc-c0ee-4dc9-a01e-d1112c51577d","page_size":[595,841],"block_position":"44-22"},{"bbox":[88,438,505,449],"type":"text","angle":0,"index":23,"text":"函 数 的 返 回 值 就 是 最 后 一 条 命 令 的 退 出 码","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"85e509b9-fa0a-4264-90b4-15da6c0850ee","page_size":[595,841],"block_position":"44-23"},{"bbox":[88,453,505,465],"type":"text","angle":0,"index":24,"text":"其 返 回 值 被 保 存 在 系 统 变 量 $\\$ 7$ 中","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"20b7d5f7-e42d-4f7d-bc4a-6111217bfaf5","page_size":[595,841],"block_position":"44-24"},{"bbox":[88,469,505,481],"type":"text","angle":0,"index":25,"text":"可 以 使 用 return 或 exit 显 式 地 结 束 函 数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"76a7b1c5-71d4-4e23-af11-5b30b566da87","page_size":[595,841],"block_position":"44-25"},{"bbox":[88,485,505,497],"type":"text","angle":0,"index":26,"text":"return [N]","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"1116902a-a08b-430a-834a-e2b4f5beafe0","page_size":[595,841],"block_position":"44-26"},{"bbox":[88,500,505,513],"type":"text","angle":0,"index":27,"text":"return 将 结 束 函 数 的 执 行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"78e73cb8-eb35-4423-9b7b-4c2222655fd9","page_size":[595,841],"block_position":"44-27"},{"bbox":[88,515,505,528],"type":"text","angle":0,"index":28,"text":"可 以 使 用 N 指 定 函 数 返 回 值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"4fa41fd3-a5ad-4c77-b282-d924681f2146","page_size":[595,841],"block_position":"44-28"},{"bbox":[88,532,505,544],"type":"text","angle":0,"index":29,"text":"exit [N]","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"b94df6cc-3731-494f-80e6-6ee67bd7134c","page_size":[595,841],"block_position":"44-29"},{"bbox":[88,547,505,559],"type":"text","angle":0,"index":30,"text":"exit 将 中 断 当 前 函 数 及 当 前 Shell 的 执 行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"f26eedbc-54fe-4ca6-9253-dee685e8a8c9","page_size":[595,841],"block_position":"44-30"},{"bbox":[88,562,505,575],"type":"text","angle":0,"index":31,"text":"可 以 使 用 N 指 定 返 回 值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"f7144426-52eb-440c-8589-44ec27331897","page_size":[595,841],"block_position":"44-31"},{"bbox":[88,577,505,590],"type":"text","angle":0,"index":32,"text":"使 用 全 局 变 量 引 用 函 数 的 值 不 利 于 结 构 化 编 程","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"24dc0472-b83c-413b-8ade-52a72213d1d8","page_size":[595,841],"block_position":"44-32"},{"bbox":[88,593,505,606],"type":"text","angle":0,"index":33,"text":"使 用 return 或 exit 只 能 返 回 整 数 值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"09c125b9-79cb-4e03-ac3a-19491d05f221","page_size":[595,841],"block_position":"44-33"},{"bbox":[88,608,505,621],"type":"text","angle":0,"index":34,"text":"使 用 标 准 输 出 实 现 函 数 的 返 回 值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"ff11a2e4-00c5-4bea-bd7a-fd4eaed7f85e","page_size":[595,841],"block_position":"44-34"},{"bbox":[88,624,505,637],"type":"text","angle":0,"index":35,"text":"是 一 种 通 用 的 方 法 ， 既 能 返 回 整 数 又 能 返 回 字 符 串","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"b442a848-ec2e-4b59-89d4-05dd00df2d8c","page_size":[595,841],"block_position":"44-35"},{"bbox":[88,640,505,652],"type":"text","angle":0,"index":36,"text":"函 数 结 束 前 使 用 echo 命 令 将 结 果 显 示 到 标 准 输 出","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"6f6a6e9f-fdd8-4d38-ab0e-ad4eeb7db6cc","page_size":[595,841],"block_position":"44-36"},{"bbox":[88,655,505,667],"type":"text","angle":0,"index":37,"text":"调用函数时使用如下的格式将函数的输出结果存到变量 RES 中，之后便可使用变量 $\\$ 123$","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"2bf92ba0-f7b8-4eba-8107-f567f451f51e","page_size":[595,841],"block_position":"44-37"},{"bbox":[88,671,499,684],"type":"text","angle":0,"index":38,"text":"的 值 （ 或 输 出 、 或 执 行 测 试 、 或 进 一 步 处 理 等 ）","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"44f14832-e456-42cf-a9c4-546cd14980c9","page_size":[595,841],"block_position":"44-38"},{"bbox":[88,687,198,699],"type":"text","angle":0,"index":39,"text":"$R E S { = } \\$ $ (functionName)","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"d97df5d6-4e02-4c07-bc07-3dcd0598adc8","page_size":[595,841],"block_position":"44-39"},{"bbox":[88,703,114,714],"type":"text","angle":0,"index":40,"text":"echo","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"70f18477-43ec-4023-93c1-9d16fdb21f87","page_size":[595,841],"block_position":"44-40"},{"bbox":[478,703,505,714],"type":"text","angle":0,"index":41,"text":"$RES","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":44,"id":"e77690bd-df4d-4a06-92c3-c676c5b971e6","page_size":[595,841],"block_position":"44-41"}],[{"bbox":[86,121,505,151],"type":"text","angle":0,"index":0,"text":"Ken Thompson 的 sh 是第一种 Unix Shell，Windows Explorer 是一个典型的图形界面Shell。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"12161fbf-b450-4eb9-8f9d-1741c7a75cb2","page_size":[595,841],"block_position":"45-0"},{"bbox":[86,168,453,182],"type":"text","angle":0,"index":1,"text":"当命令不在命令行中执行，而是从一个文件中执行时，该文件就称为shell脚本","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"5278be51-0765-4cac-8be2-f8d6a952280c","page_size":[595,841],"block_position":"45-1"},{"bbox":[88,185,200,198],"type":"text","angle":0,"index":2,"text":"Shell 脚本是纯文本文件","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"27b02455-5120-4c16-a354-e427859ef992","page_size":[595,841],"block_position":"45-2"},{"bbox":[89,200,169,213],"type":"text","angle":0,"index":3,"text":".sh 为文件后缀名","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"15f01a53-7e9c-4b35-ac8e-adb2d58699a9","page_size":[595,841],"block_position":"45-3"},{"bbox":[86,246,353,260],"type":"text","angle":0,"index":4,"text":"以行为单位，执行脚本的时候会分解成一行一行依次执行","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"187bece3-b4b7-4c21-bf03-278dba46172f","page_size":[595,841],"block_position":"45-4"},{"bbox":[88,262,252,275],"type":"text","angle":0,"index":5,"text":"Shell 是一种功能强大的解释型语言","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"3f3fadcf-105c-4bc8-96b9-cb36ae7b5036","page_size":[595,841],"block_position":"45-5"},{"bbox":[88,278,121,290],"type":"text","angle":0,"index":6,"text":"通常用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"add64806-c614-4b61-9aa6-b5641ebe2dea","page_size":[595,841],"block_position":"45-6"},{"bbox":[89,293,195,306],"type":"text","angle":0,"index":7,"text":"变量、数组、输入输出","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"08d47be1-709d-451b-94b2-5cc786e00d15","page_size":[595,841],"block_position":"45-7"},{"bbox":[89,309,132,322],"type":"text","angle":0,"index":8,"text":"控制结构","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"546ba650-13dc-45b1-bc36-4bddd2dc2209","page_size":[595,841],"block_position":"45-8"},{"bbox":[89,325,168,338],"type":"text","angle":0,"index":9,"text":"Shell脚本的建立","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"d942ef1c-acc2-4a72-8225-2d5f5c5444f6","page_size":[595,841],"block_position":"45-9"},{"bbox":[89,340,139,354],"type":"text","angle":0,"index":10,"text":"Vim script","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"bae0ae21-ee05-46c6-84c4-5e058c1b8ff4","page_size":[595,841],"block_position":"45-10"},{"bbox":[89,355,239,370],"type":"text","angle":0,"index":11,"text":"Chomod +x(exectue) script-file","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"74473893-9238-4c6f-b8c8-23163430f927","page_size":[595,841],"block_position":"45-11"},{"bbox":[89,371,296,385],"type":"text","angle":0,"index":12,"text":"以#！开头：通知系统用何解释器执行此脚本","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"f57a70a4-586c-4f0d-8d82-e4f72a7a4a82","page_size":[595,841],"block_position":"45-12"},{"bbox":[89,387,146,398],"type":"text","angle":0,"index":13,"text":"#!/bin/bash","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"8b6f306d-329f-402c-b3f6-06c19704c5f1","page_size":[595,841],"block_position":"45-13"},{"bbox":[89,402,191,415],"type":"text","angle":0,"index":14,"text":"#脚本名称、脚本功能","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"d6ca1a6f-bbf1-4c5d-b8e9-93f3039a4f2b","page_size":[595,841],"block_position":"45-14"},{"bbox":[89,418,223,431],"type":"text","angle":0,"index":15,"text":"在 bash 调用脚本时使用参数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"e17f7a01-8a42-449b-9693-65b9f67fc2e8","page_size":[595,841],"block_position":"45-15"},{"bbox":[91,433,213,447],"type":"text","angle":0,"index":16,"text":"$\\$ 1$ bash [-x] [-n] [-v] name","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"2dc8a6e1-80ef-4ed3-8062-21ed54f60771","page_size":[595,841],"block_position":"45-16"},{"bbox":[89,449,132,462],"type":"text","angle":0,"index":17,"text":"在脚本中","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"ea3c7622-18da-4b0d-b209-ea21742202ad","page_size":[595,841],"block_position":"45-17"},{"bbox":[89,465,144,477],"type":"text","angle":0,"index":18,"text":"Sh-x 脚本名","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"b8d669e5-942d-4abe-ab4d-4a18c3f5dfb4","page_size":[595,841],"block_position":"45-18"},{"bbox":[89,481,147,493],"type":"text","angle":0,"index":19,"text":"Shell 的功能","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"e60af1fd-65e8-4c30-8922-7de3e645b8c7","page_size":[595,841],"block_position":"45-19"},{"bbox":[89,496,215,509],"type":"text","angle":0,"index":20,"text":"各种管理和监视命令的使用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"614a776c-c076-4768-ad65-5e31da1bb4ae","page_size":[595,841],"block_position":"45-20"},{"bbox":[89,512,239,524],"type":"text","angle":0,"index":21,"text":"Ebal对参数进行两次扫描和替换","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"25ecbe76-2a84-4c80-a1fa-1efd32df7312","page_size":[595,841],"block_position":"45-21"},{"bbox":[88,527,505,540],"type":"text","angle":0,"index":22,"text":"将所有的参数链接诚意表达式，ving计算或执行限该白澳大使】参数中的任何变量的将被","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"7501cdae-04e2-417d-9307-5bcc2efa3bd4","page_size":[595,841],"block_position":"45-22"},{"bbox":[89,543,111,555],"type":"text","angle":0,"index":23,"text":"展开","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"414e8aa5-2ed6-48c1-9520-b9fe51af903a","page_size":[595,841],"block_position":"45-23"},{"bbox":[89,559,205,571],"type":"text","angle":0,"index":24,"text":"各种文本文件工具的使用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"a1508ec6-e9c2-46cc-bc34-eb404ba1154f","page_size":[595,841],"block_position":"45-24"},{"bbox":[89,574,152,587],"type":"text","angle":0,"index":25,"text":"变量和表达式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"41de5ddf-8901-422d-ba89-7a5b027de864","page_size":[595,841],"block_position":"45-25"},{"bbox":[89,590,152,602],"type":"text","angle":0,"index":26,"text":"变量替换扩展","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"c3125b5d-4177-4067-b9a1-165163036441","page_size":[595,841],"block_position":"45-26"},{"bbox":[89,620,132,634],"type":"text","angle":0,"index":27,"text":"变量测试","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"58e75f1c-c985-422b-a207-124ee4b1e2e9","page_size":[595,841],"block_position":"45-27"},{"bbox":[89,636,174,649],"type":"text","angle":0,"index":28,"text":"变量的字符串操作","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"4888cc2c-7384-4e69-b3c2-4452b5d7c902","page_size":[595,841],"block_position":"45-28"},{"bbox":[89,652,143,664],"type":"text","angle":0,"index":29,"text":"计数、截取","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"29fb9570-40bf-4d50-8034-c48e01a1729e","page_size":[595,841],"block_position":"45-29"},{"bbox":[89,667,163,680],"type":"text","angle":0,"index":30,"text":"变量的间接引用","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"0dafafd5-595b-43c0-ac7f-0263eb490a25","page_size":[595,841],"block_position":"45-30"},{"bbox":[89,683,230,696],"type":"text","angle":0,"index":31,"text":"通过str2的值来引用str1的值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"95263d4b-f7bf-41c0-b88b-2c1268cdb81f","page_size":[595,841],"block_position":"45-31"},{"bbox":[89,699,152,711],"type":"text","angle":0,"index":32,"text":"位置参数变量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"2cbef68f-26d9-43ca-846c-6fa90dc8bfa0","page_size":[595,841],"block_position":"45-32"},{"bbox":[89,714,155,727],"type":"text","angle":0,"index":33,"text":"Shit 参数 【0】","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"d8d48b99-7a6a-4fe5-98d3-40b57e74b307","page_size":[595,841],"block_position":"45-33"},{"bbox":[89,730,101,741],"type":"text","angle":0,"index":34,"text":"$\\$ 7$","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"a86a77bd-885c-4b65-9323-7ad3b0f66983","page_size":[595,841],"block_position":"45-34"},{"bbox":[89,746,108,757],"type":"text","angle":0,"index":35,"text":"Exit","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":45,"id":"0c5b8f6d-2ccd-4468-9eb1-17226131704f","page_size":[595,841],"block_position":"45-35"}],[{"bbox":[88,94,164,107],"type":"text","angle":0,"index":0,"text":"命令行参数相关","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"f3623afb-eba7-424c-abfc-28c8a10facb5","page_size":[595,841],"block_position":"46-0"},{"bbox":[88,110,141,122],"type":"text","angle":0,"index":1,"text":"0 执行正确","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"f11eff9e-1f00-479b-a384-00357cdc75e3","page_size":[595,841],"block_position":"46-1"},{"bbox":[88,126,141,137],"type":"text","angle":0,"index":2,"text":"1 通用错误","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"10219cde-dc42-4ec6-b827-e9a00aaea3c5","page_size":[595,841],"block_position":"46-2"},{"bbox":[88,142,214,153],"type":"text","angle":0,"index":3,"text":"2 命令或脚本没有执行权限","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"7e7e2ead-8647-4a23-a8aa-db643e1eddbe","page_size":[595,841],"block_position":"46-3"},{"bbox":[88,157,163,169],"type":"text","angle":0,"index":4,"text":"127 命令没找到","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"1172428e-baaf-43f1-93d9-c06b4b35d46b","page_size":[595,841],"block_position":"46-4"},{"bbox":[88,173,167,184],"type":"text","angle":0,"index":5,"text":"Chmod $+ x + w + r$","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"7abe37d5-05b1-4971-86c3-84eb9712030a","page_size":[595,841],"block_position":"46-5"},{"bbox":[88,188,242,200],"type":"text","angle":0,"index":6,"text":"Read从键盘输入内容为变量赋值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"f29a5c54-7e34-42df-81de-3451ab4da6ab","page_size":[595,841],"block_position":"46-6"},{"bbox":[88,204,114,215],"type":"text","angle":0,"index":7,"text":"Read","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"479d8e2c-388e-4b04-93da-678047c40b54","page_size":[595,841],"block_position":"46-7"},{"bbox":[88,219,215,232],"type":"text","angle":0,"index":8,"text":"结合不同的引号为变量赋值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"af19ea6b-834e-4bc3-ae71-311e5aa5b4ed","page_size":[595,841],"block_position":"46-8"},{"bbox":[88,235,136,248],"type":"text","angle":0,"index":9,"text":"Readonly","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"223646c5-0dff-4d66-871b-a55b3ea9bfe5","page_size":[595,841],"block_position":"46-9"},{"bbox":[91,250,301,263],"type":"text","angle":0,"index":10,"text":"多行内容不能出现双引号，否则用转义字符\\“","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"1c2b9f8c-0214-4dd9-a6fa-ceaf959d4b32","page_size":[595,841],"block_position":"46-10"},{"bbox":[88,266,135,278],"type":"text","angle":0,"index":11,"text":"Head_file","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"72d0e9a2-3def-4920-b2e9-ffb75b9ace1c","page_size":[595,841],"block_position":"46-11"},{"bbox":[88,281,152,294],"type":"text","angle":0,"index":12,"text":"进程参数相关","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"abd18ff2-b174-40f9-ae83-3fe578729397","page_size":[595,841],"block_position":"46-12"},{"bbox":[88,297,118,308],"type":"text","angle":0,"index":13,"text":"Printf","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"b2b86121-3b6c-4bdf-a8c0-8cd20416d841","page_size":[595,841],"block_position":"46-13"},{"bbox":[88,312,246,325],"type":"text","angle":0,"index":14,"text":"Let 不必架空客，否则加上反引号","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"abb0c3a6-bf68-4302-91cf-bbc08ff35dfd","page_size":[595,841],"block_position":"46-14"},{"bbox":[88,328,166,341],"type":"text","angle":0,"index":15,"text":"Expr 必须加空格","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"bfd1e8ff-7b02-4844-a33a-fef47883d245","page_size":[595,841],"block_position":"46-15"},{"bbox":[88,344,160,357],"type":"text","angle":0,"index":16,"text":"$[expression]/","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"a2d40377-923b-46da-b1d7-be9d0a7b043b","page_size":[595,841],"block_position":"46-16"},{"bbox":[88,359,167,371],"type":"text","angle":0,"index":17,"text":"Eval newstr=\\$$","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"471a7c15-aada-4ba2-8dac-85c93ade2548","page_size":[595,841],"block_position":"46-17"},{"bbox":[88,375,280,388],"type":"text","angle":0,"index":18,"text":"${var :-word}/${var:=word}/${var:?wor}","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"8ffc0160-6be9-4177-ade1-151eb00c98ec","page_size":[595,841],"block_position":"46-18"},{"bbox":[88,391,132,402],"type":"text","angle":0,"index":19,"text":"数组变量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"6f173e42-0f42-43e1-b1aa-85fae86be501","page_size":[595,841],"block_position":"46-19"},{"bbox":[88,406,152,417],"type":"text","angle":0,"index":20,"text":"小标从0开始","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"b662a30d-2c8d-41fa-b24e-609fb9b323bd","page_size":[595,841],"block_position":"46-20"},{"bbox":[88,422,266,434],"type":"text","angle":0,"index":21,"text":"Declare variable $=$ value 用来声明变量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"13ca8621-2467-44d7-969c-babdb048594f","page_size":[595,841],"block_position":"46-21"},{"bbox":[88,438,161,449],"type":"text","angle":0,"index":22,"text":"Unset variable","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"3a16cdf1-1cd7-4239-b2b6-c1b6f4b36271","page_size":[595,841],"block_position":"46-22"},{"bbox":[88,453,244,465],"type":"text","angle":0,"index":23,"text":"Echo $variable echo ${variable}","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"51e6c165-c23b-4de3-b36e-d03eb5538111","page_size":[595,841],"block_position":"46-23"},{"bbox":[88,484,163,497],"type":"text","angle":0,"index":24,"text":"变量的数值计算","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"b1618486-8819-4e08-81e8-84c325b413fe","page_size":[595,841],"block_position":"46-24"},{"bbox":[88,500,113,513],"type":"text","angle":0,"index":25,"text":"Expr","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"ad3f05a6-366d-4874-b5a5-dbe85f3a0f04","page_size":[595,841],"block_position":"46-25"},{"bbox":[88,515,111,528],"type":"text","angle":0,"index":26,"text":"输入","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"2c10fc5c-255e-4000-8a7e-ab5bb530ba15","page_size":[595,841],"block_position":"46-26"},{"bbox":[88,531,120,543],"type":"text","angle":0,"index":27,"text":"变量名","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"ea3791f9-dbf0-48ce-ac43-fd5a1bd68eae","page_size":[595,841],"block_position":"46-27"},{"bbox":[88,547,111,559],"type":"text","angle":0,"index":28,"text":"输出","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"a2758a1e-e9e1-4661-b7dd-f93bb929fe65","page_size":[595,841],"block_position":"46-28"},{"bbox":[88,563,144,575],"type":"text","angle":0,"index":29,"text":"Echo printf","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"956fc5ae-7a52-4c32-9802-b9ee9e77f5bf","page_size":[595,841],"block_position":"46-29"},{"bbox":[88,578,176,589],"type":"text","angle":0,"index":30,"text":"for variable in list","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"03fbbff5-c53c-4cbc-8ecc-dc3fc6fb1179","page_size":[595,841],"block_position":"46-30"},{"bbox":[88,593,349,606],"type":"text","angle":0,"index":31,"text":"每一次循环，依次把列表 list 中的一个值赋值给循环变量","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"6db57f27-ff21-4d63-b911-a12524de87c8","page_size":[595,841],"block_position":"46-31"},{"bbox":[88,609,248,621],"type":"text","angle":0,"index":32,"text":"使用字面字符串列表作为 wordlist","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"91e94a32-e103-43af-b885-b06d058c3d70","page_size":[595,841],"block_position":"46-32"},{"bbox":[88,624,279,637],"type":"text","angle":0,"index":33,"text":"若列表项中包含空格必须使用引号括起来","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"e5c02705-f02b-4194-8ea3-50126d54820b","page_size":[595,841],"block_position":"46-33"},{"bbox":[88,640,141,652],"type":"text","angle":0,"index":34,"text":"While 循环","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"ac889c45-c04f-4ada-9ffa-ee6a4ba8ac45","page_size":[595,841],"block_position":"46-34"},{"bbox":[88,655,129,667],"type":"text","angle":0,"index":35,"text":"For 循环","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"719c0436-2d19-46a5-b0c0-93c72cfbadbb","page_size":[595,841],"block_position":"46-35"},{"bbox":[88,671,137,683],"type":"text","angle":0,"index":36,"text":"Until 循环","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"f5fa5c06-0a15-4870-86f1-dca3ddc173e6","page_size":[595,841],"block_position":"46-36"},{"bbox":[88,687,187,699],"type":"text","angle":0,"index":37,"text":"Done&后台执行循环","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"2886d804-d9c9-4106-87d1-4013fff80772","page_size":[595,841],"block_position":"46-37"},{"bbox":[88,703,365,714],"type":"text","angle":0,"index":38,"text":"Tumx 可以在后台打开，不会因为 terminal 断开而断开连接","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"c28a1076-acee-4976-92b0-12633aea7001","page_size":[595,841],"block_position":"46-38"},{"bbox":[88,718,262,729],"type":"text","angle":0,"index":39,"text":"一般地使用while 循坏配合case实现","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"d6931631-490e-4e16-8628-b6cb1228f95c","page_size":[595,841],"block_position":"46-39"},{"bbox":[88,734,190,745],"type":"text","angle":0,"index":40,"text":"Base 提供 select 循环","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"68e72fc0-6c78-409a-8f26-3649750ad08d","page_size":[595,841],"block_position":"46-40"},{"bbox":[88,749,350,761],"type":"text","angle":0,"index":41,"text":"按数值顺序排列的菜单项（list item）会显示到标准错误","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":46,"id":"12762aa4-9c4d-4b39-8d7c-aa621df8414d","page_size":[595,841],"block_position":"46-41"}],[{"bbox":[88,79,186,92],"type":"title","angle":0,"index":0,"text":"# 位置参数和控制参数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"level":1,"page_idx":47,"id":"95a33ebf-ca64-4682-8ac7-fa7874a40b10","page_size":[595,841],"block_position":"47-0"},{"bbox":[86,110,348,124],"type":"text","angle":0,"index":1,"text":"Shell 的内置命令 getopts 可以识别所有常见的选项格式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"72b960b6-2861-484e-b4cf-01c8c1f9dc33","page_size":[595,841],"block_position":"47-1"},{"bbox":[87,125,273,139],"type":"text","angle":0,"index":2,"text":"Gtopts OPTSTRING VARNAME [ARGS]","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"284ea806-65c1-4c85-a899-36790054f5a4","page_size":[595,841],"block_position":"47-2"},{"bbox":[88,141,138,154],"type":"text","angle":0,"index":3,"text":"Optstirng","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"91ebd73a-95de-4b53-8389-1e6dedd66027","page_size":[595,841],"block_position":"47-3"},{"bbox":[87,156,311,169],"type":"text","angle":0,"index":4,"text":"是哦有若干有效的选项标识符组成的选项字符串","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"d9b2762c-40d0-499a-a3cb-54a7d0bcc724","page_size":[595,841],"block_position":"47-4"},{"bbox":[87,172,332,185],"type":"text","angle":0,"index":5,"text":"若某选项标识符后又冒号，则表示此选项又附加参数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"9bf95f9d-f343-45a8-84fe-123292cea04a","page_size":[595,841],"block_position":"47-5"},{"bbox":[87,188,311,201],"type":"text","angle":0,"index":6,"text":"若整个字符串前又冒号，将使用安静的错误模式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"c0653c59-9ead-4f23-a38c-a6e719bc2f54","page_size":[595,841],"block_position":"47-6"},{"bbox":[87,203,303,216],"type":"text","angle":0,"index":7,"text":"Varnmae：每次匹配成功的选项保存在变量中","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"bc2ea5fc-74db-43fe-baa6-a1300befdaeb","page_size":[595,841],"block_position":"47-7"},{"bbox":[88,219,137,232],"type":"text","angle":0,"index":8,"text":"默认为$@","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"f38933a8-a359-4d4c-a3d0-6b0f0857a54c","page_size":[595,841],"block_position":"47-8"},{"bbox":[87,235,261,248],"type":"text","angle":0,"index":9,"text":"Getopts 不能解析 GNU -style 长参数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"324057f0-0b9b-4b1e-836a-b147870096bb","page_size":[595,841],"block_position":"47-9"},{"bbox":[87,250,429,264],"type":"text","angle":0,"index":10,"text":"Getopts 从不改变原始位置参数，若希望移动位置参数，需手工执行shift","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"9c1efb60-0900-4198-a987-2fbbfb43554c","page_size":[595,841],"block_position":"47-10"},{"bbox":[87,266,226,280],"type":"text","angle":0,"index":11,"text":"Getopts 会自动对变量 optnd","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"0e2baa27-d91d-48e9-9b89-6a77c3beacaf","page_size":[595,841],"block_position":"47-11"},{"bbox":[88,281,180,294],"type":"text","angle":0,"index":12,"text":"合理使用shell函数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"a3929532-9399-4c36-9d28-8fc3c9fa5155","page_size":[595,841],"block_position":"47-12"},{"bbox":[88,297,245,310],"type":"text","angle":0,"index":13,"text":"1、简化程序代码，实现代码重用","id":"97a0eaf3-224d-4c65-a4c8-d5a0a73d7f6a","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"page_size":[595,841],"block_position":"47-13"},{"bbox":[87,328,182,341],"type":"text","angle":0,"index":14,"text":"2、实现结构化编程","id":"4a461835-05b1-431c-b95e-01d730aeab81","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"page_size":[595,841],"block_position":"47-14"},{"bbox":[88,343,171,357],"type":"text","angle":0,"index":15,"text":"3、提高执行效率","id":"646d2b18-9175-4a0e-b1d3-9d3ad9e7e2c0","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"page_size":[595,841],"block_position":"47-15"},{"bbox":[87,375,190,387],"type":"text","angle":0,"index":17,"text":"Function commands","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"4f0f4b25-1251-4e79-b013-acb0e7008157","page_size":[595,841],"block_position":"47-16"},{"bbox":[88,391,111,402],"type":"text","angle":0,"index":18,"text":"参数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"ab894315-b0b2-4903-acdb-b42002adaedf","page_size":[595,841],"block_position":"47-17"},{"bbox":[87,406,321,419],"type":"text","angle":0,"index":19,"text":"调用函数时，使用位置参数的形式位函数传递参数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"1ed4d99f-1579-4c16-90d6-eb0a4eea4a81","page_size":[595,841],"block_position":"47-18"},{"bbox":[88,422,265,435],"type":"text","angle":0,"index":20,"text":"函数内的 $\\$ 1-\\$ 12$ 都是位置参数","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"de9a3e84-67de-4a18-9934-1c9e43b0d373","page_size":[595,841],"block_position":"47-19"},{"bbox":[87,453,243,465],"type":"text","angle":0,"index":21,"text":"Return 或者 exir 只能返回整数值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"1a961a6a-f562-45bd-8a97-8f4b553a79b7","page_size":[595,841],"block_position":"47-20"},{"bbox":[87,468,237,481],"type":"text","angle":0,"index":22,"text":"使用标准输出实现函数的返回值","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"2eae5341-b7d0-4830-a074-77b850e257d2","page_size":[595,841],"block_position":"47-21"},{"bbox":[88,484,142,497],"type":"text","angle":0,"index":23,"text":"函数结束前","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"6a703ca2-f168-499d-a338-0b7c5c6a76b6","page_size":[595,841],"block_position":"47-22"},{"bbox":[88,500,140,513],"type":"text","angle":0,"index":24,"text":"Sysinfo.sh","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"2397cc55-1e94-4911-b2d8-fde917932f5f","page_size":[595,841],"block_position":"47-23"},{"bbox":[88,515,131,528],"type":"text","angle":0,"index":25,"text":"Sysinfo_","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"22193e02-28d7-4636-8193-d4c93607286c","page_size":[595,841],"block_position":"47-24"},{"bbox":[87,530,178,544],"type":"text","angle":0,"index":26,"text":"标准输入/输出设备","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"8adbf562-545a-4afe-a24a-79122bb8264e","page_size":[595,841],"block_position":"47-25"},{"bbox":[86,545,498,560],"type":"text","angle":0,"index":27,"text":"Linux命令在执行时常常期望接收输入数据，命令执行后又期望将产生的数据结果输出。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"506d4454-73cb-405e-8e06-665d5cdd8355","page_size":[595,841],"block_position":"47-26"},{"bbox":[86,562,499,576],"type":"text","angle":0,"index":28,"text":"Linux 的 大 部 分 命 令 都 具 有 标 准 的 输 入 / 输 出 设 备 端 口 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"88173225-86e3-4d8b-bbc4-caf4d3c4ccd0","page_size":[595,841],"block_position":"47-27"},{"bbox":[88,591,594,718],"index":29,"angle":0,"type":"table_body","img_path":"/","id":"a8535b06-32df-4784-9874-f6e98930ddf4","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>名称</td><td>文件描述符</td><td>含义</td><td>设备</td><td>说明</td></tr><tr><td>STDIN</td><td>0</td><td>标准输入</td><td>键盘</td><td>命令在执行时所要的输入通过它来取得</td></tr><tr><td>STDOUT</td><td>1</td><td>标准输出</td><td>显示器</td><td>命令执行后的输出结果从该端口送出</td></tr><tr><td>STDERR</td><td>2</td><td>标准错误</td><td>显示器</td><td>命令执行时的错误信息通过该端口送出</td></tr></table>","page_idx":47,"page_size":[595,841],"block_position":"47-28"},{"bbox":[86,721,506,751],"type":"text","angle":0,"index":30,"text":"所谓重定向，就是不使用系统的标准输入端口、标准输出端口或标准错误端口，而进行重新的指定，所以重定向分为输出重定向、输入重定向和错误重定向。通常情况下重定向到","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":47,"id":"5a79d556-c894-4165-b096-12edd8accecd","page_size":[595,841],"block_position":"47-29"}],[{"bbox":[86,79,500,92],"type":"text","angle":0,"index":0,"text":"个 文 件 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":48,"id":"d394a3bf-6c45-4852-95f6-df544fbbbbf9","page_size":[595,841],"block_position":"48-0"},{"bbox":[86,94,505,123],"type":"text","angle":0,"index":1,"text":"在Shell中，要实现重定向主要依靠重定向符实现，即 Shell是检查命令行中有无重定向符来 决 定 是 否 需 要 实 施 重 定 向 。","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":48,"id":"46e6bd41-6021-40a7-8110-26c2f390e1d7","page_size":[595,841],"block_position":"48-1"},{"bbox":[88,139,595,727],"index":2,"angle":0,"type":"table_body","img_path":"/","id":"84ae89d7-0072-43e2-8607-7d6473154f8a","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>重定向符</td><td>说明</td></tr><tr><td>&lt;</td><td>输入重定向</td></tr><tr><td>&lt;&lt;!</td><td>输入重定向的特例,即HERE文件,通常用于Shell脚本中。其中“!”可以仅只要其没在……中出现过即可。</td></tr><tr><td>!</td><td></td></tr><tr><td>&gt;</td><td>覆盖式的输出重定向</td></tr><tr><td>&gt;&gt;</td><td>追加式的输出重定向</td></tr><tr><td>2&gt;</td><td>覆盖式的错误输出重定向</td></tr><tr><td>2&gt;&gt;</td><td>追加式的错误输出重定向</td></tr><tr><td>&amp;&gt;</td><td>同时实现输出重定向和错误重定向(覆盖式)</td></tr><tr><td colspan=\"2\">空 设 备 (/dev/null)</td></tr><tr><td colspan=\"2\">空 设 备 是 个 黑 洞,发 往 它 的 任 何 内 容 都 将 不 复 存 在</td></tr><tr><td colspan=\"2\">经常 用于 屏 蔽 命 令 的 输 出 或 错 误 输出,尤其用于 Shell 脚 本 中</td></tr><tr><td colspan=\"2\">空 设 备 使 用 举 例</td></tr><tr><td colspan=\"2\">屏蔽 命 令 的 输 出 和 错 误 输 出 /dev/null</td></tr><tr><td colspan=\"2\">$ myprogram &amp;&gt;/dev/null</td></tr><tr><td colspan=\"2\">$ myprogram &gt;/dev/null 2&gt;&amp;1</td></tr><tr><td colspan=\"2\">清 空 文 件 内 容</td></tr><tr><td colspan=\"2\">$ cp /dev/null myfile</td></tr><tr><td colspan=\"2\">$ &gt; myfile</td></tr><tr><td colspan=\"2\">命令替换</td></tr><tr><td colspan=\"2\">使用 命 令 的 输 出 ,常 用 于</td></tr><tr><td colspan=\"2\">在 文 本 中 嵌 入 命 令 的 执 行 结 果</td></tr><tr><td colspan=\"2\">命令 参 数 是 另 一 个 命 令 执 行 的 结 果</td></tr><tr><td colspan=\"2\">使 用 方 法</td></tr><tr><td colspan=\"2\">$(command) 或 `command`</td></tr><tr><td colspan=\"2\">cmd1 $(cmd2) 或 cmd1 `cmd2`</td></tr><tr><td colspan=\"2\">使 用 举 例</td></tr><tr><td colspan=\"2\">$ echo The present time is `date`</td></tr><tr><td colspan=\"2\">$ rpm -qi $(rpm -qf $(which date)) # 嵌 套</td></tr><tr><td colspan=\"2\">命令组合</td></tr></table>","page_idx":48,"page_size":[595,841],"block_position":"48-2"},{"bbox":[94,734,150,748],"type":"text","angle":0,"index":3,"text":"命令行形式","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":48,"id":"8331219f-1dc5-451a-91e0-00986b12cd6b","page_size":[595,841],"block_position":"48-3"},{"bbox":[299,734,323,747],"type":"text","angle":0,"index":4,"text":"说明","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":48,"id":"cc38822f-05ce-40a7-8f55-ebdcdf7e3639","page_size":[595,841],"block_position":"48-4"},{"bbox":[527,734,550,747],"type":"text","angle":0,"index":5,"text":"举例","color":{"line":"rgba(13, 83, 222, 1)","fill":"rgba(13, 83, 222, 1)"},"page_idx":48,"id":"25e6e293-39f3-46e7-a40d-f03b3e614956","page_size":[595,841],"block_position":"48-5"}],[{"bbox":[88,76,595,239],"index":0,"angle":0,"type":"table_body","img_path":"/","id":"4ef1cec2-cb05-4f9f-9c5d-c2c0b6cbb85b","color":{"line":"rgba(103, 194, 63, 1)","fill":"rgba(103, 194, 63, 1)"},"table_body":"<table><tr><td>CMD1; CMD2</td><td>顺序执行若干命令</td><td>pwd;date;ls</td></tr><tr><td>CMD1 &amp;&amp; CMD2</td><td>当CMD1运行成功时才运行CMD2</td><td>gzip mylargef</td></tr><tr><td>CMD1 || CMD2</td><td>当CMD1运行失败时才运行CMD2</td><td>write osmonc\nmy.log</td></tr><tr><td>(CMDLIST)</td><td>在子Shell中执行命令序列</td><td>(date; who | v)</td></tr><tr><td>{CMDLIST}</td><td>在当前Shell中执行命令序列</td><td>{cd /home/jjh}</td></tr></table>","page_idx":49,"page_size":[595,841],"block_position":"49-0"}]],"mergeConnections":[{"id":"bfc6424b-d38b-442d-9dd2-c1ba0e3a7377","blocks":["6-20","7-0"],"type":"merge"},{"id":"40e2e6c4-25e3-4a7c-913a-b59fbe44d39d","blocks":["7-2","8-0"],"type":"merge"},{"id":"73fe0789-037f-4d18-9782-14707601ef59","blocks":["10-5","11-0"],"type":"merge"},{"id":"6376b7bd-1d4e-4446-b506-8d082df85a80","blocks":["21-9","22-0"],"type":"merge"},{"id":"83137771-a6c3-45cd-b97c-401d528fad51","blocks":["33-4","34-0"],"type":"merge"}]}