shell程式設計2(makefile)

2021-07-31 16:14:15 字數 4684 閱讀 1435

二、正規表示式

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 的...