
<map>
  <node ID="root" TEXT="Shell">
    <node TEXT="Shell" ID="cde063a9089493ce5730e22ee0618e7d" STYLE="bubble" POSITION="right">
      <node TEXT="Shell简介" ID="9d7fd2e95d31adb9d030e51556cfc34c" STYLE="fork">
        <node TEXT="文件名" ID="23dc1797b0de77f931117f03327ebb3d" STYLE="fork">
          <node TEXT="xx.sh" ID="0069a034c0e3151604250896d4fa7d04" STYLE="fork"/>
        </node>
        <node TEXT="功能简介" ID="58df25f85bc1f8293aa3d58cc3029129" STYLE="fork">
          <node TEXT="简化操作步骤，提高效率，减少人为干预，减少系统故障" ID="0de607c0172e0b66f13e6f333c2049f2" STYLE="fork"/>
          <node TEXT="自动化的完成基础配置" ID="8dfe9286706f6981affb930322e2da24" STYLE="fork">
            <node TEXT="不会手动搭建程序，一定学不会shell" ID="685065a16d418cdfd1a3aadbdce09d6b" STYLE="fork"/>
          </node>
          <node TEXT="自动化安装程序" ID="fabadf981e19e706807ef532793a9e16" STYLE="fork">
            <node TEXT="自动化配置程序" ID="afc7c25b0f97ec78a066b0445a36e665" STYLE="fork"/>
          </node>
          <node TEXT="自动化配置文件" ID="e4e420a8e3f918b0fcd9bc1590ffa7e4" STYLE="fork"/>
          <node TEXT="自动化部署业务" ID="d437da176c8e7044cf41cb19fd71c55f" STYLE="fork">
            <node TEXT="部署java之类的" ID="0207049d2c1bc7c39aa4ab84addb6761" STYLE="fork"/>
          </node>
          <node TEXT="自动化定期备份恢复程序" ID="498efdf8d7037e675a93cfe7b1d5275f" STYLE="fork">
            <node TEXT="mysql+增量+binlog+crond+shell脚本" ID="a4d796f882e3f8c36d1a0b439dc9afa0" STYLE="fork"/>
          </node>
          <node TEXT="自动化信息采集" ID="84600e93f91f344840b4f10ca0c1c04b" STYLE="fork">
            <node TEXT="zabbix+shell/python" ID="e86ea1c1325d95fcc594a98443075043" STYLE="fork"/>
          </node>
          <node TEXT="自动化日志收集（ELK）" ID="ccdcea003950013349ee20993bb8eead" STYLE="fork">
            <node TEXT="收集-&gt;存储-&gt;展示-&gt;分析" ID="463e01b78d7573f89af14a2d5f984d84" STYLE="fork"/>
            <node TEXT="日志分析" ID="298911f0dbf7e7a66cbd308d342b2ce6" STYLE="fork">
              <node TEXT="取值-&gt;排序-&gt;去重-&gt;统计-&gt;分析" ID="7707b73d8c3630efe41f8f96bdc9beb5" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="自动化扩容/缩容（zabbix+shell）" ID="8afdc0d718331a275a8004ac139bc4c1" STYLE="fork"/>
        </node>
        <node TEXT="总结" ID="476a60dcff602ef7e643bd2df3c68324" STYLE="fork">
          <node TEXT="shell什么都能做" ID="29a9fbb00c08268e097058421520b19f" STYLE="fork"/>
        </node>
      </node>
      <node TEXT="基础技能" ID="3fddf78b86598b7bd18ad8b7608f41e8" STYLE="fork">
        <node TEXT="变量" ID="25e5e2e546e8f1d377f87cb5fdcd2e20" STYLE="fork">
          <node TEXT="自定义变量" ID="432764f4ea5d3f9d27127fb476e838e1" STYLE="fork"/>
          <node TEXT="系统环境变量" ID="6c963139401cd1da435f1052303fd3a2" STYLE="fork"/>
          <node TEXT="预先定义变量" ID="09ac21ddbf1212a0f572b446a820da52" STYLE="fork"/>
          <node TEXT="位置参数变量" ID="75db7982b6e7a7d6a53d984043a5944a" STYLE="fork"/>
          <node TEXT="内置变量" ID="628649a5cb198532f22c04e1f82198ad" STYLE="fork">
            <node TEXT="contine，break，exit" ID="04d26c967bfa3c9ac8f314ef6bb3fb3b" STYLE="fork"/>
          </node>
        </node>
        <node TEXT="条件判断" ID="78e01736d8036a3d25c69d1649f0c0cb" STYLE="fork">
          <node TEXT="if else" ID="fc0bf17bae8ff0ea0f4b5bfd69391c1e" STYLE="fork">
            <node TEXT="if [-f $oldest_file];then  if" ID="0efcd4573b000e977ca4a07b0cfc1f06" STYLE="fork"/>
          </node>
        </node>
        <node TEXT="循环语句" ID="0871642d0b2940f2b49733a4461a1400" STYLE="fork">
          <node TEXT="for ，while" ID="455c100762c6acaf1c4b4091732f775e" STYLE="fork">
            <node TEXT="while [] ;do xxx done" ID="d878c81e458f0469160249a4419b9b50" STYLE="fork"/>
          </node>
        </node>
        <node TEXT="流程控制" ID="afff1990f1e9eead0892ce9942e12936" STYLE="fork">
          <node TEXT="case" ID="96c86127e52281c83479362397be85ad" STYLE="fork"/>
        </node>
        <node TEXT="函数" ID="b770f8f5819655eb1a1cd5c1d8fd5465" STYLE="fork">
          <node TEXT="function" ID="42288cac72dbb86a41953015a5e5c2b1" STYLE="fork"/>
        </node>
        <node TEXT="数组" ID="d15acb859ff7699110c0a456df6fd773" STYLE="fork">
          <node TEXT="array" ID="de0df3c973c9b55d20e0d009dbdb0eb7" STYLE="fork"/>
        </node>
        <node TEXT="正则表达式" ID="9a0881557d820130fc4c874aec5da78a" STYLE="fork"/>
        <node TEXT="案例，项目" ID="723426263d244639f32f54605ccf56fc" STYLE="fork"/>
      </node>
      <node TEXT="基本格式" ID="0567da906d4a1014a6f86e15757fe59d" STYLE="fork">
        <node TEXT="执行" ID="b1ae34caaeee28fbc7d0c9f3e5f9109f" STYLE="fork">
          <node TEXT="建议使用bash 文件名并加上文件头部的方式" ID="e76a8ec7b16932fc8e3133dcc021cf8a" STYLE="fork"/>
          <node TEXT="运行shell程序" ID="8ae112eaa72ea6e3a075a131375b63c5" STYLE="fork">
            <node TEXT="chmod + x 文件名" ID="4febe0a56df75419e8005d66ccc73f8d" STYLE="fork">
              <node TEXT="./文件名" ID="b25532963449a8abad8c3efa9b039713" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="使用bash shell解释器" ID="7a73b0c2faf99ebcb24491264881df7e" STYLE="fork">
            <node TEXT="bash 文件名" ID="a897c3eb564398b619c7706e3615e751" STYLE="fork"/>
            <node TEXT="sh 文件名" ID="ccc65d1dbae84fd09b32dea5d24977e3" STYLE="fork">
              <node TEXT="bash是一种具体的shell" ID="d580f92baf05c484943b8eff0b3d3bfa" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="直接用./文件名+添加权限" ID="98761b63615e59c37961be3635f15ba7" STYLE="fork">
            <node TEXT="在文件头部添加#!/usr/bin/bash" ID="8d87d1b27d7bbf52273c1ce78f3506fb" STYLE="fork">
              <node TEXT="告诉系统用什么解释器" ID="7c64713a585b2cbb8a4eeea0369dc3af" STYLE="fork"/>
              <node TEXT="这个头部必须加" ID="3ad2a2df450bc952fac07ca5b41d4e92" STYLE="fork"/>
            </node>
          </node>
        </node>
        <node TEXT="shell特性" ID="f62f2008b679e6862f0939c7af46dc43" STYLE="fork">
          <node TEXT="命令补全和文件路径的自动补全" ID="d94c8e9747553201daaf4ce81127c969" STYLE="fork">
            <node TEXT="table" ID="315d0c6180aedd21708857036c8c85bc" STYLE="fork"/>
          </node>
          <node TEXT="命令和历史记忆功能" ID="7957da3b981459e76e0ff63e02250788" STYLE="fork">
            <node TEXT="history" ID="4a21a9dd88c64c769f3fb3d3c9cfb70b" STYLE="fork"/>
          </node>
          <node TEXT="别名" ID="e298320bff4ea92ee851b06b7f66b33f" STYLE="fork">
            <node TEXT="alias" ID="572b2c584acd882e98df2db00a35a2d4" STYLE="fork">
              <node TEXT="查看当前shell的别名" ID="2097705955910456848ad6ab1982a3bf" STYLE="fork"/>
              <node TEXT="设置" ID="4e5055d81abf6aa98e334dfe27138618" STYLE="fork">
                <node TEXT="alias tt=&quot;echo tt&quot;" ID="fdd26622552642589032fff730fbee3e" STYLE="fork"/>
              </node>
            </node>
            <node TEXT="unalias" ID="dd9e8978e053660a0331d3efdb07d042" STYLE="fork">
              <node TEXT="取消别名" ID="e84b8614939a7cfe5b7d9a73105abbb4" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="常用快捷键" ID="fc21388c51cc075680e8a68f8a2d648c" STYLE="fork">
            <node TEXT="ctrl+u" ID="49481bc0777f2a1192ae2913250079cd" STYLE="fork"/>
            <node TEXT="+a" ID="bf2ea361d427580137468784e0acfffa" STYLE="fork"/>
            <node TEXT="+e" ID="b579f74b312bb054f67a959d75056f2b" STYLE="fork"/>
            <node TEXT="+l" ID="92196073f22bc7b5d5404b85c4df1bcd" STYLE="fork"/>
            <node TEXT="+c" ID="e4ea42d1d6555dbf6c4ed05ec71cc844" STYLE="fork">
              <node TEXT="结束当前程序" ID="8c3da6bd2e543f503bf7a2459d0f4eef" STYLE="fork"/>
            </node>
            <node TEXT="+z" ID="ac84adc4bc385d8a77dd1a54f7010252" STYLE="fork">
              <node TEXT="把前台程序挂载到后台" ID="77330793f5568a7669c632f658c6c3c5" STYLE="fork"/>
            </node>
            <node TEXT="+d" ID="19bd797cf3ecbdf32946c0583a3ba13f" STYLE="fork"/>
            <node TEXT="+w" ID="f0b65084750469eeb442203a216123bb" STYLE="fork"/>
            <node TEXT="+r" ID="db940e7b794308d0d1a4a66b032df8ff" STYLE="fork"/>
            <node TEXT="+y" ID="c9f1baa27c59159b21d9b02eb90d0dad" STYLE="fork">
              <node TEXT="撤销" ID="e2fafb474043fa920afa94917662cb2b" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="前台后台作业控制" ID="a9ac449eb95d65c1bc797c04dbb2db87" STYLE="fork">
            <node TEXT="bg" ID="d560d857b5a1bce6b37481e71aeae448" STYLE="fork"/>
            <node TEXT="fg" ID="9df6a308dabd3fd8c0a8761b1c839388" STYLE="fork"/>
            <node TEXT="jobs" ID="68a8b266a263a970076790c852077619" STYLE="fork">
              <node TEXT="推荐用screen" ID="2a1d18220db5797b5208ec97bb4cef24" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="输入输出重定向" ID="be26d338b63f4d7fa0fccc622db71e3d" STYLE="fork">
            <node TEXT="&gt;" ID="b0377f7c19c9af9dd34b6320230874f9" STYLE="fork">
              <node TEXT="重定向" ID="ceb448d5a49853c2aaf299e53bdb3b98" STYLE="fork">
                <node TEXT="就是把一个内容/文件加到另一个里边" ID="5a175f044ab531b5f6e66fb45dc61734" STYLE="fork"/>
              </node>
            </node>
            <node TEXT="&gt;&gt;" ID="69e53f612106aad2f96ed84a8222116d" STYLE="fork"/>
            <node TEXT="1&gt;" ID="f6fb14fb251bc1c6c97df0a7cacf3a92" STYLE="fork"/>
            <node TEXT="2&gt;&gt;" ID="ec3dc737707f1de194e7379e8b24ad8d" STYLE="fork">
              <node TEXT="错误追加" ID="4b5f350c79c051b680019d79bd450437" STYLE="fork"/>
            </node>
            <node TEXT="$&gt;" ID="4d548fd1b6dbf50a6e2703aa21cfde6a" STYLE="fork"/>
            <node TEXT="cat &lt;" ID="b48f7102611089912f1576409b5d960f" STYLE="fork">
              <node TEXT="读取键盘上的输入内容" ID="e72c3212f5975daef3bd9f4e973f4633" STYLE="fork"/>
              <node TEXT="区别于cat" ID="0544c03a658fd00fda818f4c45f3d70a" STYLE="fork">
                <node TEXT="cat &lt;是先读入再重定向" ID="58b837d01212fb9de69dfc86bc6c7ade" STYLE="fork"/>
                <node TEXT="cat是直接重定向" ID="a5ab17b7a9c415cd5031e10abde82f2e" STYLE="fork"/>
              </node>
            </node>
          </node>
          <node TEXT="管道" ID="9100d691101e84cccf21fef19d3a77b5" STYLE="fork">
            <node TEXT="|" ID="06da4d5a7481dd0c059e99e872e55bbc" STYLE="fork"/>
            <node TEXT="将当前文件的输出交给后者命令的输入" ID="4037c1fcc9f28dcd4433a6a1b8dee64e" STYLE="fork"/>
            <node TEXT="tee" ID="85833b0e2fe6e49181a054c71e92581a" STYLE="fork">
              <node TEXT="将管道的值获取出来" ID="8d13ccbac09a74f6f9ccd548f3341779" STYLE="fork"/>
            </node>
            <node TEXT="eg" ID="0c504f91bef96abadae1679ad95d472e" STYLE="fork">
              <node TEXT="cat /etc/hosts|tee test1.txt" ID="d7e0349d2e645d4ff2196e5918dd2916" STYLE="fork">
                <node TEXT="会自动生成一个test1.txt，并将hosts中的内容写入test1" ID="a07fa2bd0907aa94c41241711e1ea61c" STYLE="fork"/>
                <node TEXT="因为这些数据流经管道，通过tee获取到了" ID="5bdb15c5c0ccfdd36fc60ad7078cfdc0" STYLE="fork"/>
              </node>
            </node>
          </node>
          <node TEXT="命令排序" ID="2c0aafe94d36303dc9fb96a7d13dd138" STYLE="fork">
            <node TEXT="；" ID="2b14757baaa25ce7362380a30dc90767" STYLE="fork">
              <node TEXT="前后命令无逻辑关系" ID="5ff28bea7ae563b24e24e61a547e5271" STYLE="fork">
                <node TEXT="前边无论成不成功都执行后边的命令" ID="c72952c2fd9579dc80bd7ccd32f05af6" STYLE="fork"/>
              </node>
            </node>
            <node TEXT="&amp;&amp;" ID="be4500520f4738958a41409cf330614f" STYLE="fork">
              <node TEXT="前后命令同时成功才可以执行；命令1&amp;&amp;命令2" ID="41b9d007b300f07ea970e466c6d88a1b" STYLE="fork">
                <node TEXT="命令1执行成功才会执行命令2" ID="70a11d355e77e28cf39cdcc281976f8a" STYLE="fork"/>
                <node TEXT="先检查命令1，命令1成功了，再检查命令2；命令1失败结束，不检查命令2" ID="cc518b595ae4b9cf5f8ce4d1bc05692b" STYLE="fork"/>
              </node>
            </node>
            <node TEXT="||" ID="cd872dd2ba6835ec621dfbe7373e4896" STYLE="fork">
              <node TEXT="命令1执行失败命令2才会执行" ID="2b32820e2d8223514c982605a6bfd563" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="shell通配符" ID="a51d307686d24b7b6568863c278c61d5" STYLE="fork">
            <node TEXT="*" ID="b40a44c294a14c6928409577656d677e" STYLE="fork">
              <node TEXT="匹配任意多个字符" ID="64058eabebda81f87c9b5a68506bb1ed" STYLE="fork"/>
            </node>
            <node TEXT="？" ID="b984fee401fd0e42cf01b7a6df5e3daa" STYLE="fork">
              <node TEXT="匹配任一字符" ID="c293955ccf53ac05eab0b4ca9f75b09d" STYLE="fork"/>
            </node>
            <node TEXT="[ ]" ID="0268118ce27dfa9089a7dbaed45340e9" STYLE="fork">
              <node TEXT="匹配括号中任意一个字符" ID="217296d5647158db39d773227167e5cc" STYLE="fork"/>
            </node>
            <node TEXT="（）" ID="3d489d3def84c82fb9b331d8a9f8351d" STYLE="fork">
              <node TEXT="在子shell中执行（cd /boot;ls）" ID="bd52616ce42a9e2e32f37b21d5b051e2" STYLE="fork">
                <node TEXT="umask 077" ID="76edaa509a8b388946c64a01bd60652a" STYLE="fork"/>
                <node TEXT="touch file 1000" ID="3efd9cfe05fecd083c2d481c21d87e51" STYLE="fork"/>
              </node>
              <node TEXT="重新开辟了一个子shell完成执行" ID="5af20b2d985243a06fc9f61cbca7d59e" STYLE="fork"/>
              <node TEXT="eg：cd /boot;ls但是他自己不移动" ID="7781242eee1956dda99b8b3c14899705" STYLE="fork"/>
            </node>
            <node TEXT="{ }" ID="87d291df5dea48484d709c562ff9a1c3" STYLE="fork">
              <node TEXT="在集合中touch file{1..9}" ID="54b757366f4781849650dcc11e6dfc53" STYLE="fork">
                <node TEXT="新建file1，file2一直到file9" ID="c8b0b0d063de1b142b8adb877aaa02b1" STYLE="fork"/>
              </node>
            </node>
            <node TEXT="\" ID="52bafba5c4bde429fd596324ed3c4433" STYLE="fork">
              <node TEXT="转义字符" ID="c4a2c86b8c53d30265a21ee66ffbe6fa" STYLE="fork"/>
              <node TEXT="必须与要转义的挨在一起" ID="1cf7cee4ee38c20a0ba34ffcbe537e6d" STYLE="fork"/>
            </node>
            <node TEXT="特定字符" ID="2c30a4475bb9e7f0b3bc97b06f3f7a5f" STYLE="fork">
              <node TEXT="[[:space:]]" ID="c3a7e6c8bc6257e1357f8d8b92e9c4fc" STYLE="fork">
                <node TEXT="空格" ID="aa59a54d002f1d9b6cb08ca05a31f023" STYLE="fork"/>
              </node>
              <node TEXT="[[:digit:]]" ID="4de4e32868d610b7399aaaa4365c98ed" STYLE="fork">
                <node TEXT="数字1-9" ID="22f4c1bf015df9f08295aa695f03ca80" STYLE="fork"/>
              </node>
              <node TEXT="[[:lower:]]" ID="93f69b9854a7e89f4e8ba6709f3b1f97" STYLE="fork">
                <node TEXT="a-z" ID="29126809974526f3ff2cd528208219f8" STYLE="fork"/>
              </node>
              <node TEXT="[[:upper:]]" ID="21d449e705c86a83f4c67d1131b031b9" STYLE="fork">
                <node TEXT="A-Z" ID="71a1f1040a2453382bb78f449835c309" STYLE="fork"/>
              </node>
              <node TEXT="[[:alpha:]]" ID="73546f14b340ca517e498eda0557c51f" STYLE="fork">
                <node TEXT="a-Z" ID="dde34e7769ed2564646b0676b4d9f02f" STYLE="fork"/>
              </node>
            </node>
          </node>
          <node TEXT="echo和printf" ID="0fcd01389a8f909109a31dd39fe1a98f" STYLE="fork">
            <node TEXT="echo" ID="ae3145ffda732b74e48bbc5a10c6e8f0" STYLE="fork">
              <node TEXT="eg：echo输出不同颜色" ID="a00795278e2aa70bc03382dec2d28ed3" STYLE="fork">
                <node TEXT="echo -e &quot;\033[字背景颜色;文字颜色==oldboy==\033[0m&quot;" ID="7f01e25791dec2dceb4c6a8648248b15" STYLE="fork"/>
                <node TEXT="echo -e &quot;\033[34m蓝色字oldboy traininig\033[0m&quot;" ID="a619243f79a73b31db633d9e785b62bc" STYLE="fork"/>
              </node>
            </node>
            <node TEXT="printf是格式化输出文本" ID="083d8759e7f663496f62bc92df2a7f58" STYLE="fork"/>
          </node>
        </node>
      </node>
      <node TEXT="变量" ID="b6e8bc6da8465fea5ccd7dfae3122ad5" STYLE="fork">
        <node TEXT="$" ID="a5bcf02e3480ecdb70a0d50ecec63f15" STYLE="fork">
          <node TEXT="定义" ID="38196e9479f3a28b980cde2ba35b98de" STYLE="fork">
            <node TEXT="a=1" ID="938c263eb15c3ab40f787c2a665d8ee8" STYLE="fork"/>
          </node>
          <node TEXT="输出" ID="008c10802981db57724a756eec4372d7" STYLE="fork">
            <node TEXT="echo $a" ID="b1beaf6f434a2983b3e5c67824fb2fa4" STYLE="fork"/>
          </node>
        </node>
        <node TEXT="IP=$(ifconfig eth0|grep &quot;inet&quot;)" ID="f114d8850ec61a5dbc44f7309f54065d" STYLE="fork">
          <node TEXT="IP=&quot;ifconfig eth0|grep &quot;inet&quot;&quot;" ID="b10daea37533ae98f1e88817779b7c21" STYLE="fork"/>
          <node TEXT="这样不行，因为我们查询出来的是一个变量" ID="ee287a8c3d6fbfa1a40c8923bdd894dc" STYLE="fork"/>
        </node>
        <node TEXT="变量分类" ID="7bcd36158a4475b5cb9b5a8ff86abd0d" STYLE="fork">
          <node TEXT="自定义变量" ID="2e36bee2b87415c2e83f707d94818a8e" STYLE="fork">
            <node TEXT="定义" ID="728e389516c4d31a6a4012f2a99abab2" STYLE="fork">
              <node TEXT="变量名=变量值" ID="75da388d3d761672dfa2ecc1975572ce" STYLE="fork"/>
            </node>
            <node TEXT="引用变量" ID="53b76b5f77b524233b7e4998976ba45a" STYLE="fork">
              <node TEXT="$变量名" ID="989d557813eb38751e125c848d93840f" STYLE="fork"/>
              <node TEXT="${变量名}" ID="1182546da0cbdb51e64f53e98a3cf4b4" STYLE="fork"/>
              <node TEXT="区别" ID="f535002eb9e36de6dee234542c23832b" STYLE="fork">
                <node TEXT="{}分割变量与其他，防止识别错误" ID="db1e3a53d8d1d54e8a69f992b9fcf620" STYLE="fork"/>
              </node>
            </node>
            <node TEXT="查看变量" ID="8bed27421d5e24cfa84398fce328739b" STYLE="fork">
              <node TEXT="echo $变量名" ID="e8122bff8c9766b62475a692e9b269b1" STYLE="fork"/>
              <node TEXT="set显示所有变量" ID="518b47976d013dbf4ec7067779118fb9" STYLE="fork"/>
            </node>
            <node TEXT="取消变量" ID="bd5a147a3e37d6afebc954f749e6b52c" STYLE="fork">
              <node TEXT="unset：仅在当前shell有效" ID="09840f4a71399e6966ce1ff8cc6fe24d" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="系统环境变量" ID="a581d034d6098ff18f8991a2351bb4fa" STYLE="fork">
            <node TEXT="变量作用范围" ID="9bf40081a4cdc251c4f39573a25b21ac" STYLE="fork">
              <node TEXT="在当前shell和子shell中生效" ID="e8385718210a09712559ff13458bc98b" STYLE="fork"/>
            </node>
            <node TEXT="定义" ID="9620382e9db5864d657283723fc60c82" STYLE="fork">
              <node TEXT="export 变量名" ID="0e4262b2ed55b778b64c3f548d871f08" STYLE="fork">
                <node TEXT="将自定义变量转换为系统环境变量" ID="736c282098acc1bb2b23b06363c19fc1" STYLE="fork"/>
              </node>
            </node>
          </node>
          <node TEXT="位置参数变量" ID="d63ffb1710732b23fda87a61dfe51197" STYLE="fork">
            <node TEXT="$1,$2,,,," ID="cad7546a13d630dda60787deb94b186b" STYLE="fork">
              <node TEXT="可以接收10个" ID="9a5063fdee77e68603878ee6737bf521" STYLE="fork"/>
            </node>
            <node TEXT="在用户输入参数时，获取第一个，第二个。。" ID="7b9163ef2be8cda6136f2215b355a832" STYLE="fork"/>
            <node TEXT="read -p &quot;接收参数时系统要显示的提示信息&quot;" ID="9c75cf2154aaf1a8bfd35198ef31ac25" STYLE="fork"/>
          </node>
          <node TEXT="预定义变量" ID="45ecbc570c8578e753066da39b202486" STYLE="fork">
            <node TEXT="$0" ID="92baec17baec21d01f9e960e9abaa714" STYLE="fork">
              <node TEXT="脚本名" ID="14ee2e0f74d31ef737a82ad8d00e63e4" STYLE="fork">
                <node TEXT="eg：$(basename $0)" ID="5a65c79400bcdf61774793386520960f" STYLE="fork"/>
              </node>
            </node>
            <node TEXT="$*" ID="484752258ebe4e616c69c43169316681" STYLE="fork">
              <node TEXT="所有的参数" ID="a5f08a673d96245f120787c0a9f9500c" STYLE="fork"/>
            </node>
            <node TEXT="$@" ID="6b29a5d76eacad07e982464a9d1583a6" STYLE="fork">
              <node TEXT="所有的参数" ID="d84c0e1c9423b226499a20461d0b2c30" STYLE="fork"/>
            </node>
            <node TEXT="$#" ID="a5a9da56efefc0a6d01dc23d04ec8c3d" STYLE="fork">
              <node TEXT="参数的个数" ID="a4c789a7cd01e31f4c2357502ded65eb" STYLE="fork"/>
            </node>
            <node TEXT="$$" ID="cd884b23ece4e0f533c08fba4244af70" STYLE="fork">
              <node TEXT="当前进程的PID" ID="7c7096c1dde9b6b425b6170a2091be5f" STYLE="fork"/>
            </node>
            <node TEXT="$!" ID="6fcc393c096821d3795cf0384bd7e161" STYLE="fork">
              <node TEXT="上一个后天进程的PID" ID="ee2f9fc1ffc2b8948ca751e62e046ac8" STYLE="fork"/>
            </node>
            <node TEXT="$?" ID="81dd2777222f5527ebd71c5bba7c63ea" STYLE="fork">
              <node TEXT="上一个命令的返回值，0表示成功" ID="29caffd0cc521083174e97cac7a627d2" STYLE="fork"/>
            </node>
          </node>
        </node>
        <node TEXT="命令" ID="7d8e92b53d985330d522be7a60eb82dc" STYLE="fork">
          <node TEXT="全大写" ID="a0f0b33b3eb6c189624508776d37191b" STYLE="fork"/>
          <node TEXT="驼峰" ID="9c069baf5cd4f57b171760760641ca05" STYLE="fork">
            <node TEXT="TestNum_Kell" ID="aa5738322e7890b12fea55b6e7a52fdf" STYLE="fork"/>
          </node>
          <node TEXT="不允许数字命名和-命名" ID="b5c5231917db003ca596b1815dc76449" STYLE="fork"/>
        </node>
        <node TEXT="引用" ID="65fc80eb5cac113a9b8c9388615910f6" STYLE="fork">
          <node TEXT="source" ID="7c2fdac8103c312fad5ed12c81e79375" STYLE="fork">
            <node TEXT="source ./" ID="ccc5b0fc4f61ccf5f2a538e30b3e3b3a" STYLE="fork"/>
            <node TEXT="source /etc/dev/" ID="b023a83daca6818e22c65ca6aafb16de" STYLE="fork"/>
            <node TEXT="" ID="daee52091d62287b7051c9ae140bfc16" STYLE="fork"/>
          </node>
          <node TEXT="定义永久的" ID="b5e17876fe105da80e59509e0f6dd9e2" STYLE="fork">
            <node TEXT="写入相应的配置文件" ID="ad643dbb5137343b3a853b9b758f0702" STYLE="fork"/>
          </node>
          <node TEXT="注意弱引用“ ”和强引用‘   ’" ID="6c0039f076ab66ef1240a52120445fb5" STYLE="fork">
            <node TEXT="“”会解析变量" ID="7e484856aec41fdd4460d9b35e1bd407" STYLE="fork">
              <node TEXT="但是不能解析命令" ID="c73f90f8b6e5f8b08a7805f98b96147d" STYLE="fork"/>
            </node>
            <node TEXT="‘’输入即输出" ID="99f492e0f7e948a6c78da76a606d07f8" STYLE="fork"/>
          </node>
          <node TEXT="\&apos;\&apos;等于$()" ID="e044bc1eea338cc1572e525c88d650f7" STYLE="fork">
            <node TEXT="\&apos;\&apos;会被有限引用" ID="573ec6c03c0cd10de5e33901a51037cf" STYLE="fork"/>
            <node TEXT="但是命令必须使用$()括起来" ID="85906777ca35e9bb1756058a7ce8a2be" STYLE="fork"/>
          </node>
        </node>
        <node TEXT="变量赋值的几种方式" ID="71e0d5cb5d2d510ea101fcfa4ccb170a" STYLE="fork">
          <node TEXT="显示赋值" ID="296606dba3404115a4da4078f005732e" STYLE="fork">
            <node TEXT="变量名=变量值" ID="408ef71d1a47c0ce442fe3b3e22d237e" STYLE="fork"/>
            <node TEXT="eg" ID="c6d8338a31de8115c724e8a4ac233bdc" STYLE="fork">
              <node TEXT="ip=192.168.1.1" ID="7542587b78de1598b44e79b82a3feb6e" STYLE="fork"/>
              <node TEXT="school=&quot;wuhan&quot;" ID="faeb8157d4f1ba505c08c36d13330dc8" STYLE="fork"/>
              <node TEXT="mingling=${date+%F}" ID="886c8fcc8b854f1a549ed120cb64a74f" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="read从键盘读入" ID="ba90f8f905f997a00e8d96943214e0ed" STYLE="fork">
            <node TEXT="read 变量名" ID="cc85e7b4e935adb3cca3151e400929f7" STYLE="fork"/>
            <node TEXT="read -p“提示信息：” 变量名" ID="2d284507568a87f8405c1c2f6c0fd4c3" STYLE="fork"/>
            <node TEXT="read -t 5 -p &quot;提示信息：t时等待五秒钟&quot; 变量名" ID="e67ebf2614a518b21db5866fed462066" STYLE="fork"/>
            <node TEXT="read -n 2 变量名" ID="22e63eab87d0b87287bd31c80d033011" STYLE="fork">
              <node TEXT="可以接收两个变量" ID="cceb699c846569ce8211a2f3e862a2a1" STYLE="fork"/>
            </node>
          </node>
        </node>
        <node TEXT="变量数值运算" ID="6ba06964bb6c98c7032c6aaae8b701a1" STYLE="fork">
          <node TEXT="整数运算" ID="4ee102c637e3338766b3376142b409bd" STYLE="fork">
            <node TEXT="expr + - \*(要加反引号) / % （除号也加）" ID="d6bed490ed6e880f90b394e250dd9d7b" STYLE="fork"/>
            <node TEXT="$(())" ID="f7e7356170f8c2127b0c9cb32f740d5c" STYLE="fork">
              <node TEXT="eg:$((1+2))" ID="1543056ac588c5f61b5238de3917eb84" STYLE="fork"/>
              <node TEXT="$(($aa/1024))" ID="2c22951fe1fd5d665415a4cc4fbf7d2d" STYLE="fork"/>
            </node>
            <node TEXT="$[]" ID="5dbdb8e337563c2d29a2d8174f941620" STYLE="fork">
              <node TEXT="eg:$[1-2]" ID="af981f749bd60a006d450749471a3375" STYLE="fork"/>
            </node>
            <node TEXT="let" ID="15e6bb4ca1c445e07341c0c63b00cec9" STYLE="fork">
              <node TEXT="eg" ID="88e7a591381eea4e8cd57c4c46b84240" STYLE="fork">
                <node TEXT="let sum=2+3" ID="ae2dc7880a22ef90329c7e1c766db54c" STYLE="fork"/>
                <node TEXT="$sum" ID="b3d9cadd68f58d80ec2456f78d1a2183" STYLE="fork"/>
              </node>
            </node>
          </node>
          <node TEXT="小数运算" ID="7d86c5cde022fcd1bd6b9edcb8245f2f" STYLE="fork">
            <node TEXT="bc + - * /" ID="a94bb8ade6bb00ab20992550325386f6" STYLE="fork">
              <node TEXT="echo &quot;scale=2;6/4&quot; | bc" ID="53e284aa91ba0a60e16556fb49b934d8" STYLE="fork">
                <node TEXT="1.5" ID="50a8649b9347dfdbac6d12888566b237" STYLE="fork"/>
              </node>
            </node>
          </node>
        </node>
        <node TEXT="变量替代" ID="a06540e634ae337806f1583d3346eabc" STYLE="fork">
          <node TEXT="${变量名-新变量名}" ID="6908eb2aeaf765a28dec115ac6a88b04" STYLE="fork">
            <node TEXT="变量没有被赋值，会使用新变量值替代" ID="dd16e95f76f8c9ef4ce722a0841ede4d" STYLE="fork"/>
            <node TEXT="变量已经被赋值（包括空值），不会替代" ID="e5490578d553b4426606e149ae5d2b48" STYLE="fork"/>
          </node>
        </node>
        <node TEXT="变量自增" ID="440fed113f01b6fc80c083b9bd016d0e" STYLE="fork">
          <node TEXT="let i++" ID="4b77260fd07aca8cdd216fb3c5c7df11" STYLE="fork"/>
          <node TEXT="let ++i" ID="af0f7d04414b11556443f634284710ec" STYLE="fork"/>
        </node>
      </node>
      <node TEXT="条件测试" ID="6fd0d5bae29a5cd8256c8f9733f1f52e" STYLE="fork">
        <node TEXT="分类" ID="18ef93bf7572c9219a1cf58e0249f40c" STYLE="fork">
          <node TEXT="文件测试" ID="84e8ff44b03494549219c41112830145" STYLE="fork">
            <node TEXT="-d" ID="224e6135248ac6aeff119da6372c973a" STYLE="fork">
              <node TEXT="是否存在而且是目录" ID="2b594dc0907943df98cbe0b4fd67a00d" STYLE="fork"/>
            </node>
            <node TEXT="-e" ID="daa94768ce1f06d380414cef34a1bff0" STYLE="fork">
              <node TEXT="文件存在就为真" ID="939b313a360045dc08a90d62a7e138f0" STYLE="fork"/>
            </node>
            <node TEXT="-f" ID="196a4b88efa1e1d6543fdfeb7eded855" STYLE="fork">
              <node TEXT="是否存在而且是普通文件(以有无后缀判断)" ID="6a078a94f6b789801acb297602a9b72d" STYLE="fork"/>
              <node TEXT="if[-f $fimename]" ID="e987b06fe110c9741147ab123ebaddca" STYLE="fork"/>
            </node>
            <node TEXT="-r" ID="5f175bba3997f7b93f615dd48e06b33c" STYLE="fork">
              <node TEXT="读权限" ID="4ed42ae74a5577f0d8cd5b7b7ff680a5" STYLE="fork"/>
            </node>
            <node TEXT="-x" ID="40ed01c43f542682bb7361435af0bc81" STYLE="fork">
              <node TEXT="执行权限" ID="0d2ee1f79de0115274a28705e8fc4bed" STYLE="fork"/>
            </node>
            <node TEXT="-w" ID="30ac20d67e891eb802ac65836cad5cd3" STYLE="fork">
              <node TEXT="写权限" ID="524dffbfe2491bab4f1244e9a6fe87ad" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="数值比较" ID="c3b6249ad59578fb3b41d661c37dd62e" STYLE="fork">
            <node TEXT="类似汇编" ID="c004378fbd1eb6980bf483268791bd8c" STYLE="fork"/>
            <node TEXT="-gt" ID="108d6e1f02c356a5cb9d22474c01094d" STYLE="fork">
              <node TEXT="-ge" ID="0b37a945909a99faa7c24db71a8783f1" STYLE="fork"/>
            </node>
            <node TEXT="-lt" ID="d1080104acf392bb140b37c0cbfd32a9" STYLE="fork"/>
            <node TEXT="-ne" ID="d4f3854568157129dac1d894ee175eb2" STYLE="fork"/>
            <node TEXT="-eq" ID="088e81c3f58c17cd382d1f1195fdaf67" STYLE="fork"/>
            <node TEXT="等" ID="824856c396bde7ef60e9165b7fca65be" STYLE="fork"/>
          </node>
          <node TEXT="字符串比较" ID="3df6080560fbd1d9181a8c814b82355b" STYLE="fork"/>
        </node>
        <node TEXT="格式" ID="cf5736fe43135f15772ee7002e02b5e1" STYLE="fork">
          <node TEXT="test 条件表达式" ID="ba3855efc15e976dc48da23521774b76" STYLE="fork"/>
          <node TEXT="[条件表达式]" ID="ebfe6664a68f2507c11f8d79ced9f5ff" STYLE="fork">
            <node TEXT="用在if中" ID="3f25251ba472f0928b6cdd45c77120aa" STYLE="fork"/>
            <node TEXT="[是命令，命令后加空格" ID="0c9c80a7dbd2c893c503cf5f61942ef3" STYLE="fork"/>
          </node>
          <node TEXT="[[条件表达式]]" ID="369c32e2e23b327b98c65f3f2ab610e6" STYLE="fork">
            <node TEXT="字符串比对的时候用这个" ID="f3a87cdb9c31b8846ea9e7b645eb5824" STYLE="fork"/>
          </node>
        </node>
        <node TEXT="练习" ID="b213551d32fcff90ed76f84a7313d74b" STYLE="fork">
          <node TEXT="df -h" ID="b9e90fb6a3bc719fa76913361d39c8d0" STYLE="fork">
            <node TEXT="查看硬件使用情况" ID="40f70df76f0f12cc41673a271421dfbd" STYLE="fork"/>
            <node TEXT="虚拟机是在/dev/vdal里边" ID="811cc7ee387abc71cfbd95f1f2cc7f0b" STYLE="fork">
              <node TEXT="通过|grep  ”/$“" ID="ebd517013f8d33b5fb0e24a4fa892a31" STYLE="fork"/>
              <node TEXT="$是匹配以/为结尾的" ID="c300fd44ea0330a1d83f719b82952fc6" STYLE="fork">
                <node TEXT="就能取出安装在根目录上的磁盘信息" ID="2693071bf0663cf786eabe250c190284" STYLE="fork"/>
              </node>
            </node>
            <node TEXT="|awk &apos;{print ${NF-1}}&apos;" ID="220d23c445833561b531a91678f6b4fd" STYLE="fork">
              <node TEXT="NF表示最后一行" ID="3c04f45b3e7ec03bf9327a262483dffe" STYLE="fork"/>
              <node TEXT="awk是linux的一个强大的文本分析工具" ID="d9e3e827355cebe8423c8cb422882f3a" STYLE="fork">
                <node TEXT="awk &apos;{pattern + action}&apos; &lt;file&gt;" ID="b523581025ccc4be1b6370dbc3c3e5ec" STYLE="fork"/>
              </node>
              <node TEXT="grep：使用正则表达式搜索文本，并把匹配的行打印出来，是强大的文本搜索工具；" ID="be998cdd37c6902aa9f7b579b4d19f3d" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="du -sb | cut f1" ID="87b23bf61c35fad5851ac6244925a260" STYLE="fork"/>
        </node>
      </node>
    </node>
    <node TEXT="sed：用于编辑匹配到的文本，是一种流编辑器；" ID="769328457b2327bb03797ff3d5bd04ec" STYLE="bubble" POSITION="right"/>
    <node TEXT="awk：能够对文本进行复杂的格式处理，是一种处理文本的语言。" ID="478b3f827c37df70271d857681d8622c" STYLE="bubble" POSITION="right">
      <node TEXT="流程控制" ID="6808d9294ecd0fbb4076375c02178cec" STYLE="fork">
        <node TEXT="if" ID="cb63aa4cd70c4167da48534889b0741a" STYLE="fork">
          <node TEXT="if [];then    fi" ID="e0e451038a3a049edf84699a789c8915" STYLE="fork">
            <node TEXT="if后一定加空格" ID="ed61d3872cfc1f1052f89bee1ee287ea" STYLE="fork"/>
          </node>
          <node TEXT="elif" ID="f15b6d34d9438193485832254d492176" STYLE="fork"/>
        </node>
        <node TEXT="case" ID="82892933f6d8555042c17199bd4b3cb3" STYLE="fork">
          <node TEXT="case $bianliang in" ID="c4fa016cd473e4785bdd082d453671f3" STYLE="fork"/>
          <node TEXT=") echo &quot;&quot;;;" ID="3097311ee1d215f72e109d7ce3a19da8" STYLE="fork"/>
          <node TEXT="*) echo &quot;&quot;;;" ID="251ff779e787569bd12fed527d29bb78" STYLE="fork"/>
          <node TEXT="esac" ID="23405822e75ac1c920ad00accbda1719" STYLE="fork"/>
        </node>
      </node>
      <node TEXT="关联数组" ID="2fd0c7e082d62a65b86f87dd88c22a0e" STYLE="fork">
        <node TEXT="定义" ID="974c459e3c4c4ac1365e5f87b1bf4304" STYLE="fork">
          <node TEXT="declare -A 变量名" ID="d093f6c5feca86f8e0b246ca742c0f56" STYLE="fork"/>
        </node>
        <node TEXT="赋值" ID="47548496b8cf0a7eb19bf0b8a1c4795a" STYLE="fork">
          <node TEXT="单个" ID="3fd03f8822dcf31ce3f433079d0f97d3" STYLE="fork">
            <node TEXT="变量名[下标]=变量值" ID="c18483a13cdbdce3c13e4d726b7dda17" STYLE="fork"/>
          </node>
          <node TEXT="多个" ID="7c612e1acf55caedd849b90a59d9867a" STYLE="fork">
            <node TEXT="变量名[下标]=‘（[index]=&quot; &quot; ）’" ID="58ad6940a64d36176496a5506505f114" STYLE="fork">
              <node TEXT="采用key-value" ID="5d44aa639fd3fbc9d75951026f49cdd3" STYLE="fork">
                <node TEXT="同no-sql" ID="5b120e15a194e0ebe55f2beb71176d73" STYLE="fork"/>
                <node TEXT="同字典类型" ID="9047f1a8995b892a058e61d926fe9936" STYLE="fork"/>
              </node>
            </node>
          </node>
        </node>
      </node>
      <node TEXT="函数" ID="50f97e0c2694dd7aa04f33fe797767d1" STYLE="fork">
        <node TEXT="定义方式" ID="97fb8d1a96f99e6494d9d950e88bc374" STYLE="fork">
          <node TEXT="function 函数名 (){}" ID="58453e5ebe6a4c7bf19332df9cf32486" STYLE="fork"/>
          <node TEXT="函数名 （）{}" ID="29bc823afb52d8d45f1c98fe655f99f0" STYLE="fork"/>
        </node>
        <node TEXT="写shell程序必须写函数" ID="2db2b4886a372349abfbd06c554e11c4" STYLE="fork"/>
        <node TEXT="返回值" ID="ce3cf581c02eb8d2476f46f66972ddc2" STYLE="fork">
          <node TEXT="只能返回整数，不能返回字符串" ID="f45e2a2a1ea04d9c9add79c7ccccb859" STYLE="fork"/>
          <node TEXT="调用该返回值时用$?" ID="1b465dd7a4e90db9bc208472d47c4c98" STYLE="fork"/>
          <node TEXT="$?是上一次的状态" ID="87d01951783502885e60c8c536067913" STYLE="fork"/>
        </node>
        <node TEXT="调用" ID="b06468b2325997353c6ee9d50d76eefe" STYLE="fork">
          <node TEXT="函数名" ID="c8337917f6b8b17dcf0d832fe4bbd2a0" STYLE="fork"/>
        </node>
        <node TEXT="函数传参" ID="757118005a0792b5e63403ab35ff58bd" STYLE="fork">
          <node TEXT="fun $1" ID="99c50939e8472b5fe6e02aa936b8bf42" STYLE="fork">
            <node TEXT="第一个参数" ID="3d87070846407e594b5aad98d6e73b2f" STYLE="fork"/>
          </node>
          <node TEXT="fun $*" ID="1292d554b5cbb8682337fc42880d92ce" STYLE="fork">
            <node TEXT="所有参数" ID="abc969b546623f8df79fd1370aa1bcdb" STYLE="fork"/>
          </node>
        </node>
        <node TEXT="指定位置传参" ID="e846b304c49441f39d807471cf982ebf" STYLE="fork">
          <node TEXT="除了程序运行期间给程序传值，还可以使用内置命令set命令给程序指定位置传参" ID="78ef7545a8f3b42ca56499daf899ae8d" STYLE="fork"/>
          <node TEXT="使用了set后程序忽略运行时传入的参数" ID="b4793df0dce683f7ef998632ed117c13" STYLE="fork">
            <node TEXT="set优先级比程序运行时传入的参数优先级高" ID="a285bd67a758859e6c7a686e922465d7" STYLE="fork"/>
          </node>
        </node>
      </node>
      <node TEXT="正则表达式" ID="750fd47b275da0144d860f54f9952100" STYLE="fork">
        <node TEXT="是为了处理大量字符串定义的一套规则和方法" ID="b1a040d1f59ae831b0647566c600dc87" STYLE="fork"/>
        <node TEXT="注意事项" ID="4e8c94943dcb1afc50003b91d46d0a2a" STYLE="fork">
          <node TEXT="linux以行作为处理" ID="b05b885bc524be2b9b3e51cb143976db" STYLE="fork"/>
          <node TEXT="注意字符集" ID="b99516b31f4f684a9b8cbc2bd0bd6c46" STYLE="fork">
            <node TEXT="LC_ALL=C" ID="fc0627a38dce436f05eb53a2bafebf2e" STYLE="fork"/>
            <node TEXT="查看" ID="7912912ff94094b316a896557f64776f" STYLE="fork">
              <node TEXT="echo $LANG" ID="301e68daa78682521044de014f55a55a" STYLE="fork"/>
            </node>
            <node TEXT="要设置成zh_CN.UTF-8" ID="169d986f6ef7c1b6079f16f95574a9dc" STYLE="fork"/>
          </node>
        </node>
        <node TEXT="使用的命令" ID="6543ab0558fe90628053d8b6abd66c2f" STYLE="fork">
          <node TEXT="grep" ID="a6518e702d2606eafd4815de09a886c4" STYLE="fork">
            <node TEXT="匹配的时候都是正则匹配，而不是通配符匹配" ID="92f4fe0f1fcde7f6983d16e5da5eaf3e" STYLE="fork"/>
          </node>
          <node TEXT="awk" ID="727f290e286768feaf4d6d661e895566" STYLE="fork">
            <node TEXT="介绍" ID="fe51e6f34e3d729bd7fe96b749d78ebb" STYLE="fork">
              <node TEXT="地位和shell相同，也是一门脚本语言" ID="eda9eeaa1389a3277031b2d8893339dd" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="sed" ID="db6d9470355e0526e5435df7062681a6" STYLE="fork"/>
        </node>
        <node TEXT="学习正则表达式的原因" ID="1a453a9253146fb94a3abcd98681adc3" STYLE="fork">
          <node TEXT="大量的字符串需要配置，而且这些字符串还是非交互的 " ID="b8212894315a973dc2992d169163d066" STYLE="fork"/>
        </node>
        <node TEXT="正则表达式与通配符的区别" ID="d13072bafe3a88152c4ad605266d6e53" STYLE="fork"/>
        <node TEXT="基础正则表达式" ID="012cc1822e202fd311cc76279645521a" STYLE="fork">
          <node TEXT="实际就是用一些特殊字符，给特赋予了一些特殊意义" ID="9923d73a0abf65b32146a49e97c56c76" STYLE="fork"/>
          <node TEXT="通配符" ID="4417158ec3670da920b57feeb6ccd159" STYLE="fork"/>
          <node TEXT="^word" ID="9b9a3f40300636eca99403297e7506c9" STYLE="fork">
            <node TEXT="以word开头" ID="fea1aa858765f58ce63073534d085eba" STYLE="fork"/>
          </node>
          <node TEXT="word$" ID="b18aa39b6e371902f97d072ce7fac87b" STYLE="fork">
            <node TEXT="以word结尾" ID="003b8c419b82d2af34e6bc34edbed03b" STYLE="fork"/>
          </node>
          <node TEXT="^$" ID="bee6dc6064b21d05e1426ce619ff5259" STYLE="fork">
            <node TEXT="表示空行" ID="b9510de532dd68d54fc23d8f96fa9bbe" STYLE="fork"/>
          </node>
          <node TEXT="." ID="0fc5d60cb86f5668f538c52d6324d72f" STYLE="fork">
            <node TEXT="代表且只能代表任意一个字符" ID="24615fcbfc36f2970cd5d5519aba09a9" STYLE="fork">
              <node TEXT="shell中.的含义" ID="5147b0c5af51b0ee7d931e4eecec40a8" STYLE="fork">
                <node TEXT="当前目录" ID="b3c4a6a61757618d4261a51c81a8fc49" STYLE="fork"/>
                <node TEXT="使得头文件生效，相当于source" ID="55bbf24d730ecd1895ef451f89d78839" STYLE="fork"/>
                <node TEXT="以.开头代表隐藏文件" ID="116f31e5b75f7bd9ded832f8318de101" STYLE="fork"/>
                <node TEXT=".只能代表任意一个字符" ID="2f2e2922389d0964adcc8e2b746c1d6a" STYLE="fork"/>
              </node>
            </node>
          </node>
          <node TEXT="\" ID="c32ed31b2053c637be62b461d8f1fbbb" STYLE="fork">
            <node TEXT="转义" ID="58521c1b89926446919487f9fc030530" STYLE="fork"/>
          </node>
          <node TEXT="*" ID="0dde3cd40b3e4c61b7ff7ccf3ed5462e" STYLE="fork">
            <node TEXT="重复前边的字符0-n次" ID="94d42f9fdafbad485ce316725caf69f0" STYLE="fork"/>
          </node>
          <node TEXT="eg" ID="eab83461114725504f00768b6c6051a8" STYLE="fork">
            <node TEXT="[abc]" ID="0e9bb26c0b7b005a5daae4e8d6c3d73d" STYLE="fork"/>
            <node TEXT="[^abc]" ID="f56501ca30c9ef66a18a9029383af100" STYLE="fork">
              <node TEXT="不匹配以a/b/c开头的" ID="12cdcf7094415eaf1df6bcacc6588101" STYLE="fork"/>
            </node>
            <node TEXT="^[abc]" ID="d463edc967ffb4fa62b94beff42f0684" STYLE="fork">
              <node TEXT="匹配以a/b/c开头的字符" ID="28bd826c83ae9c4701d35a07656dcda4" STYLE="fork"/>
            </node>
            <node TEXT="a\[n,m\]" ID="c8475a70feed6386b719202e088ec572" STYLE="fork">
              <node TEXT="匹配n-m次前一个重复的字符" ID="ae6339f08d60ea56027a2c2ceebf860a" STYLE="fork"/>
              <node TEXT="转义的是[]" ID="d41c83170312fe6d1377ecd27b19e916" STYLE="fork"/>
              <node TEXT="就是" ID="9f393414480c3a984e8457786e5b9ae6" STYLE="fork"/>
            </node>
            <node TEXT="\[n,\]" ID="8e1883749522dadb9fb38a82cf92336f" STYLE="fork">
              <node TEXT="重复前面一个字符至少多少次" ID="139d7d14ab6f494eaefd19a2d0f2dee7" STYLE="fork"/>
            </node>
            <node TEXT="具体命令" ID="35ef849e22214fb5876fc28dd3cf38f0" STYLE="fork">
              <node TEXT="grep “[abc]” /etc/passwd" ID="2250d890dd7a545c37c5b262a014ff07" STYLE="fork"/>
            </node>
          </node>
        </node>
      </node>
      <node TEXT="Sed流编辑器" ID="8a93579668620e72563c857df42e818b" STYLE="fork">
        <node TEXT="介绍" ID="978483e1398a4b48cfc4fbe19277ef86" STYLE="fork">
          <node TEXT="是一种流编辑器，是一种非交互的编辑器" ID="793000dde1c14e318814ea3a507178d6" STYLE="fork">
            <node TEXT="非交互的意思" ID="f891ccdaa8b98d2c3a73c53ab147fdfb" STYLE="fork">
              <node TEXT="不需要想vim那样，打开修改保存" ID="f01d9fc5c06bf731ffc0715d064d7cf4" STYLE="fork"/>
              <node TEXT="sed会自动打开，修改，保存" ID="ad27322583180aa932ffc0a57f33e119" STYLE="fork">
                <node TEXT="自动化的时候" ID="bf57e166161be6866e37fd64bc39008a" STYLE="fork"/>
              </node>
            </node>
          </node>
          <node TEXT="一次只能处理一行内容" ID="779d4204db514c9b0e2460272722c03c" STYLE="fork"/>
          <node TEXT="理解成vim就可以" ID="f2f2651cf1de91ae120d7b7b84e9e817" STYLE="fork"/>
        </node>
        <node TEXT="实现" ID="39d583d29dadb44730a124acf711fea4" STYLE="fork">
          <node TEXT="处理时，把当前处理行存储在临时缓冲区内，称为模式空间，接着用sed命令护理缓冲区中的内容，处理完后，把内容送往屏幕，接着处理下一行" ID="e23372932863ad62a8c7e8c0e64d610a" STYLE="fork"/>
        </node>
        <node TEXT="命令格式" ID="f337fcd3fe01636623dba80ace390d56" STYLE="fork">
          <node TEXT="sed  [option] &apos;command&apos; files" ID="c913a490e232c204ac6cb648dfbad03c" STYLE="fork">
            <node TEXT="区别于grep" ID="e907282fc24d4c1beb717c34a5ae8eea" STYLE="fork">
              <node TEXT="无论是否找到指定模式，返回都是0" ID="2adb340c93411717974158ed4ba227b9" STYLE="fork"/>
              <node TEXT="只有当命令(command)存在错误时，才返回非0" ID="2d0e804f0ec730c21173a2a0ab36b669" STYLE="fork"/>
            </node>
          </node>
          <node TEXT="基本元素集" ID="b411d2080bae1ed29876c44856ea77ec" STYLE="fork">
            <node TEXT="正则" ID="2f59bfe1fa2ee5ae6a3a0c9dd7c3e9ef" STYLE="fork"/>
          </node>
          <node TEXT="扩展元素集" ID="7156e6c8ea43c89ab9f79bbfe1d70e15" STYLE="fork">
            <node TEXT="方式" ID="6de3b42e0b900fac407251f181b73d7d" STYLE="fork">
              <node TEXT="\+或者-r" ID="4359a198ecc349f56743efd1ae1494db" STYLE="fork"/>
            </node>
            <node TEXT="通配符" ID="3e5d28932d0de6c4b2e42f800d79a769" STYLE="fork"/>
          </node>
        </node>
        <node TEXT="使用" ID="e93c124fb11c920e496af04e93b060ee" STYLE="fork">
          <node TEXT="可以对指定的行进行任何操作" ID="a6c5a4a6ad04f4e5ffd3a85ef305e0b2" STYLE="fork"/>
          <node TEXT="选项option" ID="9944a43f35543f0b9682d9e8a85d0a8e" STYLE="fork">
            <node TEXT="-e允许运行多项编辑" ID="cc0d4e78a52afbdd51448196df81a546" STYLE="fork"/>
            <node TEXT="-n取消默认输出" ID="5da5f72ee1d9f54ceb26103d3be4904e" STYLE="fork"/>
            <node TEXT="-i支持修改对应文件" ID="b04dec7105516ff8372b12dc965ba174" STYLE="fork"/>
            <node TEXT="-r支持扩展元素" ID="77b9753bb93fc40970685d8e97aa3b3b" STYLE="fork"/>
          </node>
          <node TEXT="命令command" ID="6d75f0a8a0d3a4ea6ed779d977b770a1" STYLE="fork">
            <node TEXT="a" ID="08d05963d6715ac836af6d47ee69fa24" STYLE="fork">
              <node TEXT="在当前行后添加一行或多行" ID="803a272446424e058d2762b70a5260c4" STYLE="fork"/>
            </node>
            <node TEXT="c" ID="0a70c083a7a9d8bf9db4d3d98c72cb47" STYLE="fork">
              <node TEXT="修改当前行" ID="5a008f7c023dc1a208993798609468b1" STYLE="fork"/>
            </node>
            <node TEXT="d" ID="a55d2f40e222b294161434c34598efff" STYLE="fork">
              <node TEXT="删除行" ID="7304cf3071d026b43e53f62124f5ecde" STYLE="fork"/>
            </node>
            <node TEXT="i" ID="2e93a0705995fe3f9a4f841735f5eada" STYLE="fork">
              <node TEXT="在当前行之前插入文本" ID="3a073eed800b394ccd24d241ee0188ad" STYLE="fork"/>
            </node>
            <node TEXT="p" ID="df51fa52512e1b50fafc1243bee1fb35" STYLE="fork">
              <node TEXT="打印匹配字符" ID="d802894e60f84b8da739b5c8e34da651" STYLE="fork"/>
            </node>
            <node TEXT="n" ID="2aef1bf8fb0c5e3d59ede6712c79ef35" STYLE="fork">
              <node TEXT="读入下一行，并从下一行而不是第一条命令开始处理" ID="107d3dad2eb38bd6bad905e2c705606d" STYLE="fork"/>
            </node>
            <node TEXT="！" ID="e8f654869feddefedec4714f44d02db6" STYLE="fork">
              <node TEXT="对所选行以外的行进行处理" ID="203b4ffa483d103f3a9d59f9ecb30475" STYLE="fork"/>
            </node>
            <node TEXT="还有很多" ID="7866ee14a02865feb73de26ece18e55f" STYLE="fork"/>
          </node>
          <node TEXT="eg" ID="0c51e1398375e6cf6385a4f0a81b9c9d" STYLE="fork">
            <node TEXT="sed “2p” passwd" ID="a55e7d334e1e9ceb4cf9919b15b0f39b" STYLE="fork">
              <node TEXT="打印passwd文件中第二行" ID="44481ca5c08973a22cc6b678e9abfcb8" STYLE="fork"/>
            </node>
          </node>
        </node>
      </node>
    </node>
  </node>
</map>