Linux shell之Shell指令碼

2021-09-22 10:58:57 字數 4702 閱讀 8319

使用多條命令

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

who4.儲存為test1

5.將shell指令碼檔案所在的目錄新增到path環境變數中(

a.修改~/.bash_profile

path=pa

th: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指令碼中暫存資訊,以便與指令碼中其他命令一起使用。

#!/bin/bash

#display user information from the system.

echo "user info for userid:us

er"e

chou

id:user"echouid:

uidecho home: ho

meec

hopa

th:homeechopath:

path

(指令碼中有一些變數的使用)

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

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

使用者變數

#!/bin/bash

# testing variables

days=10

guest="jiqing"

echo "gu

estc

heck

edin

guestcheckedin

days days ago"

days=5

guest="jessica"

echo "gu

estc

heck

edin

guestcheckedin

days days ago"

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

#!/bin/bash

# assigning a variable value to another variable 

value1=10

value2=va

lue1

echo

ther

esul

tval

ueis

value1echotheresultvalueis

value2

(用變數給變數賦值)

反引號``

反引號允許將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 管道

有時候需要將乙個命令的輸出傳送到另乙個命令的輸入。

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(使用乘法需要加反斜槓)

#!/bin/bash

#an example of using the expr command

var1=10

var2=20

var3=`expr va

r2/var2/

var1`

echo "the value of var3 is:"va

r3(定

義兩個變

量,用e

xpr計

算結果,

儲存到v

ar3中

,輸出結

果)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= [v

ar1∗

(var1∗(

var2-va

r3)]

echo

thef

inal

resu

ltis

var3)]echothefinalresultis

var4

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

c.浮點解決方案

bash計算器實際上是一種程式語言,該語言允許在命令列中輸入浮點表示式,然後解釋表示式並計算它們,最後返回結果。

輸入bc進入指令模式

輸入quit退出指令模式

在指令碼中使用bc

#!/bin/bash

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/va

r2"|

bc『e

chot

hean

swer

fort

hisi

svar2"|bc『echotheanswerforthisis

var3

(結果為2.2222)

#!/bin/bash

var1=20

var2=3.14159

var3=`echo " scale=4;va

r1∗var1∗

var1"|bc`

var4=`echo " scale=4;va

r3∗var3∗

var2"|bc`

echo the answer is 

var4 (計算圓的面積) 還可以用eof來計算,更加的方便,清晰 #!/bin/bash var1=10.46 var2=43.67 var3=33.2 var4=71  var5=`bcvar1*va

r2)b

1=(var2)b1=(

var3*va

r4)a

1+b1

eof『

echo

thea

nswe

risvar4)a1+b1eof『echotheansweris

var5

退出指令碼

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

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

0 完成

1 未知錯誤

2 誤用shell

126 命令無法執行

127 沒有找到命令

..exit命令允許在指令碼結束時,指定乙個退出狀態。

linux shell指令碼之if判斷

無論什麼程式語言都離不開條件判斷。shell也不例外。if list then do something here elif list then do another thing here else do something else here fi ex1 bin sh system uname ...

linux shell指令碼之判斷

先寫一些基本語法 1 字串判斷 str1 str2 當兩個串有相同內容 長度時為真 str1 str2 當串str1和str2不等時為真 n str1 當串的長度大於0時為真 串非空 z str1 當串的長度為0時為真 空串 str1 當串str1為非空時為真 2 數字的判斷 int1 eq int...

Linux shell之陣列使用

1.陣列定義 a 1 2 3 4 5 2.陣列引用 apuser wenyangubtpc echo 1 2 3 4 5 3.陣列長度 apuser wenyangubtpc echo 5 4.列印陣列 echo apuser wenyangubtpc echo 1 2 3 4 5 5.陣列元素引用...