1. 程式人生 > >第一週 第二天的linux學習

第一週 第二天的linux學習

今天我學習了linux的複製與刪除指令,gcc的四大步驟(預處理,編譯,彙編,連結),以及靜態庫函式、動態庫函式,以及linux 下的if-else、for、while語句的程式設計,以及對於.sh檔案編輯,雖然這只是初步,但更是基石。
主要的指令如下;
1.命令列下的複製貼上與刪除指令,查詢行數,main函式以及main函式的替換
1.1 複製;yy(前提就是你得進入檔案的命令列中),複製哪行,游標則需要移到首行的首地址,再者需要複製幾行,在yy前面加上相應的數字即可。
例如#include<stdio.h>
int mian()
{
printf(“my name is jjh.\n”);
return 0;
}
從首行開始複製6行,也就需要將檔案調至命令列下,游標移至#處,點選6yy,(接著需要將游標移到程式碼下的空白處),點選p即可成功貼上,指令成功。如果不按括號裡那麼做,則會導致貼上不完全,這我在上課初學時則就遇到了類似的問題,大家儘量別犯類似問題。
1.2 對於刪除指令:dd
跟上面的yy複製指令有著類似的點,那就是我們要刪誰,則需要將游標移到所需刪除的行的首地址,當然了我們不是僅僅只刪一行,刪幾行就在dd前面加數字幾(前提就是我們還是在vim 的檔案的命令列模式下進行操作)。
例如上面的程式碼,我要刪除 return 0; 那麼我們就將游標移到r處,輸入dd即可,若是從此行往後刪除3行,游標不動,輸入3dd即可。
在此指令執行的期間,若要撤銷,我們可以輸入u即可。
1.3 顯示行號
命令列下 在底行模式下輸入 :set nu即可
1.4檔案中查詢main函式並用其他字串替代它
命令列中 底行模式下加入:/name
對於替換main函式
在命令列中輸入:%s/main/abc(某個字串)
特殊情況1:例如 main() main main main 輸入:%s/main/abc/g即可(/g可以針對多個一行的多個相同變數)
情況2 :只改變某一行的main函式 可用;s/main/abc/g
2.gcc的深層的四步(預處理、編譯、彙編、連結) 對於目錄下的檔案操作,例如hello.c 檔案
2.1預處理 gcc -E -o hello.i hello.c(生成預處理檔案)
vim hello.i
2.2編譯 gcc -S -o hello.s hello.i(生成編譯程式碼)
vim hello.s
2.3彙編 gcc -c -o hello.o hello.s(生成目標檔案)
vim hello.o
2.4連結 gcc -o hello hello.o(生成可執行檔案)
ls
相應的目錄下會出現a.out檔案
之後執行./a.out ls 顯示出之前.c檔案的輸出結果。
3.靜態庫函式以及動態庫函式的創立
3.1 靜態庫函式的創立
例如你之前創立了一個add.c檔案,一個test.c檔案,將兩個函式整理到一個庫函式下。
步驟如下;
3.1.1首先就是編輯上面的兩個檔案.
3.1.2 gcc -E -o add.i add.c
3.1.3 gcc -s -o add.s add.i
3.1.4 gcc -c -o add.o add.s
3.1.5 ar -rcs libadd.a add.o ( 打包)
3.1.6 gcc test.c -L./ -ladd (add是庫名)
那麼靜態庫函式就可建立了,即是libadd.a。
3.2 動態庫函式的建立
還是之前的hello.c
執行下面的指令行
gcc -shared fPIC -o

libadd.so add.c
動態庫函式就建立了
4 linux下.sh的if-else for while 語句
首先對於.sh檔案的創立
開頭應該加上 #!/bin/sh
值前加上$
之後新建了.sh檔案
相應的程式碼如下
4.1 for語句
#!/bin/sh
num=2
for((i=1;i<100;i++))
do
touch"$i"
done
4.2 if-else語句
#!/bin/sh
if [ $1 -lt $2 ];then
echo “$1 is smaller.”
else
echo"$2 is bigger."
fi
4.3 while語句
i =1
while [i -lt 100]
do
echo $i
if [ $((i%num)) -eq o ];then
eceho $1
fi
done
-lt 小於 -eq等於 -gt大於
5.sh檔案
對於.sh檔案開頭都應該加上預處理語句 #!/bin/sh
以及.sh檔案不需要編譯。