<!DOCTYPE html> javascript
<html><head> css
<meta http-equiv="Content-Type" content="text/html; charset=unicode"> html
<!--defaultCSS--> java
<title>_1_bash基礎概念及功能.md</title> linux
<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> git
<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_style="unsave" charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\localize.js" wiz_style="unsave" charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\core\wizEditor.js" wiz_style="unsave" charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\core\checklist\todo.js" wiz_style="unsave" charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\core\p_w_picpathresize\dragresize.js" wiz_style="unsave" charset="utf-8"></script><script type="text/javascript" src="file:///F:\Program Files (x86)\WizNote\WizTools\htmleditor\editorHelper.js" wiz_style="unsave" charset="utf-8"></script></head> web
<body contenteditable="true" style=""><div><div>GUI : Gnome, KDE ,Xfce</div><div>CLI : sh csh ksh bash</div></div>CGI ( Common Gate Intergace)通用網關接口用來溝通HTML表單和服務器程序的接口。是一個可被其餘語言應用的規範集。<div>##shell種類_歷史<br><div><div>shell 1.就是一個命令行解釋器,翻譯爲機器語言發給內核(並非完整的語言,但提供對過程式邏輯的支持,實現編程機制,依賴外部)。</div><div> 2. 也是一個強大的編程語言,解釋執行的基本語言,直接調用linux命令。</div><div> 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 .bin/bash /sbin/nologin /bin/tcsh /bin/csh</div><div><div><br></div><div>shell有子shell的概念。父子關係的shell,各自並不知道對方的存在。可打開不一樣的shell。主要介紹bash</div><div>`echo@SHELL` 查看當前的shell</div><div>***</div><div>COMMAND OPTION </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> <span> </span>~/.bash_history</div><div><span> </span>HISTFILESIZE:命令歷史文件的大小,默認1000;</div><div> 命令歷史保留在各自的命令緩衝區。<br></div><div>history [-c] [-d 偏移量] [n] 內建命令</div><div> -c 清空全部命令歷史;</div><div> -d offset 刪除指定 -d 500 10 第500開始刪10個;</div><div> -w 保存命令到歷史文件中;</div><div> -a 將當前的命令緩衝到歷史文件中。</div><div> -n 歷史文件中的命令加載到緩衝中。<br></div><div> #顯示最近的#條命令;<br></div><div>```</div><div>***</div><div>####調用歷史命令</div><div><div>shell程序在接收到用戶執行命令的請求,分析完成以後,最左側的字符串會被看成命令;</div><div>命令查找機制:</div><div>查找內部命令;</div><div>根據PATH環境變量中設定的目錄,自左而右逐個搜索目錄下的文件名;</div></div><div>```</div><div>!# 第#條命令 也能夠用複數倒着寫 </div><div>!! 執行上一條命令<br></div><div>!STRING再一次執行命令歷史列表中最近一個以STRING開頭的命令;不須要全寫!$引用一個命令的最後一個參數</div><div>注意:命令的重複執行有時候須要依賴於冪等性;</div><div> esc再按 . 同上 遠程支持<br></div><div> alt+. 同上 xshell遠程不支持</div><div><div>調用上一條命令的最後一個參數:</div><div><span> </span>快捷鍵:ESC, .</div><div><span> </span>字符串:!$</div></div><div> 命令歷史 通常狀況下在內存緩衝區中,用戶正常退出後,追加到用戶家目錄.bash_histroy中 ,在/etc/profile 設置默認多少條</div><div> 環境變量:PATH HISTSIZE緩衝區大小 </div><div>控制如下變量命令歷史記錄的方式:</div><div>環境變量:HISTCONTROL,有如下3種取值:</div><div> ignoredups:忽略重複的命令;</div><div> ignorespace:以空白字符開頭的命令不計入歷史;</div><div> ignoreboth:以上二者同時生效;</div><div>eg: HISTCONTROL=ignoredups; 相似於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> "" 雙引號,弱引用引號內特殊含義沒有特殊含義,有例外$ 調用變量 ` 引用命令 \轉意符 </div><div>``` </div><div> `反引號, 引發來的是系統命令。 用於設置別名。 </div><div> #註釋 $引用變量 </div></div><div>```</div><div>***</div><div>####3.命令行快捷鍵</div><div> ctrl+c: 強行結束<br></div><div> Ctrl+a:跳轉至命令行行首</div><div> Ctrl+e:跳轉至命令行行尾</div><div><br></div><div> Ctrl+u:刪除行首至光標所在處之間的全部字符;</div><div> Ctrl+k:刪除光標所在處至行尾的全部字符;</div><div> ctrl+y :粘貼 </div><div><br></div><div> Ctrl+l:清屏,至關於clear</div></div><div> 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>通配符和特殊符號 //用來匹配文件名</div><div>```</div><div> ? 任意匹配一個</div><div> * 任意一個或多個或0個</div><div> [] 任意括號內一個</div><div> [x-y] 任意x-y中一個字符</div><div> [^] 排除匹配 </div></div><div> *:匹配任意長度的任意字符</div><div><br></div><div><span> </span>pa*, *pa*, *pa, *p*a*</div><div> pa, paa, passwd</div><div> ?:匹配任意單個字符</div><div><span> </span>pa?, ??pa, p?a, p?a?</div><div><span> </span>pa, paa, passwd</div><div> []:匹配指定範圍內的任意單個字符</div><div> 有幾種特殊格式:</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> <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>></div><div>tail -n 100 /var/log/dmesg > /tmp/last-100-boot //把最後100行日誌放到另外一個文件中 ,*覆蓋輸出*</div><div>cat file file1 file2 file3 > /tmp/allthree //把三個文件合在一塊兒</div><div>>></div><div><div>echo "new line of information " >> /tmp/all-file // 把引號中的附加到文件最後,*追加輸出*</div><div>diff file1 file2 >> /tmp/all-file //兩個文件中的不一樣的放在一個文件中<br></div><div>2> 重定向錯誤輸出</div><div>2>> 追加方式 &>正確和錯誤輸出至同一個文件 </div><div>< 輸入重定向,默認輸入時鍵盤。</div><div> eg: #tr 'a-z' 'A-Z' < /etc/</div><div><< 輸入不能追加,在此處生成文檔。Here Docment .</div><div> eg :</div><div>cat << END 在下一行生成>輸入文字,直到輸入<< 後面的終止符相似END.文檔結束標記是相似的用的多的是EOF。</div><div>cat >> /tmp/myfile.txt << EOF 輸出輸入的文檔到文件中,在腳本中生成文件或文檔。 </div><div>set -C 禁止對已存在文件使用覆蓋重定向;強制覆蓋輸出,則使用>|</div><div>set +C 關閉上述功能</div><div><div>####管道</div><div>COMMAND1 | COMMAND2 | COMMAND3 | ... 管道:前一個的輸入當成後一個命令的輸入。</div><div><div>tee xxxx 從標準輸入中讀取輸入,存到文檔中一個而且放到屏幕上一份。<br></div><div> 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 'A=ls'只在當前shell進程中有效</div><div>命令別名<br></div><div>unalias 撤銷別名<br></div><div>alias 顯示如今全部的別名。</div><div>alias 別名='命令' //臨時生效,放入/etc/bashrc永久生效</div><div>`#unalias 別名 //輸出`</div><div>命令優先級</div><div>第一順位執行路徑命令。</div><div>第二執行別名、</div><div>第三bash內部命令。//有些命令沒有</div><div>第四\$PATH環境中查詢到的命令。</div><div>/xxx/.bashrc目錄下.</div><div>命令替換用\$或``. 把某個字符串替換爲命令執行結果。echo ‘$pwd’</div><div>touch ./file-$(%F-%H-%M-%S).txt 建立了一個帶時間的文件<br></div><div>``命令替換 ''強引用 ""弱引用能夠完成變量替換</div><div>***</div><div>###7.變量</div><div>移步shell變量</div><div>###8編程 </div><div>移步shell編程<br></div><div>運行時 路徑調用執行<br></div><div><div> 或bash xxxx //這種方法可不用該權限</div><div> linux中回車符識別爲$ </div><div> </div><div> windows中回車符爲^M$</div><div> #dos2unix xxxx //從dos轉unix+</div><div>引用變量」$xxxx「<br></div></div></div></div></div></body></html> shell