本篇文章緊接上篇shell程式設計核心內容(1),shell不僅僅是命令,很多情況,我們可以把它作為一種程式設計的工具,比如,用shell實現乙個學生資訊的管理系統。
本文的寫作目的就是讓你在十分鐘內學會shell程式設計。shell程式設計的精髓在於條件測試和分支結構。shell的分支結構與c語言的分支結構本質上是一樣的,只是語法詞法有些區別。條件測試,是為分支結構提供條件的。
while [ -r
filename]do
echo』』
in while
」done
猜得到,我們想用while做迴圈,那麼,迴圈條件是什麼呢?迴圈體又是什麼呢?
我先告訴你,條件是
[ -r
filename
],迴圈體就是do和done中間的命令
echo』』
in while」。
while結構的用法就是這樣的。這個,真的沒有為什麼。
我們學習shell程式設計,要掌握的,也是10分鐘之內能掌握的,就是,每一種分支結構的格式,加上諸如
[ -r
filename
]的條件測試的用法。當然,這些條件不只是用在while中,也是用於其它分支結構的。
那麼 –
r 表示什麼呢?
我們看下列表:
• 1)
對檔案特性的測試
-d file---
檔案file
存在且為目錄檔案
-f file---
檔案file
存在且為普通檔案
-r file---
檔案file
存在且為可讀檔案
-w file---
檔案file
存在且為可寫檔案
-x file---
檔案file
存在且為可執行檔案
-s file---
檔案file
存在且檔案長度為非零
• 2)
對字串內容的測試
s1 = s2---
當字串s1和
s2相同時結果為真值
s1 != s2---
當字串s1和
s2不相同時結果為真值
-z s1---s1
串長度等於
0-n s1---s1
串長度不等於0•
3)用於對整數
n的測試
n1 –eq n2 ---
當整數n1與n2
相等時,
返回真值
n1 –ne n2 ---
當整數n1與n2
不相等時
,返回真值
n1 –lt n2 ---
當整數n1
小於n2時,
返回真值
n1 –le n2 ---
當整數n1
小於等於n2時
,返回真值
n1 –gt n2---
當整數n1
大於n2時,
返回真值
n1 –ge n2---
當整數n1
大於等於n2時
,返回真值
現在,我們就可以用任何分支結構配合上述的測試條件了。幾種分支結構如下:
一.if [ 條件1 ]
then
命令1elif [ 條件2 ]
then
命令2else
命令3fi
二.case 值 in
模式1)
命令1;;
……*)
命令n;;
esac
三.while[condition]
• do
• commands
• ……
• last-command
• done
四.•
until [condition]
• do
• commands
• ……….
• last-command
• done
五.for 變數名
in列表
do命令
done
不再多說這些迴圈是什麼了,學過c的都知道。我們來看乙個簡單的例項:
#!/bin/sh
#fortest
#to test the method of for
counter=0
for files in *
do
counter=`expr $counter + 1`
done
echo "there are $counter files in `pwd` "
這個例項囊括了算術運算的做法。是這樣的:
expr
是對shell
變數進行算術運算的操作.例:
$ count=0
$ count=$count+1
$ echo $count
顯示為0+1
$ count=`expr $count+1`
$ echo $count
顯示為1
要想做乙個算術運算,必須用expr對變數取值,指令碼語言裡,這種用法是通用的。通常用於硬體測試的tcl指令碼就是這樣的。
好了,上面的例項都能看懂了。
for files in *就是當前目錄下的檔案作為迴圈條件。counter=`expr $counter + 1`就是統計檔案個數。
如果你讀懂了這幾個例子,就沒問題了。相信真的也就是10分鐘的時間,除非你在仔細的看上述哪些測試條件和迴圈格式。我覺得用的時候可以查,不用記。
shell程式設計就真的只是這些,當然還能用函式呼叫的方式使用shell。
shell程式設計的核心內容
很多linux 的初學者以前可能用過很多 dos的命令,對 shell 這種命令式的程式語言略知一二,但並沒有接觸很多 shell 的用法,沒能真正抓住這種強大的程式語言的內涵,在這編文章裡,我們用簡短的篇幅使 linux 學習者掌握這門語言。在這篇文章裡,我們不會關注shell 每個命令的具體用法...
JPA核心內容
二 對應的狀態 三.物件之間的關係 四.單向多對一的配置 五 二級快取 id generatedvalue strategy generationtype.identity sequence auto table private long id 臨時,持久,刪除,游離 乙個持久化狀態的物件,如果被修...
Vuex核心內容 二
用於處理非同步的資料 如果通過非同步操作變更資料,必須通過action,而不能使用mutation,但是在action中還是要通過觸發mutation的方式間接變更資料。例項 const store newvuex.store mutations actions 1000 觸發actions的一種方...