天天看點

Linux&shell之Shell腳本

使用多條指令

shell腳本的關鍵是可以輸入多條指令,甚至可以将一條指令的結果傳遞給另一條指令。

date;who(兩個指令shell腳本的寫法)

建立shell腳本

1.将shell指令放置到一個文本檔案中

2.指明所使用的shell,比如#!/bin/bash

3.可以用#注釋,但是一般注釋不會被讀取,第一行除外

案例

#!/bin/bash

#This script displays the date and who's logged on

date

who

4.儲存為test1

5.将shell腳本檔案所在的目錄添加到PATH環境變量中(

a.修改~/.bash_profile

PATH=PATH:PATH:HOME/bin:/home/jiqing9006/shellscript

export PATH

b.執行source ~/.bash_profile)

6.在指令行提示符中使用檔案的絕對路徑或相對路徑來引用該shell腳本

顯示消息

echo Let's see if this'll work(輸出字元串,如果有單引号最好将整個字元串包在“”當中,否則單引号可能不會被輸出。)

echo -n "The time and date are:"

date(-n讓字元串與執行結果顯示在一行中)

使用變量

變量允許在shell腳本中暫存資訊,以便與腳本中其他指令一起使用。

#display user information from the system.

echo "User info for userid:USER"echoUID:USER"echoUID:UID

echo HOME: HOMEechoPATH:HOMEechoPATH:PATH

(腳本中有一些變量的使用)

如果想顯示$符,可以加\,如下所示

echo "The cost of the item is \$15"

使用者變量

# testing variables

days=10

guest="Jiqing"

echo "guestcheckedinguestcheckedindays days ago"

days=5

guest="Jessica"

(定義使用者自己的變量days,guest。這一點跟php有點相近)

# assigning a variable value to another variable 

value1=10

value2=value1echoTheresultvalueisvalue1echoTheresultvalueisvalue2

(用變量給變量指派)

反引号``

反引号允許将shell指令的輸出指派給變量。必須将整個指令行指令用反引号包圍起來。

testing=`date`(注意不是單引号,是~下面的那麼符号)

#using the backtick character

testing=`date`

echo "The date and time are:" testing  #!/bin/bash  #using the backtick character today=`date +%y%m%d` ls /usr/bin -al > log.testing  #!/bin/bash  #using the backtick character today=`date +%y%m%d` ls /usr/bin -al > log.today(将ls /usr/bin -al 查詢出來的結果寫到log.$today檔案中,執行完之後會發現新增一個log檔案,裡面都是查詢出來的内容)

重定向輸入輸出

有時候想通過指令儲存輸出,而不是隻在顯示器顯示輸出。

輸出重定向

date >test6(将date指令查詢的結果儲存到檔案test6中)

date >>test6(将資訊追加到test6檔案中)

輸入重定向(與輸出相反的動作)

wc <test6(将文本檔案的内容重定向到wc指令下,供wc統計使用)

管道

有時候需要将一個指令的輸出發送到另一個指令的輸入。

rpm -qa(列出所有被安裝的rpm package )

|

将一個指令的輸出發送到另一個指令的輸入。

rpm -qa >rpm.list

sort rpm.list

(等價于rpm -qa|sort)

亦可以将重定向技術與管道結合使用

rpm -qa |sort >rpmlist

數學計算

a.expr指令

expr 1 + 2(注意要用空格,吓死我了,以為不能用來着)

expr 5 \* 2(使用乘法需要加反斜杠)

#An example of using the expr command

var1=10

var2=20

var3=`expr var2/var2/var1`

echo "The value of var3 is:"var3(定義兩個變量,用expr計算結果,儲存到var3中,輸出結果)b.使用括号var3(定義兩個變量,用expr計算結果,儲存到var3中,輸出結果)b.使用括号[]

echo [1+2](輸出3) #!/bin/bash var1=100 var2=50 var3=45 var4=[1+2](輸出3) #!/bin/bash var1=100 var2=50 var3=45 var4=[var1∗(var1∗(var2-var3)]echoThefinalresultisvar3)]echoThefinalresultisvar4

(括号讓數學計算更加簡便了,結果為500)

c.浮點解決方案

bash電腦實際上是一種程式設計語言,該語言允許在指令行中輸入浮點表達式,然後解釋表達式并計算它們,最後傳回結果。

輸入bc進入指令模式

輸入quit退出指令模式

在腳本中使用bc

var1=`echo " scale=4;3.44/5"|bc`

echo The answer is var1 (将指令的結果儲存給變量var1,指令中用了管道技術,輸出指令給bc,bc執行之後傳回結果) 來看更多的例子 #!/bin/bash var1=100 var2=45 var3=`echo " scale=4;var1 (将指令的結果儲存給變量var1,指令中用了管道技術,輸出指令給bc,bc執行之後傳回結果) 來看更多的例子 #!/bin/bash var1=100 var2=45 var3=`echo " scale=4;var1/var2"|bc‘echoTheanswerforthisisvar2"|bc‘echoTheanswerforthisisvar3

(結果為2.2222)

var1=20

var2=3.14159

var3=`echo " scale=4;var1∗var1∗var1"|bc`

var4=`echo " scale=4;var3∗var3∗var2"|bc`

echo The answer is var4 (計算圓的面積) 還可以用EOF來計算,更加的友善,清晰 #!/bin/bash var1=10.46 var2=43.67 var3=33.2 var4=71  var5=`bc<<EOF scale = 4 al = (var4 (計算圓的面積) 還可以用EOF來計算,更加的友善,清晰 #!/bin/bash var1=10.46 var2=43.67 var3=33.2 var4=71  var5=`bc<<EOF scale = 4 al = (var1*var2)b1=(var2)b1=(var3*var4)a1+b1EOF‘echoTheanswerisvar4)a1+b1EOF‘echoTheanswerisvar5

退出腳本

$?儲存最後一條指令執行結束的退出狀态。

一條指令成功完成的退出狀态是0。如果指令執行錯誤,那麼退出狀态就會是一個正整數。

0 完成

1 未知錯誤

2 誤用shell

126 指令無法執行

127 沒有找到指令

..

exit指令允許在腳本結束時,指定一個退出狀态。

本文轉自TBHacker部落格園部落格,原文連結:http://www.cnblogs.com/jiqing9006/p/3196070.html,如需轉載請自行聯系原作者