第一周 第二天的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文件不需要編譯。
總結
以上是生活随笔為你收集整理的第一周 第二天的linux学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 基本指令
- 下一篇: linux下c的学习