shell程式設計學習

2021-07-03 12:57:54 字數 4822 閱讀 7090

read  變數名                   讀入乙個變數

readonly  變數名           建立乙個不可改變值的變數

echo      字串            輸出變數

for    in        do          done          for迴圈

$$                              當前程序號

$0                            當前指令碼檔名

$#                           引數的個數

$* 或者 $@                  傳入的所有引數,當形式是"$*"時,會將引數作為乙個整體,而"$@"會將引數分開

echo -e "....."                將字串中的字元經轉義之後輸出,比如如果字串裡面有\n,不轉義就會直接輸出\n,轉義之後則會輸出換行符

$變數本來的值

$如果變數 var 為空或已被刪除(unset),那麼返回 word,但不改變 var 的值。

$如果變數 var 為空或已被刪除(unset),那麼返回 word,並將 var 的值設定為 word。

$如果變數 var 為空或已被刪除(unset),那麼將訊息 message 送到標準錯誤輸出,可以用來檢測變數 var 是否可以被正常賦值。

若此替換出現在shell指令碼中,那麼指令碼將停止執行。

$如果變數 var 被定義,那麼返回 word,但不改變 var 的值。

expr num1 運算子 num2       可以進行簡單的計算,注意:表示式和運算子之間必須要有空格,注意如果是乘法運算需在*之前加上\進行轉義

if [ a == b ] then fi            選擇語句,記得if ,[ ,a ==,a, ] 之間都要打空格

運算子說明

舉例-eq

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

[ $a -eq $b ] 返回 true。

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

[ $a -ne $b ] 返回 true。

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

[ $a -gt $b ] 返回 false。

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

[ $a -lt $b ] 返回 true。

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

[ $a -ge $b ] 返回 false。

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

[ $a -le $b ] 返回 true。

布林運算子

!非運算,表示式為 true 則返回 false,否則返回 true。

[ ! false ] 返回 true。

-o或運算,有乙個表示式為 true 則返回 true。

[ $a -lt 20 -o $b -gt 100 ] 返回 true。

-a與運算,兩個表示式都為 true 才返回 true。

[ $a -lt 20 -a $b -gt 100 ] 返回 false。

字串運算子 =

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

[ $a = $b ] 返回 false。

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

[ $a != $b ] 返回 true。

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

[ -z $a ] 返回 false。

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

[ -z $a ] 返回 true。

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

[ $a ] 返回 true。

檔案測試運算子

-b file

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

[ -b $file ] 返回 false。

-c file

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

[ -b $file ] 返回 false。

-d file

檢測檔案是否是目錄,如果是,則返回 true。

[ -d $file ] 返回 false。

-f file

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

[ -f $file ] 返回 true。

-g file

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

[ -g $file ] 返回 false。

-k file

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

[ -k $file ] 返回 false。

-p file

檢測檔案是否是具名管道,如果是,則返回 true。

[ -p $file ] 返回 false。

-u file

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

[ -u $file ] 返回 false。

-r file

檢測檔案是否可讀,如果是,則返回 true。

[ -r $file ] 返回 true。

-w file

檢測檔案是否可寫,如果是,則返回 true。

[ -w $file ] 返回 true。

-x file

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

[ -x $file ] 返回 true。

-s file

檢測檔案是否為空(檔案大小是否大於0),不為空返回 true。

[ -s $file ] 返回 true。

-e file

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

[ -e $file ] 返回 true。

$                    獲取字串的長度

$[string:index1:index2}   獲取子串

arr=(value0 value1 value2)定義陣列,元素之間用空格隔開

$                       獲取陣列中的某個元素

$          獲取陣列中的所有元素

$ 獲取陣列的長度 

echo命令

echo   "\c"                             不換行。主要要使用-e 才能使轉義字元生效,前面有講到過

echo   "   "   > file              將顯示的字串重定向到file中去

printf "%s %d'        printf 是echo的增強版,具體的用法和c語言裡面類似,不過引數是加在「  」的後面,多餘的引數會按照原來的格式輸出

選擇執行語句

有三種形式

if  ....then fi

if then else fi 

if then elif then ... else fi

test 表示式     和  [表示式] 效果類似,用於檢查某個表示式是否成立

case 語法,相當於c語言裡面的switch

case var in 

條件1) 輸出 ;;

條件2) 輸出

*)輸出 ;;

esca

當var和條件的值相同就指定後面的**,如果沒有與var值相同的條件,則將執行*後面的**

for迴圈

for var in  var2 var3 ...

do done 

while迴圈(直到條件為false停止)

while 條件

do  執行的**

done

until迴圈(直到條件為true時停止) 

until 條件

do 執行的**

done

break和continue和c語言中的用法類似

新增函式

func_name()

呼叫直接 函式名 即可

要刪除函式 unset .f 函式名

函式的引數名和

一般情況下,每個 unix/linux 命令執行時都會開啟三個檔案:

預設情況下,command > file 將 stdout 重定向到 file,command < file 將stdin 重定向到 file。

如果希望 stderr 重定向到 file,可以這樣寫:

$command

2> file

如果希望 stderr 追加到 file 檔案末尾,可以這樣寫:

$command

2>> file

2 表示標準錯誤檔案(stderr)。

如果希望將 stdout 和 stderr 合併後重定向到 file,可以這樣寫:

$command

> file 2

>&

1

$command

>> file 2

>&

1

如果希望對 stdin 和 stdout 都重定向,可以這樣寫:

$command

< file1 >file2

如果想不輸出執行操作的資訊,可以將輸出重定向到/dev/null 中,這樣就不會回顯資訊

shell指令碼中也可以包含其餘的檔案 使用 . filename或者 srouce filenane即可

Shell程式設計學習

shell本身是乙個用c語言編寫的程式,它是使用者使用unix linux的橋梁,使用者的大部分工作都是通過shell完成的。shell既是一種命令語言,又是一種程式語言。作為命令語言,它互動式地解釋和執行使用者輸入的命令 作為程式語言,它定義了各種變數和引數,並提供了許多在高階語言中才具有的控制結...

Shell程式設計學習

1 bin bash 2 shell程式設計之變數 3 name gugugu 4 echo name變數的值為 5readonly names ls 6 echo names靜態變數的值為 names 7 shell程式設計之字串 8 name1 gubin 9 echo 字元長度為 10 ech...

shell程式設計學習

想獲取更詳細的請參考此大神 第一種模式 var num she ll在v ar中提 取第nu m個字元 到末尾的 所有字元 若nu m為正數 從左邊 0處開始 若nu m為負數 從右邊 開始提取 字串,但 必須使用 在冒號後 麵加空格 或乙個數 字或整個 num加 上括號,如 var num,she...