您的位置:首页 > 运维架构 > Linux

Linux的入门学习(二)

2017-11-08 22:13 148 查看
   昨天学习了GCC编译器GDB调试器Makefile以及简单的shell写法。今天主要是回顾昨天所学习的内容以及一些课后的补充。

   首先来回顾一下Gcc编译器。Linux中Gcc用起来很方便,只需一个gcc file.c -o file 即可把一个C文件编译成一个可执行文件,虽然指令简单但其过程却分为4个步骤。第一步是预处理,本质上就是对头文件进行展开,或者说是对文件一开始#的内容进行展开,具体上使用gcc -E file.c -o file.i指令可以了解,预处理从.c文件变为.i文件,打开.i文件就会发现它比.c文件多了几百行,而且最后几行就是.c文件的头文件一下的内容。第二步就是编译,同样也可以使用gcc -S test.i
-o test.s指令查看,该过程主要有两个任务,即为语法检查,以及将C语言文件转化成汇编语言文件。第三步就是汇编,同理gcc -c test.s -o test.o,主要是将汇编语言转化成机器语言即为二进制文件。最后一步就是链接,gcc test.o -o test,就是把.o文件与C标准输入输出库进行连接,生成程序test。这四步就是GCC编译的原理。

   回顾完了GCC接着就来回顾GDB,GDB是一个调试工具,在目标文件中使用gcc -g test.c - test回车gdb test即可进入gdb交互界面,在gdb调试器里最常用的几个命令有l(list)(列出C文件的内容通常以10行为单位显示)、b(break)(通过使用b加行号来设置断点使用info b来查看断点)、r(run)(即从头开始运行)、c(continue)(继续向下运行)、s(step)(向下一行运行若有函数则进入函数)、n(next)(向下运行一行不进入函数)、q(quit)(退出GDB)等等。

  再来就是Makefile文件了,Makefile在一些大的项目里起很重要的角色吧,他可以同时编译很多C文件,基本格式是(target):(dependency)回车(tab)(command),这里的dependency通常就是.o文件没错就是gcc编译过程里的.o文件,他可以通过Makefile的隐含规则产生,Target就是目标文件也就是file可执行文件,Makefile具体的一些例子我就不再写了,但要熟悉Makefile的格式和功能。通过make命令完成编译操作以及make clean命令清除编译的结果,最好是以Makefile作为makfile文件名,如果非要不一样的话用make
-f 文件名也是可以的,在其他目录打开make命令则需要make -C makefile所在路径 即可。

   最后也是最头疼的吧(我觉得),shell。也不能说头疼,就感觉懂得太少,用起来很不顺畅,今天大半天都花在了shell上。shell文件的后缀都是.sh,创建的时候直接以.sh结尾就行了,打开有多种方式吧,我最习惯用的还是sh file.sh这种方式,当然还有chmod +x file.sh这种改可执行权限的方式打开,但我有点偏执的是我反正觉得能不改文件的属性就不要去动它。说完创建和打开.sh文件后就来了解它的格式吧。因为我们所学的shell重点是bash和sh种类,所以所有这种的shell文本开头必须是#!/bin/bash,接着一行习惯是#注释,我一般会空一行不怎么写注释毕竟入门。下面就是指令了。我写shell费劲的原因就在这里,有太多的命令不清楚,还有shell的语法不清楚,太多的细节不清楚,所以用起来相当吃力,先讲一些我今天熟悉的语句吧。首先第一个就是if
.. then ..else fi语句,通常是判断一个值时用if [   ] ; then来写判断,空格不能少,[ ]相当于test,我比较喜欢偷懒就觉得[ ]用起来舒服,里面常常是比较逻辑什么的,例如-eq、-ne、-lt、-le、-gt、-ge等等,then后面就是符合条件后执行的指令,当然有多个判断条件时要在else前面加elif [ ] ,最后以fi结尾,一个if对应一个fi。再来就是case语句了,这个比较简单,通常配合read使用,相当于c里面的swith语句,就是选择符合的条件执行。接着就是for循环,通过课外学习我知道还有while、until等语句,循环语句用起来都很舒服,因为它帮你解决了很多重复的步骤,这里简单的举一个例子,更改目录里所有.txt文件为.doc文件。这道题目一开始我以为很简单用mv
*.txt *.doc就能完成,这很不对,这更改了文件的名字,名字都是*.doc,于是我就去查找更改后缀的命令,找到了rename这条命令。也发现了用rename来更改后缀,即rename txt doc *.txt 当然用shell来写也很容易

#!/bin/bash

for file in *.txt

do

leftname=`basename $file .txt` 

mv $file $leftname.doc

done

   这里用到的basename就是删除后缀的命令,删除后缀后再用mv加上新后缀。对了,在这里补充一下,""与''大家都知道,而``就是TAB键上面的一个`,这中间的内容就是执行命令。这个例子用的就是for 变量 in 变量1 ..do command done的形式,还有不少东西我没提到,而且昨天的学习也只是入门而已以后也会慢慢接触到一些shell的东西,希望能有更进一步的了解吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: