linux--shell script

來源:互聯網
上載者:User

標籤:style   io   color   ar   os   使用   sp   for   strong   

下面是最近學習shell script的一些知識點總結

***部落格園-邦邦醬好***

 

1.介紹
shell是一個文字介面,讓我們與系統溝通。shell script就是針對shell所寫的指令碼。
它就像是早期dos年代的批次檔.bat,所以shell script可以看成是一個程式也可以是一個批處理指令碼,它利用shell與相關工具指令,不需要編譯即可執行,可以協助系統管理員快速的管理好主機。

shell script用在系統管理上面是很好的一項工具,但是用在處理大量數值運算上,就不夠好了,因為Shell scripts的速度較慢,且使用的CPU資源較多,造成主機資源的分配不良

2.簡單的文法
test.sh
#!/bin/bash      #宣告這個文檔內的文法使用bash的文法,程式被執行時,載入bash的相關設定檔
#  以#開頭的是批註
#  接著說明script的:1.內容與功能 2.版本資訊 3.作者與連絡方式 4.建檔日期 5.記錄 等等
echo -e "Hello World! \a \n"
exit 0  #中斷程式,並回傳一個數值給系統

3.對談式指令碼:變數內容由使用者決定
#!/bin/bash
read -p "Please enter your firstname:" firstname
read -p "Please enter your lastname:" lastname
echo -e "\nYour full name is:$firstname $lastname"

4.指令碼執行方式
(1)利用sh/bash來執行指令碼:在子程式中執行
-->當子程式完成後,在子程式內的各項變數或動作將會結束而不會傳回到父程式中
(2)利用source/.來執行指令碼:在父程式中執行
-->指令碼在父程式中執行,各項變數或動作仍然留在父程式中
查看檔案許可權:ls -l test.sh
如果不夠許可權,可以這樣賦予執行的許可權:chmod a+x test.sh
(要取得root賬戶:su root)

5.利用test命令的測試功能
(1)檔案類型的判斷
test [-efd] file
-e:該檔名是否存在
-f:該檔名是否存在且為file類型
-d:該檔案名稱是否存在且為diretory類型

(2)文檔許可權的判斷
test [-rwx] file
-r:該檔名是否存在且具有可讀許可權
-w:該檔名是否存在且具有可寫入權限
-x:該檔名是否存在且具有可執行許可權
--->test -e /dmtsal && echo "exist" || echo "not exist"

(3)兩個文檔之間的比較
test file1 -nt file2
-nt:判斷file1是否newer than file2
-ot:判斷file1是否older than file2
-ef:判斷兩個文檔是否指向同一個inode

(4)兩個整數之間的比較
test n1 -eq n2
-eq:equal
-ne:not equal
-gt:greater than
-lt:less than
-ge:greater than or equal
-le:less than or equal

(5)字串的判斷
test -z string:string是否為空白
test -n string:string是否為非空
test str1 = str2:str1是否等於str2
test str1 != str2:str1是否不等於str2

(6)多重條件判斷
test -r filename -a -x filename
-a:and,兩種情況同時成立
-o:or,兩種情況之一成立
!:反相狀態,如test ! -x file,當file不具有x時,返回true

6.利用判斷符合[]
(1)比如[ -z "$HOME" ];echo $?
注意:使用[]來進行判斷時中括弧內的每個組件都要有空格符分隔,變數或常數要用雙引號括起來:
[ "$HOME" == "$MAIL" ]
(2)中括弧常用在條件判斷式中
[ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK,continue" && exit 0
也可以寫成:["$yn" == "Y"] || ["$yn" == "y"]

7.shell script的預設變數($0,$1)
filename opt1 opt2 opt3 opt4
執行的指令碼filename對於$0這個變數,op1對應$1,opt2對應$2。。。
除此以外,還有以下特殊變數:
$#:代表後接的參數個數
[email protected]:代表["$1" "$2" "$3" "$4"]
$*:代表["$1 $2 $3 $4"]

8.shift:造成參數變數號碼的位移
vi test.sh s1 s2 s3 s4 s5 s6
echo "shift前共有6個變數"
shift
echo "shift後共有5個變數,分別是s2 s3 s4 s5 s6"
shift 3
echo "shift後共有2個變數,分別是s5 s6"

9.條件判斷式(若等號兩邊有空格,必須[(空格)條件(空格)])
if [條件判斷式]; then
    條件成立時的命令內容
fi  #結束if語句

10.複製條件判斷式
(1)
if [條件判斷式一]; then
    條件成立時的命令內容
else
    條件不成立時的命令內容
fi  #結束if語句

(2)
if [條件判斷式一]; then
    條件一成立時的命令內容
elif [條件判斷式二]; then
    條件二成立時的命令內容
else
    條件一二不成立時的命令內容
fi  #結束if語句

10.利用case...in...esac判斷
case $variablename in
"first-variable-content")
    操作
;;
"second-variable-content")
    操作
;;
*)
    操作
;;
esac

11.函數function功能
由於shell script的執行方式是由上到下,由左到右,所以function的設定一定要在程式的最前面,這樣在執行時才能被找到。
function fname(){
    程式段
}
如:
function printit(){
    echo "Your choice is $1"
}

printit 2
--->結果是:Your choice is 2
(這裡的$1是指函數調用時後接的參數,跟呼叫指令碼時:./test.sh para1的$1是不一樣的)


12.迴圈
while [ 條件判斷式 ]
do
    程式段
done
當condition成立時,就進行迴圈,直到條件不成立

或者
until [ condition ]
do
    程式段
done
當condition成立時,就終止迴圈,否則持續進行迴圈

或者
for var in con1 con2 con3 ...
do
    程式段
done
如:
network="192.168.1"
for sitenu in $(seq 1 100)  #seq為sequence連續的縮寫
do
    ping -c 1 -w 1 ${network}.${sitenu} &> /dev/null && result=0|result=1
    if [ "result" == 0 ];then
    echo "Server ${network}.${sitenu} is Up"
    else
    echo "Server ${network}.${sitenu} is Down"
    fi
done

或者
for...do...done的數值處理
for(( 初始值;限制值;執行步階 ))
do
    程式段
done
如:
s=0
for((i=1;i<100;i=i+1))
do
    s=$(($s+$i))
done

13.shell script的追蹤與debug
sh [-nvx] scripts.sh
-n:不要執行指令碼,僅查詢文法的問題
-v:在執行指令碼前,先輸出指令碼的內容
-x:將使用到的指令碼內容顯示到螢幕上

 

linux--shell script

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.