歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Shell編程淺析

Shell編程淺析

日期:2017/3/1 9:40:56   编辑: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 :FILE1的mtime是否新與FILE2

-n String :是否不空

FILE1 -ot FILE2 :FILE1的mtime是否舊與FILE2

-z String:是否為空

4.輸入輸出和重定向

標准輸入:0 默認設備為鍵盤

標准輸出:1 默認設備為顯示器

標准錯誤輸出:2 默認設備為顯示器

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

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

&>:合並重定向

<:輸入重定向

<<:此處文檔

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

5.Shell腳本格式

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

6.常用語法結構

條件判斷

語法格式

示例

單分支if語句

if 語句1;then

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

else

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

fi

1 2 3 4 5 6 7 8 #!/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

1 2 3 4 5 6 7 8 9 10 #!/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

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

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

循環體

done

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

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

循環體

done

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

until 條件語句;do

循環體

done

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

條件選擇

case $varName in

exp1)

語句體1 ;;

exp2)

語句體 2 ;;

...

*)

語句體 n ;;

1 2 3 4 5 6 7 8 9 10 #!/bin/bash tmp=y case $tmp in y|yes) echo yes ;; n|no) echo no ;; *) echo “unknown” esac

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

函數聲明方式

1 2 3 4 5 6 7 function 函數名{ 函數體 } 函數名() { 函數體 }

函數使用方式

函數名 [參數....]

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

循環條件控制

continue:提前進入下一輪循環

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

Linux Shell參數替換 http://www.linuxidc.com/Linux/2013-06/85356.htm

Shell for參數 http://www.linuxidc.com/Linux/2013-07/87335.htm

Linux/Unix Shell 參數傳遞到SQL腳本 http://www.linuxidc.com/Linux/2013-03/80568.htm

Shell腳本中參數傳遞方法介紹 http://www.linuxidc.com/Linux/2012-08/69155.htm

Shell腳本傳遞命令行參數 http://www.linuxidc.com/Linux/2012-01/52192.htm

Copyright © Linux教程網 All Rights Reserved