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查詢編號使用!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不會執行
data +%s 顯示當前unix時間戳,便於統計
管道符:命令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這個字串,和單引號作用一致
#代表注釋
shell 基礎整理
shell 基礎整理 1,指令碼檔名以 sh 2,命名變數 1 自定義變數 name zhangsan 2 evn 大小寫字母 3 echo name echo path 4 作用域 預設自定義變數 區域性 通過呼叫多個shell程序 開啟shell 父 再次開啟shell 子 env shlvl ...
shell基礎整理
學習整理 參考部落格 shell是一種指令碼語言,常見的指令碼直譯器有 定義變數 number 100 country china 使用變數 在定義過的變數前面加上 符號就可以了。另外,對於變數的 是可以選擇的,幫助直譯器識別變數的邊界。echo number echo i love my coun...
Shell基礎整理一
僅以此章記錄曾經奮鬥的歲月 位置變數 1,2 bin bash ip 1 ping ip echo ping ip is up echo ping ip is down 演示位置變數 1 root localhost sh ping.sh 192.999.999.999 114.114.114.11...