使用多條命令
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.陣列元素引用...