shell編程


shell特殊變量

$0 當前腳本的文件名

$n 傳遞給腳本或函數的參數; n 是一個數字,表示第幾個參數;也可以用於函數的參數

$# 傳遞給腳本或函數的參數個數

$* 傳遞給腳本或函數的所有參數

$@ 傳遞給腳本或函數的所有參數

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

$$ 當前Shell進程ID。對於 Shell 腳本,就是這些腳本所在的進程ID

 

$* 和 $@ 的區別:

$* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號""包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數

當它們被雙引號""包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數

 運算符

算術運算符:+   -   *   /   %   =   ==   !=

關系運算符:-ne -eq -gt -lt -ge -le

布爾運算符:!(非) -o(或) -a(與)

字符串運算符:== != -z(空) -n(非空)

文件測試操作:

-e 文件是否存在

-f 是否為普通文件

-d 是否為目錄

-w 是否具有寫權限

-x 是否具有執行權限

條件語句

if <condition>; then

  <statement>

fi

 

if <condition> ; then

  <statement>

elif <condition>; then

  <statement>

else

  <statement>

fi

 

case <variable> in <range>

  <value>)

    <statement>

  ;;

esac

 循環語句

while <condition>; do

  <statement>

done

 

for <variable> in <range>; do

  <statement>

done

 shell函數

function <function_name>() {

  <statement>

}

  函數調用以及傳參: <function_name> <para1> <para2>...<paran>

 shell替換

`` <=> $() 命令替換

$ 、${} 變量替換,一般情況下沒有區別

$(()) 其中的變量名稱,可於其前面加 $ 符號來替換,也可以不用

[[是 bash 程序語言的關鍵字,支持字符串的模式匹配,使用=~操作符時甚至支持shell的正則表達式;

字符串比較時可以把右邊的作為一個模式,而不僅僅是一個字符串,而[]內不能使用正則

set -e 用法

當命令以非零狀態退出時,則退出shell

主要作用是當腳本執行出現意料之外的情況時立即退出,避免錯誤被忽略,導致最終結果不正確

一般放在shell腳本開始位置(位於 #!/bin/bash 之后)

<<< 

<<< 被稱為here-string,用於給程序預先設置一個文本字符串,從而避免在程序運行過程中手動鍵入文本。

cat <<< “TEST”# 打印文本 TEST

xargs rm –rf <<< “a.h b.h c.h”# 刪除文件 a.h b.h c.h

=~

=~ 為正則匹配,用來判斷右邊的參數是否符合左邊的要求。 

[[ "tongyishu" =~ [0-9] ]]  # 不匹配,未包含數字

echo $?                   # output 1

[[ "tong123yishu" =~ [0-9] ]] # 匹配,包含數字

echo $?                   # output 0

 sh -c

  sh -c 可以讓 bash 將一個字符串作為一個完整的命令來執行

  sh -c "echo tongyishu" # 輸出 tongyishu


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM