shell知識分享

2021-09-28 19:05:23 字數 3231 閱讀 6504

檢視當前系統的shell型別

echo $shell

檢視當前系統環境支援的shell

cat /etc/shells

單行注釋:#

多行注釋: 《執行方式: /bin/bash shell指令碼路徑位置

指令碼首行: #!/bin/bash

本地變數:在當前系統的某個環境下才能生效的變數,作用範圍小

全域性變數:在當前系統的所有環境下都能生效的變數

shell內建變數:

本地變數普通變數的三種定義方式:

1 變數名= … 不能有空格

2 變數名= 『…』 引號內是什麼就輸出什麼

3 變數名= 「…」 引號內如果有其它變數名則先進行轉義再輸出

本地變數命令變數的二種定義方式:

1 變數名=命令

2 變數名= $(命令) 用的比較多

命令變數先執行命令語句,然後把命令的結果賦值給變數

全域性變數的檢視方式

env 顯示全部的全域性變數

env | grep 變數名 查詢全域性變數

全域性變數的定義

export 變數=值

shell內建變數:

$0 顯示指令碼的名稱

$n n為當前指令碼傳入的第n個位置的引數(從1開始)

$# 顯示指令碼引數總數量

$? 獲取執行上乙個命令的返回值(0為成功,非0為非成功)

檢視變數的方式:

1 echo 變數名

私下裡用

2ech

o"

變數名 私下裡用 2 echo "

變數名私下裡

用2ec

ho"變數名" 私下裡用

3 echo $ 用於echo 「da 變數名

"引號內

輸出多個

內容4e

cho"

"引號內輸出多個內容 4 echo "

變數名"引號

內輸出多

個內容4

echo

"」 標準使用方式

刪除變數: unset 變數名 可以刪除全域性變數和本地變數

字串精確擷取:$

$ 從倒數第5個字元開始擷取5個字元,0不能省略

預設值:

$ 如果變數有值則輸出值如果沒有則為預設值

變 量名

+預設值

無論變數

是否有值

都輸出默

認值驗證

表示式:

1tes

t條件表

達式2[

條件表達

式]根據

無論變數是否有值都輸出預設值 驗證表示式: 1 test 條件表示式 2 [ 條件表示式 ] 根據

變數名+預設

值無論變

量是否有

值都輸出

預設值驗

證表示式

:1te

st條件

表示式2

[條件表

達式]根

據?是否為0來判斷條件是否成立

邏輯表示式:&& 和 ||

命令1 && 命令2 : 命令1執行成功才能執命令2

命令1 || 命令2 : 命令1執行失敗才能執命令2

檔案表示式:-f 判斷是否是乙個檔案-d 判斷是否是乙個目錄-x 判斷是否具有可執行許可權

數值判斷符:-eq 相等 -gt 大於 -lt 小於 -ne 不等於

字串比較:== 內容一致 != 內容不一致

計算表示式:$((計算表示式)) 或 let 計算表示式

後台展示符號: 命令 & 將乙個命令從前台轉到後台執行

資訊符號:

1表示正確輸出的資訊 cat nihao.txt 1 >> zhengque

2表示錯誤輸出的資訊dsafasfsa 2>>errfile

2>&1 表示所有輸出的資訊 bash ceshi.sh >> ceshi-all 2>&1

sed命令

sed 引數 匹配條件 檔名

引數:-i 對檔案進行真正的修改 ,不加該引數表示模擬修改實際上不對檔案進行編輯

動作:-a 在匹配到的內容下一行增加內容

-i 在匹配到的內容上一行增加內容

-d 刪除匹配到的內容

-s 替換匹配到的內容

替換:sed -i 『行號s#原內容#替換後內容#列號』 檔名 (行號不指定為所有行,列號不指定為第乙個,全列為g)

增加:sed -i 『行號a或者i\增加的內容』 檔名 (3,4a表示3~4包含首尾)

刪除:sed -i 『行號d』 檔名 (3,4d表示3~4包含首尾)

awk命令

awk 引數 動作 檔名

引數:-f 指定行的分隔符

動作:print 顯示內容:$0 顯示當前行的所有內容 $n 顯示當前行的第n列內容

awk 『nr==1 』 awk.txt 顯示第一行第一列和第三列的內容(若沒有nr則預設所有行)

find命令

find 路徑 引數 關鍵字

引數:-name 按照檔名查詢檔案

-perm 按照檔案許可權查詢檔案

-user 按照檔案屬性查詢檔案

-type 查詢某一型別的檔案(d目錄 f普通檔案)

find / -name -type d "get_"(可以用正則表示任意字元)

if語句最完整版

if [ 條件 ]

then

指令1elif [ 條件 ]

then

指令2else

指令3fi

case語句

case 變數名 in

值1)指令1

;;值2)

指令2;;

*) # *代表所有相當於if語句中的else

指令3;;

esac

for語句

for 值 in 列表

do指令

done

while語句

while 條件

do指令

done

until語句 直到…條件符合

until 條件

do指令

done

函式定義:

函式名()

呼叫函式:函式名 引數

指令碼除錯:

/bin/bash 引數 指令碼路徑

-n 檢查指令碼中的語法錯誤

-v 先顯示指令碼所有內容,然後執行指令碼,結果輸出,如果執行遇到錯誤,將錯誤輸出。

-x 將執行的每一條命令和執行結果都列印出來

常見shell命令分享

1.變數名的賦值符號前後不能留有空格 2.vi proc meminfo 檢視當前虛擬記憶體的狀態 3.ipcs 命令用來檢視系統上的當前共享記憶體頁面 4.bash shell 啟動會自動處理 bashrc etc bashrc 修改 vim bashrc 重啟 source bash profi...

shell技巧分享(二)

這是乙個系列文章,主要分享shell 部分功能僅適用於bash 的使用建議和技巧,每次分享3點,希望你能有所收穫。sleep 1234 1 19340 sleep 1234 2 19342 sleep 1234 3 19344 alias grep psg alias psg ps ef grep ...

shell指令碼分享

1 編寫指令碼 bin per.sh,判斷當前使用者對指定引數檔案,是否不可讀並且不可寫 2 編寫指令碼 root bin excute.sh,判斷引數檔案是否為sh字尾的普通檔案,如果是,新增所有人可執行許可權,否則提示使用者非指令碼檔案 3 編寫指令碼 root bin nologin.sh和l...