二、正規表示式
1.作用
.元字元
.範圍.重複
三、測試語句,test命令
1.用於
主要用於判斷檔案、字串、數值關係。
2.語法
a.測試檔案是否存在
#!/bin/bash
if test -e $1
#$1是為輸入第乙個引數
then
echo "yes"
else
echo "no"
fi測試結果:
gec@ubuntu:/mnt/hgfs/share$ ./test.sh 12.c
yesgec@ubuntu:/mnt/hgfs/share$ ./test.sh 12322.c
nob.測試字串是否相等
#!/bin/bash
sa="abc"
sb="abc"
if test $sa = $sb # if [ $sa = $sb ]
then
echo "yes"
else
echo "no"
fi輸出結果:
gec@ubuntu:/mnt/hgfs/share$ ./test.sh
yesc.測試數值是否相等
#!/bin/bash
a=11
b=22
if test $a -eq $b # if [ $a = $b ]
then
echo "yes"
else
echo "no"
fi輸出結果:
gec@ubuntu:/mnt/hgfs/share$ ./test.sh
no四、邏輯控制語句
1.if
if test $a -eq $b # if [ $a = $b ]
then
echo "yes"
else
echo "no"
fi2.for
#!/bin/bash
files=`ls`
for a in $files
doif [ -f $a ]
then
wc -l $a
fidone
輸出結果:
gec@ubuntu:/mnt/hgfs/share$ ./test.sh
0 12.c
0 1abc.c
3 1.sh
0 abc.c
0 a.c
0 a.sh
0 a.txt
3 file
6 people.txt
20 phone.txt
6 test.c
12 test.sh
12 test.sh~
34 variable.sh
3.while
#!/bin/bash
declare -i n=0
while [ $n -le 10 ]do#
輸出結果:
gec@ubuntu:/mnt/hgfs/share$ ./test.sh01
2345
6789
104.case
#!/bin/bash
read var
case $var in
1) echo "one"
;;2) echo "two"
;;'a') echo "letter is a"
;;*) echo "unknown"
esac
輸出結果:
gec@ubuntu:/mnt/hgfs/share$ ./test.sh
1one
gec@ubuntu:/mnt/hgfs/share$ ./test.sh
3unknown
gec@ubuntu:/mnt/hgfs/share$ ./test.sh
2two
gec@ubuntu:/mnt/hgfs/share$ ./test.sh
aletter is a
五、makefile
1.定義
makefile最重要的作用管理編譯的檔案。
什麼是makefile?或許很多winodws的程式設計師都不知道這個東西,因為那些windows的ide都為你做了這個工作,但我覺得要作乙個好的和professional的程式設計師,makefile還是要懂。這就好像現在有這麼多的html的編輯器,但如果你想成為乙個專業人士,你還是要了解html的標識的含義。特別在unix下的軟體編譯,你就不能不自己寫makefile了,會不會寫makefile,從乙個側面說明了乙個人是否具備完成大型工程的能力。
系統移植
.u-boot
有很多個*.c
.kernel
有很多個*.c,當前核心2200萬行**
.rootfs
有很多個*.c
2.格式
a.例子1
x86:
gcc *.c -o main
clean:
rm main
輸出結果:
gec@ubuntu:/mnt/hgfs/share/makefile/1$ make
gcc *.c -o main
gec@ubuntu:/mnt/hgfs/share/makefile/1$ make x86
gcc *.c -o main
gec@ubuntu:/mnt/hgfs/share/makefile/1$ make clean
rm main
當我們輸入make命令的時候,預設是執行makefile第乙個標號。
b.例子2
x86:
gcc *.c -o main
arm:
arm-linux-gcc *.c -o main
clean:
rm main
輸出結果:
gec@ubuntu:/mnt/hgfs/share/makefile/1$ make
gcc *.c -o main
gec@ubuntu:/mnt/hgfs/share/makefile/1$ file main
main: elf 32-bit lsb executable, intel 80386, version 1 (sysv), dynamically linked (uses shared libs), for gnu/linux 2.6.24, buildid[sha1]=0x7bf0135efa48bf3262e838e388435d3ed99f0bc7, not stripped
gec@ubuntu:/mnt/hgfs/share/makefile/1$ make arm
arm-linux-gcc *.c -o main
gec@ubuntu:/mnt/hgfs/share/makefile/1$ file main
main: elf 32-bit lsb executable, arm, version 1 (sysv), dynamically linked (uses shared libs), for gnu/linux 2.6.16, not stripped
c.例子3
all:
$(cc) *.c -o main
clean:
rm main
輸出結果:
gec@ubuntu:/mnt/hgfs/share/makefile/1$ make
cc *.c -o main
gec@ubuntu:/mnt/hgfs/share/makefile/1$ file main
main: elf 32-bit lsb executable, intel 80386, version 1 (sysv), dynamically linked (uses shared libs), for gnu/linux 2.6.24, buildid[sha1]=0x7bf0135efa48bf3262e838e388435d3ed99f0bc7, not stripped
d.例子4
cc=arm-linux-gcc
all:
$(cc) *.c -o main
clean:
rm main
輸出結果:
gec@ubuntu:/mnt/hgfs/share/makefile/1$ make
arm-linux-gcc *.c -o main
gec@ubuntu:/mnt/hgfs/share/makefile/1$ file main
main: elf 32-bit lsb executable, arm, version 1 (sysv), dynamically linked (uses shared libs), for gnu/linux 2.6.16, not stripped
e.例子5
cc=arm-linux-gcc
objs=$(patsubst %.c,%.o,$(wildcard *.c))
all:$(objs)
$(cc) $(objs) -o main
clean:
rm *.o
一般我們可以使用「$(wildcard *.c)」來獲取工作目錄下的所有的.c檔案列表。複雜一些用法;可以使用「$(patsubst %.c,%.o,$(wildcard *.c))」,首先使用「wildcard」函式獲取工作目錄下的.c檔案列表;之後將列表中所有檔名的字尾.c編譯輸出為.o。
shell程式設計 2
在shell裡,使用變數之前通常並不需要實現為他們做出宣告。預設情況下,所以變數都被看做字串來儲存,即使它們被賦值為數值也是如此。shell和一些工具程式會在需要時把數值型字串轉換為對應的數值以對它們進行操作。linux大小寫敏感。在shell中,我們可以通過在變數名前加乙個 符號來訪問它的內容。無...
shell程式設計 2
編寫shell程式,實現自動刪除50個賬號的功能。賬號名為stud1至stud50。程式實現及注釋如下 bin bash deluser.sh 考察while迴圈 i 1while i le 50 do 檢視賬戶是否存在 只需要在 etc passwd檔案查詢就可以了。我是利用了乙個管道符,再利用g...
shell程式設計珠璣(2)
1 shell 呼叫 ftp load aaa.txt file sudo ftp n i v open ftpserver user ftpname ftppassword cd ftpdirectory lcd localdirectory mget aaa.txt quit end2 if 的...