shell指令碼學習1

2021-07-11 02:40:58 字數 3941 閱讀 8123

在工作的時候接觸到了shell指令碼,不過我沒有自己寫過,但是又因為當時對shell有了興趣,所以我就抽了一點時間,來學習shell指令碼的語法結構,這裡只是基本的shell語法,更高深的在以後可能會接觸。

一    shell分類

1)    bourne家族:sh,  bash(標準shell),   pshell,  zshell

2)    c shell家族:cshell,  tcshell

不同的shell之間可以進行切換,只要在當前的命令介面輸入shell的名字如bash,csh等

二    shell輸出命令

echo [選項]  [輸出內容]

選項:-e    支援在輸出內容的轉義符

在這裡只列舉常見的轉義符:

\\              輸出\本身

\a             警告音

\b             退格鍵,也就是說向左刪除鍵

\n             換行符

\r              回車鍵

\0nnn       按照八進位制ascii碼表輸出字元,其中0為數字0,nnn是三位八進位制數

\xhh          按照十六進製制ascii碼表輸出字元,其中hh是兩位十六進製制數

eg:echo "hello world!"---->不會換行

echo -e "hello world!\n"---->會換行

三    命令別名

設定別名    alias   別名='原命令'

查詢別名    alias

讓別名永久生效,在相應的使用者名稱下的.bashrc寫下別名

刪除別名    unalias

四    bash常用快捷鍵

ctrl+c    強制終止當前的命令

ctrl+l    清屏,相當於clear命令

ctrl+u    刪除或剪下游標之前的內容

ctrl+y    貼上ctrl+u操作的內容

ctrl+r    在歷史命令中搜尋

ctrl+d    退出當前終端

五    輸出重定向

標準輸出重定向:

命令 > 檔案---->以覆蓋的方式檔案

命令 >> 檔案---->以追加的方式寫入檔案

eg:

ls > 1.txt---->將當前目錄中的目錄名字一行一行的寫入到1.txt檔案中,是以覆蓋的方式寫入的。

ls >> 1.txt---->

將當前目錄中的目錄名字一行一行的寫入到1.txt檔案中,是以追加的方式寫入的。

標準錯誤輸出重定向:

錯誤命令 2> 檔案   以覆蓋的方式檔案

錯誤命令 2>> 檔案  以追加的方式寫入檔案

這個錯誤的命令不是linux的系統的命令

eg:c 2> 1---->c肯定不是系統的命令,這樣就把出錯的原因寫到檔案1中

正確輸出和錯誤輸出同時儲存:

命令 > 檔案 2>&1  或者 命令 &> 檔案  以覆蓋的方式,把正確和錯誤的輸出結果都儲存在同乙個檔案當中

命令 >> 檔案 2>&1 或者 命令 &>> 檔案  以追加的方式,把正確和錯誤的輸出結果都儲存在同乙個檔案當中

命令 >> 檔案1  2>> 檔案2   把正確的輸出追加到檔案1,把錯誤的輸出追加到檔案2中

六    輸入重定向

wc [選項]  [檔名]

選項:-c    統計位元組數

-w    統計單詞數

-l    統計行數

八    grep 命令

grep [選項] 「搜尋內容」 檔名

選項:-i ---->忽略大小寫

-n---->輸出行號

-v---->反向查詢

-r---->可以通過目錄進行查詢

--color=auto---->搜尋出的關鍵字用顏色顯示

九    環境變數

export 變數名=變數值---->設定環境變數

env---->查詢變數

unset 變數名----> 刪除變數

十    接收鍵盤輸入的命令

read  [選項]   [變數名]

選項:-p 「提示資訊」  在等待read輸入時,輸出提示資訊

-t 秒數     read命令會一直等待使用者輸入,使用此選項可以指定等待時間,時間一到就會結束執行

-n  位元組數    read命令只接受指定的位元組數,就會執行

-s       隱藏輸入的資料,適用於機密資訊的輸入

十一    shell的特殊變數

$0    當前指令碼檔名

$n    傳遞給指令碼或函式的引數。 n 是乙個數字,表示有幾個引數。例如第乙個引數是$1,第二個引數是$2

$#    傳遞給指令碼或函式的引數個數

$*    傳遞給指令碼或函式的所有引數

$@  傳遞給指令碼或函式的所有引數,被雙引號(" ")包含時,與$*稍有不同

$?    上個命令的退出狀態,或函式的返回值

$$    當前shell程序id

十二    shell的運算子

關係運算子

-eq             檢測兩個數是否相等,相等返回true。

-ne             檢測兩個數是否相等,不相等返回true。

-gt              檢測左邊的數是否大於右邊的數,如果是,則返回true。

-lt                檢測左邊的數是否小於右邊的數,如果是,則返回true。

-ge             檢測左邊的數時候大於或等於右邊的數,如果是,則返回true。

-le              檢測左邊的數是否小於或等於右邊的數,如果是,則返回true。

字串運算

=                 檢測兩個字串是否相等,相等返回true。

!=                檢測兩個字串是否相等,不相等返回false。

-z                檢測字串長度是否為0,為0返回true。

-n                檢測字串長度是否為0,不為0返回true。

str               檢測字串是否為空,不為空返回true。

檔案測試運算

-b file           檢測檔案是否塊裝置檔案,如果是,則返回true

-c file           檢測檔案是否字元裝置檔案,如果是,則返回true

-d file           檢測檔案是否是目錄,如果是,則返回true

-f file           檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回true

-g file           檢測檔案是否設定了sgid位,如果是,則返回true

-k file           檢測檔案是否設定了粘著位(sticky bit),如果是,則返回true

-p file           檢測檔案是否是命名管道,如果是,則返回true

-u file           檢測檔案是否設定了suid位,如果是,則返回true

-r file           檢測檔案是否可讀,如果是,則返回true

-w file           檢測檔案是否可寫,如果是,則返回true

-x file           檢測檔案是否可執行,如果是,則返回true

-s file           檢測檔案是否為空(檔案大小是否大於0),不為空,則返回true

-e file           檢測檔案(包括目錄)是否存在,如果是,則返回true

Shell 指令碼學習1

目錄 1.批量生成 2.批量修改 3.批量生產使用者 4.生產隨機密碼 5.批量判斷網路10.0.0.內的主機是否通訊 6.sed 命令使用 7.gawk 命令使用 8.gawk 正規表示式 9.sed 單詞替換空白行處理 10.sed 處理文字反轉指令碼 11.sed 清除html標籤 12.特殊...

shell指令碼學習(1)

vim shell name.sh 指令碼名要切合實際,見名思意 指令碼第一行 bin bash 表示指令碼以bash解釋,指定shell解釋 bin bash command1 command2 command3 依照命令的先後從上往下執行.shell name.sh 以這種方式執行shell指令...

Shell指令碼學習(1)

1 啟動shell shell是乙個可以互動訪問的linux系統程式,他的執行與普通程式相同,系統啟動的shell取決於使用者id的配置 2 shell提示符 為預設提示符 a 鈴聲字元 d 格式為 日月年 的日期 e ascii轉義字元 h 本地主機名 h 完全合格的限定域主機名 j shell當...