继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

bash基础概念及功能

大吉大利今晚学习
关注TA
已关注
手记 265
粉丝 36
获赞 142

<!DOCTYPE html>

<html><head>

<meta http-equiv="Content-Type" content="text/html; charset=unicode">

<!--defaultCSS-->

<title>_1_bash基础概念及功能.md</title>






<style type="text/css" id="wiz_todo_style_id" wiz_link_version="01.00.09">.wiz-todo, .wiz-todo-img {width: 16px; height: 16px; cursor: default; padding: 0 10px 0 2px; vertical-align: -10%;-webkit-user-select: none;} .wiz-todo-label { display: inline-block; padding-top: 7px; padding-bottom: 6px; line-height: 1.5;} .wiz-todo-label-checked {  color: #666;} .wiz-todo-label-unchecked {text-decoration: initial;} .wiz-todo-completed-info {padding-left: 44px; display: inline-block; } .wiz-todo-avatar { width:20px; height: 20px; vertical-align: -20%; margin-right:10px; border-radius: 2px;} .wiz-todo-account, .wiz-todo-dt { color: #666; }</style>

















<style id="wiz_custom_css">        html, body {            font-size: 15px;        }        body {            font-family: Helvetica, 'Hiragino Sans GB', '微软雅黑', 'Microsoft YaHei UI', SimSun, SimHei, arial, sans-serif;            line-height: 1.6;            margin: 0;            padding: 20px 36px;            padding: 1.33rem 2.4rem;        }        h1, h2, h3, h4, h5, h6 {            margin: 20px 0 10px;            margin: 1.33rem 0 0.667rem;            padding: 0;            font-weight: bold;        }        h1 {            font-size: 21px;            font-size: 1.4rem;        }        h2 {            font-size: 20px;            font-size: 1.33rem;        }        h3 {            font-size: 18px;            font-size: 1.2rem;        }        h4 {            font-size: 17px;            font-size: 1.13rem;        }        h5 {            font-size: 15px;            font-size: 1rem;        }        h6 {            font-size: 15px;            font-size: 1rem;            color: #777777;            margin: 1rem 0;        }        div, p, ul, ol, dl, li {            margin: 0;        }        blockquote, table, pre, code {            margin: 8px 0;        }        ul, ol {            padding-left: 32px;            padding-left: 2.13rem;        }        blockquote {            padding: 0 12px;            padding: 0 0.8rem;        }        blockquote > :first-child {            margin-top: 0;        }        blockquote > :last-child {            margin-bottom: 0;        }        img {            border: 0;            max-width: 100%;            height: auto !important;            margin: 2px 0;        }        table {            border-collapse: collapse;            border: 1px solid #bbbbbb;        }        td {            padding: 4px 8px;            border-collapse: collapse;            border: 1px solid #bbbbbb;        }        @media screen and (max-width: 660px) {            body {                padding: 20px 18px;                padding: 1.33rem 1.2rem;            }        }        @media only screen and (-webkit-max-device-width: 1024px), only screen and (-o-max-device-width: 1024px), only screen and (max-device-width: 1024px), only screen and (-webkit-min-device-pixel-ratio: 3), only screen and (-o-min-device-pixel-ratio: 3), only screen and (min-device-pixel-ratio: 3) {            html, body {                font-size: 17px;            }            body {                line-height: 1.7;                padding: 0.75rem 0.9375rem;                color: #353c47;            }            h1 {                font-size: 2.125rem;            }            h2 {                font-size: 1.875rem;            }            h3 {                font-size: 1.625rem;            }            h4 {                font-size: 1.375rem;            }            h5 {                font-size: 1.125rem;            }            h6 {                color: inherit;            }            ul, ol {                padding-left: 2.5rem;            }            blockquote {                padding: 0 0.9375rem;            }        }</style><style name="wiz_tmp_editor_style">html, body {    font-size: 15px;}body {    font-family: Helvetica, 'Hiragino Sans GB', 微软雅黑, 'Microsoft YaHei UI', SimSun, SimHei, arial, sans-serif;    line-height: 1.6;    color: ;    background-color: ;    margin: 0;    padding: 16px 20px;}h1, h2, h3, h4, h5, h6 {    margin: 20px 0 10px;    margin: 1.33rem 0 0.667rem;    padding: 0;    font-weight: bold;}h1 {    font-size: 21px;    font-size: 1.4rem;}h2 {    font-size: 20px;    font-size: 1.33rem;}h3 {    font-size: 18px;    font-size: 1.2rem;}h4 {    font-size: 17px;    font-size: 1.13rem;}h5 {    font-size: 15px;    font-size: 1rem;}h6 {    font-size: 15px;    font-size: 1rem;    color: #777777;    margin: 1rem 0;}div, p, ul, ol, dl, li {    margin: 0;}blockquote, table, pre, code{    margin: 8px 0;}ul, ol {    padding-left: 32px;    padding-left: 2.13rem;}blockquote {    border-left: 4px solid #dddddd;    padding: 0 12px;    padding: 0 0.8rem;}blockquote > :first-child {    margin-top: 0;}blockquote > :last-child {    margin-bottom: 0;}img {    border: 0;    max-width: 100%;    height: auto !important;    margin: 2px 0;}table {    border-collapse: collapse;    border: 1px solid #bbbbbb;}td {    padding:4px 8px;    border-collapse: collapse;    border: 1px solid #bbbbbb;}@media screen and (max-width: 660px) {    body {        padding: 20px 18px;        padding: 1.33rem 1.2rem;    }}@media only screen and (-webkit-max-device-width: 1024px), only screen and (-o-max-device-width: 1024px), only screen and (max-device-width: 1024px), only screen and (-webkit-min-device-pixel-ratio: 3), only screen and (-o-min-device-pixel-ratio: 3), only screen and (min-device-pixel-ratio: 3) {    html, body {        font-size: 17px;    }    body {        line-height: 1.7;        padding: 0.75rem 0.9375rem;        color: #353c47;    }    h1 {        font-size: 2.125rem;    }    h2 {        font-size: 1.875rem;    }    h3 {        font-size: 1.625rem;    }    h4 {        font-size: 1.375rem;    }    h5 {        font-size: 1.125rem;    }    h6 {        color: inherit;    }    ul, ol {        padding-left: 2.5rem;    }    blockquote {        padding: 0 0.9375rem;    }}</style><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\utils.js" wiz_ charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\localize.js" wiz_ charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\core\wizEditor.js" wiz_ charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\core\checklist\todo.js" wiz_ charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\core\imageresize\dragresize.js" wiz_ charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\editorHelper.js" wiz_ charset="utf-8"></script></head>


<body contenteditable="true" ><div><div>GUI : Gnome, KDE ,Xfce</div><div>CLI : sh &nbsp;csh ksh bash</div></div>CGI ( Common&nbsp;Gate&nbsp;Intergace)通用网关接口用来沟通HTML表单和服务器程序的接口。是一个可被其他语言应用的规范集。<div>##shell种类_历史<br><div><div>shell 1.就是一个命令行解释器,翻译为机器语言发给内核(并不是完整的语言,但提供对过程式逻辑的支持,实现编程机制,依赖外部)。</div><div>&nbsp; &nbsp; &nbsp; &nbsp; 2. 也是一个强大的编程语言,解释执行的基本语言,直接调用linux命令。</div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 3.提供命令查找,解析路径,提供自动化的运行环境。<br></div><div>Cshell在BSD版的unix,类似于c语言,分支有csh , tcsh。</div><div>bourne shell最早unix的shell,也叫sh。 Bourne族主要有是sh ,ksh, Bash, psh zsh Bash和sh兼容。 bash----zsh---fish(后两种也有人用)</div><div>Bash是linux的默认shell,基于Bourneshell,吸收了Cshell和kSHELL的一些特性,所以Bash是sh的扩展,sh是 POSIX.</div><div>文件/etc/shells显示支持的shell。支持/bin/sh &nbsp; .bin/bash &nbsp; /sbin/nologin &nbsp;/bin/tcsh &nbsp; /bin/csh</div><div><div><br></div><div>shell有子shell的概念。父子关系的shell,各自并不知道对方的存在。可打开不同的shell。主要介绍bash</div><div>`echo@SHELL` &nbsp; &nbsp;查看当前的shell</div><div>***</div><div>COMMAND OPTION &nbsp; &nbsp;</div><div>选项有长短,随便用,但长选项合并的少。</div><div>##bash基础特性</div><div><div>###1.命令历史</div><div><br></div><div>```</div><div>定制history的功能,可通过以下环境变量实现:</div><div><span> </span>HISTSIZE:shell进程可保留的命令历史的条数;</div><div><span> </span>HISTFILE:持久保存命令历史的文件;</div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<span> </span>~/.bash_history</div><div><span> </span>HISTFILESIZE:命令历史文件的大小,默认1000;</div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 命令历史保留在各自的命令缓冲区。<br></div><div>history&nbsp;[-c] [-d 偏移量] [n] &nbsp; 内建命令</div><div>&nbsp; &nbsp;&nbsp;-c &nbsp;清空所有命令历史;</div><div>&nbsp; &nbsp; -d &nbsp;offset 删除指定 &nbsp; -d 500 10 &nbsp; 第500开始删10个;</div><div>&nbsp; &nbsp; -w 保存命令到历史文件中;</div><div>&nbsp;&nbsp; &nbsp;-a &nbsp;将当前的命令缓冲到历史文件中。</div><div>&nbsp; &nbsp; -n &nbsp;历史文件中的命令加载到缓冲中。<br></div><div>&nbsp; &nbsp;&nbsp;#显示最近的#条命令;<br></div><div>```</div><div>***</div><div>####调用历史命令</div><div><div>shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当作命令;</div><div>命令查找机制:</div><div>查找内部命令;</div><div>根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名;</div></div><div>```</div><div>!# 第#条命令 &nbsp;也可以用复数倒着写 &nbsp;&nbsp;</div><div>!! 执行上一条命令<br></div><div>!STRING再一次执行命令历史列表中最近一个以STRING开头的命令;不需要全写!$引用一个命令的最后一个参数</div><div>注意:命令的重复执行有时候需要依赖于幂等性;</div><div>&nbsp; &nbsp; &nbsp;esc再按 . 同上 远程支持<br></div><div>&nbsp; &nbsp;&nbsp;&nbsp;alt+. 同上 &nbsp;xshell远程不支持</div><div><div>调用上一条命令的最后一个参数:</div><div><span> </span>快捷键:ESC, .</div><div><span> </span>字符串:!$</div></div><div>&nbsp; &nbsp; &nbsp; 命令历史&nbsp;一般情况下在内存缓冲区中,用户正常退出后,追加到用户家目录.bash_histroy中&nbsp;,在/etc/profile 设置默认多少条</div><div>&nbsp; &nbsp;&nbsp;环境变量:PATH &nbsp; &nbsp; HISTSIZE缓冲区大小&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div><div>控制以下变量命令历史记录的方式:</div><div>环境变量:HISTCONTROL,有以下3种取值:</div><div>&nbsp; &nbsp;&nbsp;ignoredups:忽略重复的命令;</div><div>&nbsp; &nbsp;&nbsp;ignorespace:以空白字符开头的命令不计入历史;</div><div>&nbsp; &nbsp;&nbsp;ignoreboth:以上两者同时生效;</div><div>eg: HISTCONTROL=ignoredups; &nbsp;类似于key=valuer</div><div>```</div><div>添加环境变量:见sehll变量。</div><div>***</div></div><div>####命令的执行状态结果<br></div><div><div>命令执行的状态结果:</div><div>bash通过状态返回值来输出此结果:</div><div>成功:0<span> </span>失败:1-255</div><div>命令执行完成之后,其状态返回值保存于bash的特殊变量$?中;<br></div><div>命令正常执行时,有的还回有命令返回值:<br></div><div>根据命令及其功能不同,结果各不相同;</div><div><br></div><div>引用命令的执行结果:<br></div><div>$(COMMAND)</div><div>或`COMMAND`</div><div>***</div><div>####2.bash的基础特性:引用</div><div>‘’单引号,强引用,所有特殊符号没有没有特殊含义。单引号原不动</div><div><div>&nbsp;&nbsp;&nbsp; "" &nbsp;双引号,弱引用引号内特殊含义没有特殊含义,有例外$ 调用变量 &nbsp; ` 引用命令&nbsp; \转意符&nbsp;</div><div>``` &nbsp;</div><div>&nbsp; `反引号,&nbsp;引起来的是系统命令。 用于设置别名。 &nbsp;</div><div>&nbsp;&nbsp;#注释 &nbsp; &nbsp; $引用变量&nbsp;</div></div><div>```</div><div>***</div><div>####3.命令行快捷键</div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;ctrl+c: 强行结束<br></div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Ctrl+a:跳转至命令行行首</div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Ctrl+e:跳转至命令行行尾</div><div><br></div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Ctrl+u:删除行首至光标所在处之间的所有字符;</div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Ctrl+k:删除光标所在处至行尾的所有字符;</div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;ctrl+y :粘贴&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</div><div><br></div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;Ctrl+l:清屏,相当于clear</div></div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;ctrl+d : 退出当前终端<br></div><div>###4.命令行展开<br></div><div>####5.命令hash,加速命令执行</div><div>linux把执行过的命令,做hash,缓存的是命令的路径,再后执行时找缓存</div><div><div>```</div><div>hash:列出</div><div>hash -d COMMAND:删除</div><div>hash -r:清空</div></div><div>```</div><div>####globbing:文件名通配(整体文件名匹配,而非部分)<br></div><div><div>匹配模式:元字符<br></div><div><div>通配符和特殊符号 &nbsp;//用来匹配文件名</div><div>```</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ? &nbsp;任意匹配一个</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; * &nbsp; &nbsp; 任意一个或多个或0个</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [] &nbsp; &nbsp;任意括号内一个</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [x-y] &nbsp; &nbsp;任意x-y中一个字符</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [^] &nbsp; &nbsp; 排除匹配 &nbsp; &nbsp; &nbsp;</div></div><div>&nbsp; &nbsp;&nbsp;*:匹配任意长度的任意字符</div><div><br></div><div><span> </span>pa*, *pa*, *pa, *p*a*</div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;pa, paa, passwd</div><div>&nbsp; &nbsp;&nbsp;?:匹配任意单个字符</div><div><span> </span>pa?, ??pa, p?a, p?a?</div><div><span> </span>pa, paa, passwd</div><div>&nbsp;&nbsp;&nbsp;[]:匹配指定范围内的任意单个字符</div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;有几种特殊格式:</div><div><span> </span>[a-z], [A-Z], [0-9], [a-z0-9]</div><div><span> </span>[[:upper:]]:所有大写字母</div><div><span> </span>[[:lower:]]:所有小写字母</div><div><span> </span>[[:alpha:]]:所有字母</div><div><span> </span>[[:digit:]]:所有数字</div><div><span> </span>[[:alnum:]]:所有的字母和数字</div><div><span> </span>[[:space:]]:所有空白字符</div><div><span> </span>[[:punct:]]:所有标点符号</div><div>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<span> </span>pa[0-9][0-9], 2[0-9][0-9]</div><div>[^]:匹配指定范围外的任意单个字符</div><div><span> </span>[^[:upper:]]</div><div><span> </span>[^0-9]</div><div><span> </span>[^[:alnum:]]</div></div><div>```</div><div>***</div><div><br></div><div>### 6.管道,I/O重定向</div><div><div>echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。</div><div>```</div><div>####重定向</div><div>&gt;</div><div>tail &nbsp;-n 100 /var/log/dmesg &gt; /tmp/last-100-boot &nbsp; //把最后100行日志放到另一个文件中 ,*覆盖输出*</div><div>cat file file1 file2 file3 &nbsp;&gt; /tmp/allthree &nbsp;//把三个文件合在一起</div><div>&gt;&gt;</div><div><div>echo "new line &nbsp;of information " &gt;&gt; /tmp/all-file &nbsp; // 把引号中的附加到文件最后,*追加输出*</div><div>diff &nbsp; file1 file2 &nbsp;&gt;&gt; /tmp/all-file &nbsp; &nbsp;//两个文件中的不同的放在一个文件中<br></div><div>2&gt; &nbsp; &nbsp;  重定向错误输出</div><div>2&gt;&gt; &nbsp; &nbsp; 追加方式 &nbsp; &amp;&gt;正确和错误输出至同一个文件 &nbsp;</div><div>&lt; &nbsp; &nbsp;输入重定向,默认输入时键盘。</div><div>&nbsp; &nbsp;&nbsp;eg: &nbsp;#tr 'a-z' &nbsp;'A-Z' &nbsp;&lt; &nbsp;/etc/</div><div>&lt;&lt; &nbsp; 输入不能追加,在此处生成文档。Here Docment .</div><div>&nbsp; &nbsp;&nbsp;eg :</div><div>cat &nbsp;&lt;&lt; END &nbsp; &nbsp;在下一行生成&gt;输入文字,直到输入&lt;&lt; 后面的终止符类似END.文档结束标记是类似的用的多的是EOF。</div><div>cat &nbsp;&gt;&gt; /tmp/myfile.txt &lt;&lt; EOF &nbsp; 输出输入的文档到文件中,在脚本中生成文件或文档。&nbsp;</div><div>set -C &nbsp;禁止对已存在文件使用覆盖重定向;强制覆盖输出,则使用&gt;|</div><div>set +C &nbsp;关闭上述功能</div><div><div>####管道</div><div>COMMAND1 | COMMAND2 | COMMAND3 | ...&nbsp;管道:前一个的输入当成后一个命令的输入。</div><div><div>tee &nbsp;xxxx &nbsp; 从标准输入中读取输入,存到文档中一个并且放到屏幕上一份。<br></div><div>&nbsp; &nbsp;&nbsp;tee命令:</div><div><span> </span>COMMAND | tee /PATH/TO/SOMEFILE</div></div><div>```</div><div>***<br></div></div></div></div><div>###7.命令别名</div><div>alias &nbsp; 'A=ls'只在当前shell进程中有效</div><div>命令别名<br></div><div>unalias &nbsp;撤销别名<br></div><div>alias &nbsp;显示现在所有的别名。</div><div>alias 别名='命令' &nbsp; &nbsp;//临时生效,放入/etc/bashrc永久生效</div><div>`#unalias 别名 &nbsp;//输出`</div><div>命令优先级</div><div>第一顺位执行路径命令。</div><div>第二执行别名、</div><div>第三bash内部命令。//有些命令没有</div><div>第四\$PATH环境中查询到的命令。</div><div>/xxx/.bashrc目录下.</div><div>命令替换用\$或``. &nbsp;把某个字符串替换为命令执行结果。echo ‘$pwd’</div><div>touch ./file-$(%F-%H-%M-%S).txt &nbsp; 创建了一个带时间的文件<br></div><div>``命令替换 &nbsp;''强引用 ""弱引用可以完成变量替换</div><div>***</div><div>###7.变量</div><div>移步shell变量</div><div>###8编程&nbsp; &nbsp;&nbsp;</div><div>移步shell编程<br></div><div>运行时 路径调用执行<br></div><div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 或bash &nbsp;xxxx &nbsp; &nbsp; //这种方法可不用该权限</div><div>&nbsp; &nbsp;&nbsp;linux中回车符识别为$&nbsp;</div><div>&nbsp;&nbsp;</div><div>&nbsp; &nbsp;&nbsp;windows中回车符为^M$</div><div>&nbsp; &nbsp;&nbsp;#dos2unix &nbsp;xxxx&nbsp;//从dos转unix+</div><div>引用变量”$xxxx“<br></div></div></div></div></div></body></html>


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP