Shell基础整理
?Shell的作用是將用戶輸入的文本命令轉換成內核能識別的數據指令交給內核進行執行,內核需要翻譯成二進制交由CPU底層來執行 ? ? 用戶層->Shell->調用對應應用程序->kernel->硬件層->運算和周邊外設->傳遞給kernal->應用程序->shell->用戶 ? ? Shell就是底層命令解釋器,Shell就是用戶界面 ? ? Shell有兩種語法: Bourne和C ? ? Bourne家族包括:sh、ksh、Bash、psh、zsh ? ? C家族包括:csh、tcsh(主要應用于Unix) ? ? Bash是當前Linux系統的標準shell ? ? echo $SHELL可以查看到shell對應的位置是:bin/bash ? ? 支持的shell在/etc/shells文件下 ? ? 可以分級調用進入多個shell ? ? ? 輸出命令: ? ? echo "Hello World"會在命令行返回命令 ? ? echo -e "H\te\tl\nl\to" ? ? -e指定識別轉義字符,\t tab鍵 \n 換行 ? ? 輸出彩色打印: ? ? echo -e "\e[1;31m hello world \e[0m" ? ? \e[1;和\e[0m是固定格式,代表開啟顏色和關閉顏色,如果不關閉后續命令行全部是指定顏色,中間部分指定顏色和內容 ? ? 30m黑色,31m 紅色, 32m 綠色, 33m 黃色,34m藍色,35m洋紅,36m青色,37m白色 ? ? ? 第一個shell腳本編寫: ? ? 建立腳本:vim hello.sh ? ? 輸入: ? ? #!bin/bash ? ? # The first shell program ? ??echo -e "\e[1;34m Hello Shell \e[0m" ? ? :wq保存腳本 ? ? 賦予可執行權限:chmod 755 hello.sh ? ? 執行:./hello.sh(常用方法) ? ? 或者直接調用:bash hello.sh ? ? ? shello別名是為了簡化命令執行 ? ? alias 查看當前shell的默認別名,系統默認添加了一些常用必要參數 ? ? 設置別名,比如:alias ls='ls --color=never'這樣默認就添加了別名的參數,簡化了命令輸入 ? ? 比如:alias vi='vim' ? ? 別名為了方便用戶習慣 ? ? alias命令設置的別名,當重新啟動操作系統后設置會失效 ? ? 不重啟的情況下取消別名設置:unalias vi='vim' ? ? 永久修改,修改對應存放別名的環境變量:vim ~/.bashrc ? ? 保存后立即生效:source ~/.bashrc ???? ? ? 命令執行優先級:絕對或者相對路徑執行命令 > 別名 > Bash內部命令 > 環境變量定義的順序查找的第一個命令 ? ? shell常用快捷鍵: ? ? 強制終止程序 Ctrl+c ? ? 清屏 Ctrl+l ? ? 刪除光標到行首的命令:Ctrl+u ? ? 光標定位到行首:Ctrl+a ? ? 光標定位到行尾:Ctrl+e ? ? 把前臺執行的命令放到后臺:Ctrl+z ? ? 在歷史命令中搜索:Ctrl+r 按快捷鍵后,輸入命令,根據搜索結果回車執行 ? ? ? 查看所有的歷史輸入命令:history ? ? 清除歷史輸入命令:history -c ? ? 歷史命令存放位置:~/.bash_history ? ? 文件中存放的命令比history查詢到的少一些,因為在用戶退出時文件才會更新 ? ? 立即同步當前命令到~/.bash_history:history -w ? ? 建立不要隨便刪除歷史命令,便于排錯和檢查入侵 ? ? history命令最多保存1000條,可以編輯/etc/profile修改HISTSIZE的屬性值即可 ? ? ? 上下箭頭執行歷史命令 ? ? history查詢編號使用!n執行歷史中的編號為n的命令,!!執行上一條命令,!字符串重復執行以該字符串開頭的最后一條命令 ? ? ? TAB鍵執行命令和目錄和文件補全,補全數據依賴于環境變量和操作路徑 ? ? ? ? ? 標準輸入:/dev/stdin 文件描述符:0 設備:鍵盤 ? ? 標準輸出:/dev/stdout 文件描述符:1 設備:顯示器 ? ? 標準錯誤輸出:/dev/stderr 文件描述符:2 設備:顯示器 ? ? 其實都是軟鏈接,鏈接到實時硬件內存目錄/proc ? ? ? ? 標準輸出重定向:命令 > 文件 把正確命令輸入覆蓋到文件中,命令 >> 文件 內容追加 ? ? 標準錯誤輸出重定向:命令 2> 文件,命令 2>>文件 作用同上,注意2后面不要加空格 ? ? ? 正確和錯誤同時輸出到文件:命令 > 文件 2>&1 或者 命令 >> 文件 2>&1 ? ? 或者使用:命令 &> 文件 和 命令 &>> 文件 ? ? 分開文件寫:命令 >> 文件1 2>>文件2 將正確結果放到文件1,錯誤結果放到文件2 ? ? ? 命令 &>/dev/null 命令不輸出任何一種執行結果,/dev/null相當于Linux下的黑洞,輸出就不存在了 ? ? ? 輸入重定向 wc ? ? 然后輸入文本按Ctrl+d結束 ? ? shell會返回統計行數,單詞數和字符數 ? ? wc -c 只統計字符數包括空格和換行 ? ? wc -w 只統計單詞數 ? ? wc -l 只統計行數 ? ? ? wc < success.log 或者 wc server.log ??統計文件中的數據 ? ? 命令 < 文件 把文件內容交給命令執行 ? ? wc << ddd ? ? 輸入文本輸入到ddd后輸入就結束了,返回統計,ddd就是自定義結束標識符 ? ? ? 多命令順序執行: ? ? 命令1 ; 命令2 ?多個命令順序執行,命令之間沒有任何邏輯關系 ? ? 命令1 && 命令2 邏輯與當命令1執行正確命令2才會執行 ? ? 命令1 || 命令2 邏輯或當命令1執行不正確,命令2會執行;當命令1正確執行,命令2不會執行 ? ? ? 統計某個操作腳本執行時間:date ; 命令 ; date ? ? data +%s 顯示當前Unix時間戳,便于統計 ? ? 返回簡單的正確或者錯誤提示:命令 && echo "yes" || echo "no" ? ? ? 管道符:命令1 | 命令2 ? ? 命令1的輸出結果作為命令2的操作對象;如果命令1執行錯誤,命令2不會被執行 ? ? 比如:ls -l /etc/ | more 實現分屏顯示 ? ? 命令2一定能嚴格操作命令1的輸出,不能隨便使用 ? ? 比如:netstat -an | grep ESTABLISHED | wc -l 處理命令結果中的指定數據,統計一些結果等 ? ? ? ? 通配符:* 匹配一個或多個 ? 匹配1個 [abc]匹配abc中的1個 [a-z] [0-9]匹配a-z中的任何一個字母和0-9中的任何一個數字 [^0-9]匹配不是數字的的字符 ? ? ? 特殊符號: ? ? 比如:aa=123 #定義變量 ? ? echo $aa 這樣可以輸出變量值 ? ? echo '$aa' 輸出就是$aa這個字符串 ? ? echo "$aa" 輸出就是$aa的變量值 ? ? 單引號中''所有特殊符號都原樣輸出 雙引號中,$ ` \都有特殊含義 ? ? 比如:aa=`ls`是把ls執行結果存放到變量aa中,使用反引號可以執行系統命令 ? ? aa=$(ls)和上面作用一致,建議使用 ? ? \$單純代表$這個字符,比如:echo \$aa就輸出$aa這個字符串,和單引號作用一致 ? ? #代表注釋
總結
- 上一篇: JavaScript的标签
- 下一篇: SQL Server代理(8/12):使