linux與c的學習(2018.11.11)
工程管理器make(續)
偽目標【沒有依賴,只有執行動作】
.PHONY:clean //宣告偽目標
clean:
rm -f hello main.o func1.o func2.o
執行偽目標: make clean
不取名為makefile的執行方式:
make -f 檔名 //執行
多檔案編譯:
obj = main.o fun1.o fun2.o fun3.o //obj為自定義
hello:$(obj) //$:取資訊
gcc $(obj) -o hello
系統預設的自動化變數
$^:代表所有的依賴檔案
[email protected]
$<:代表第一個依賴檔案
eg:
hello:main.o fun1.o fun2.o
gcc main.o fun1.o fun2.o -o hello
可等效為:
hello:main.o fun1.o fun2.o
gcc $^ -o [email protected]
@:取消回顯
#:在makefile中#後面接註釋
hello: hello.c
@gcc hello.c -o hello
SHELL指令碼
Shell就是一個命令列直譯器,它的作用就是遵循一定的語法將輸入的命令加以解釋並傳給系統。
Shell來啟動、掛起、停止甚至是編寫一些程式。
程式:
vim xxx //建立shell指令碼檔案
程式必須以下面的行開始(必須方在檔案的第一行):
#!/bin/sh
#!用來告訴系統它後面的引數是用來執行該檔案的程式。
要使指令碼可執行:
chmod +x filename
然後,可以通過輸入: ./filename 來執行指令碼
變數名=值
取出變數值可以加一個美元符號($)在變數前面
變數賦值時,“=”兩邊都不能有空格
BASH中的語句結尾不需要分號
eg:
#!/bin/sh #對變數賦值: a="hello world" # 現在列印變數a的內容: echo "A is:" echo $a //之後執行chmod +x HelloWorld 最後輸入./ HelloWorld執行該指令碼。 這個指令碼將會輸出: A is: hello world
echo “this is the $numnd”
不會打印出“this is the 2nd”,而僅僅列印“this is the”,因為shell會去搜索numnd變數的值,但這個變數是沒有值的。可以使用{}來告訴shell我們要列印的是num變數:
echo “this is the ${num}nd”
這將列印: “this is the 2nd”
預設變數
$#:傳入指令碼的命令列引數個數
$*:所有命令列引數值,在各個引數值間留有空格
$0:命令本身(shell檔名)
$1:第一個命令列引數
$2:第二個命令列引數
區域性變數
在變數首次被複制時加上local關鍵字可以什麼一個區域性變數
IF語句
If [expression]
then
#code block
fi
If [expression]
then
#code block
else
#code block
fi
eg:
If [expression]
then
#code block
else if [expression]
then
#code block
else
#code block
fi
fi
比較整數a和整數b是否相等:if[ $a = $b ]
比較整數a是否大於整數b:if[ $a –gt $b ]
比較字串a和b是否相等: if[ $a = $b ]
判斷字串a是否為空:if[ -z $a ]
比較整數變數a是否大於b:if[ $a –gt $b ]
注意:1、在“[”和“]”兩邊都留有空格
2、在“=”兩邊也都有空格
-e 檔案已存在
-f 檔案是普通檔案
-s 檔案大小不為零
-d 檔案是一個目錄
-r 檔案對當前使用者可以讀取
-w 檔案對當前使用者可以寫入
-x 檔案對當前使用者可以執行
for迴圈
for var in [list]
do
#code block
done
While迴圈
while [condition]
do
#code block
done
until迴圈
until [condition]
do
#code block
done
while和until的區別在於while為真時執行,until為假時執行;
case語句
BASH語句中的case和c語言中的類似可以用於進行多項分支控制:
case “$var” in
contidion1)
;;
contidion1)
;;
*)
default statements;;
esac
C
程式:資料結構+演算法
int的長度根據CPU的字長來決定的,int可變,在16位的機子上是2個位元組,在32位上是4個位元組
long int 位元組數不變,是4個位元組(32位)
int在記憶體中以補碼方式存放。
補碼:
正數:補碼原碼一樣
負數:原碼–>補碼的方法:符號位不變【最左邊的第一位】,其他按位取反 然後+1
[]是下標運算子:
1、計算偏移地址
2、取值
右大括號 } 有返回值的功能。