Shell編程淺析

1.Shell中的特殊字符

#

註釋

;

命令分割符,可以將多個語句放在一行執行

 (單引號)

強引用,在單引號中無法引用變量

" "(雙引號)

類似於 ,但支持變量替換

` `(反引號.tab鍵上方按鍵)

用於引用命令的執行結果

 

2.變量

命名規則:以字母開頭,可以使用數字字母

變量定義:declare  varName

變量賦值:varName=

變量值引用: $varName

導出變量: export varName[=value]

撤銷變量: unset varName

特殊變量:

$?:返回上一條命令的狀態返回值

$1,$2...:位置變量

$#:腳本傳入的所有參數個數

$*,$@:返回腳本傳入的所有參數

3.條件測試

使用格式:

test EXPR

[ EXPR ]

[[ EXPR ]]

文件測試

字符測試

整數測試

-a|-e  FILE:是否存在

-S FILE:套接字文件

> :大於

-gt:大於

-f FILE:普通文件

-p FILE:命名管道文件

<:小於

-ge:大於等於

-d FILE:目錄

-s FILE:是否爲空文件

<=:小於等於

-eq:等於

-L FILE:符號鏈接文件

-r FILE:是否可讀

>=:大於等於

-le:小於等於

-b FILE:塊設備文件

-w FILE:是否各寫

==:等於

-lt:小於

-c FILE:字符設備文件

-x FILE:是否可執行

!=:不等於

-ne:不等於

FILE1 -nt FILE2 :FILE1mtime是否新與FILE2

-n String :是否不空


FILE1 -ot FILE2 :FILE1mtime是否舊與FILE2

-z String:是否爲空



4.輸入輸出和重定向

標準輸入:0 默認設備爲鍵盤

標準輸出:1 默認設備爲顯示器

標準錯誤輸出:2 默認設備爲顯示器

>::覆蓋輸出 &>錯誤覆蓋輸出

>> :追加輸出 &>>錯誤覆蓋輸出

&>:合併重定向

<:輸入重定向

<<:此處文檔

tee:分流,將結果輸出到屏幕並重定向

 

5.Shell腳本格式

第一行頂格"#!/path/to/a/shell"

6.常用語法結構

條件判斷

語法格式

示例

單分支if語句

if 語句1;then

語句1執行結果爲真則執行

else

語句1執行結果爲假則執行

fi

 

#!/bin/bash
a=1
b=1
if [ $a -eq $b ];then
    echo  "yes"
else
    echo  "no"
fi

多分支if語句

if 語句1;then

語句1執行結果爲真則執行

elif 語句2;then

語句2執行結果爲真則執行

...

else

所有條件都不滿足時執行

fi

 

#!/bin/bash
a=1
b=2
if [ $a -gt $b ];then
    echo  "a>b"
elif [ $a -lt $b ];then
    echo  "a<b"
else
    echo  "a=b"
fi

循環結構

for varName in LIST;do

   循環體

done

#!/bin/bash
for i in {1..10};do
    echo $i
done

for ((var=#;測試條件;修正條件));do

循環體

done

#!/bin/bash
for ((i=1;i<=10;i++));do
    echo $i
done

while 條件語句;do #條件爲真時進入循環

循環體

done

#!/bin/bash
while ! who|grep “^gentoo”;do
    echo  “gentoo is not login”
    sleep 3
done

until 條件語句;do

循環體

done

#!/bin/bash
while who|grep “^gentoo”;do
    echo  “gentoo is not login”
    sleep 3
done

條件選擇

case $varName in

exp1)

語句體1 ;;

exp2)

語句體 2 ;;

...

*)

    語句體 n ;;

#!/bin/bash
tmp=y
case $tmp in
y|yes)
    echo yes ;;
n|no)
    echo no ;;
*)
    echo “unknown”
esac


 

 

7.函數使用和循環條件控制

  函數聲明方式

function 函數名{
    函數體
}

函數名() {
    函數體
}


  函數使用方式

函數名 [參數....]

參數可以在函數體中用位置變量引用

  循環條件控制

continue:提前進入下一輪循環

break #: #默認爲1,跳出#層循環


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章