Linux基础

目录

一、操作系统

1、描述

2、Linux操作系统的组件

二、嵌入式系统

三、Linux的文件系统结构

修改文件权限

创建链接文件

        硬链接         

         软链接        

四、shell命令

1、shell命令格式

2、shell特殊字符

        1、通配符

        2、管道 |

        3、输入输出重定向

        4、命令置换

3、shell基本系统命令

        1、echo (打印)

        2、pwd命令

        3、ls列目录内容

        4、man 与 info

        5、关机与重启

        6、  passwd

        7、df命令

        8、du命令

        9、history

        10、wc

        11、cat

        12、more/less

        13、grep

        14、head,tail

        15、sort

        16、diff

        17、file 

        18、date

        19、who

        20、in

        21、cp

总览

五、文件类型

六、文件的压缩与归档

      1、 文件的压缩

        2、文件的归档(打包)

七、Linux软件包管理

1、离线管理工具:dpkg

2、在线管理工具:apt

八、网络配置

        1、虚拟机配网

        2、网络映射

九、Linux系统用户管理

        1、用户的属性

        2、切换用户

        3、添加用户

        4、修改用户属性

十、查找命令/程序的可执行文件的位置

which

whereis

十一、进程管理

十二、shell脚本

        1、编译性语言

        2、解释性语言

        3、shell编程过程

        4、shell变量

                定义变量

               引用变量

                  变量清空       

                  位置变量

                  环境变量

        5、shell功能语句

        说明性语句(注释行)

        结构性语句

        6、shell函数

                函数定义格式

                函数调用

                函数变量作用域

十三、gcc编译器

        1、gcc编译的过程

        2、gdb调试流程


一、操作系统

1、描述

        软件

        管理计算机的硬件资源

        为上层用户提供简单易用的接口

        开源、免费、多用户

2、Linux操作系统的组件

      1、  实用程序       

图形化界面

管理程序

应用程序

编程工具

配置服务器

      2、  Shell(命令解释器):起保护作用

命令解释器,实现用户月操作系统进行交互,位于实用程序与内核之间

      3、  Linux的内核

        内核是Linux系统的最底层,提供了系统的核心功能并预先进程以一种有序的方式访问硬件。

        用于控制进程、输入、输出设备、文件系统操作、管理内存。

        支持多用户(同时多个人用户访问系统),多任务(同时多个程序运行)

        4、文件系统

一切硬件皆为文件

二、嵌入式系统

以应用为中心,软硬件结合,以计算机为基础,软硬件可裁剪

三、Linux的文件系统结构

在Linux中所有硬件都视为文件来处理

在Windows下,目录结构属于分区 。在Linux下,分区属于目录结构。

Linux的文件系统是一个树形的分层组织

/bin:二进制

/boot:linux系统启动时要用上的程序

/dev:包含所有Linux系统使用到的外部设备

/etc:存放了系统管理时要用到的各种配置文件和子目录

/lib:存放了系统动态链接共享库

/home:普通用户的主目录

/root:根目录(超级用户)的主目录

/user:

......

修改文件权限

-                rw-                rw-                        r-- 

普通文件   用户权限       同组用户权限       其他用户权限 

chmod                --修改权限

       chmod 权限 文件         修改文件的权限

        chmod 0777 文件        赋予文件最高权限,所有用户都可执行

        eg:       

                chmod 0764 文件        u:rwx

                                                    g:rw-

                                                    o:r--

                                                    a:所有用户

        chmod u/g/o/a + r/w/x 文件 

        chmod u/g/o/a + r/w/x 文件 

创建链接文件

                保留目标文件的地址,而不占

        硬链接         

                        利用Linux中为每个文件分配的物理编号——inode建立链接。因此,硬链接不能跨越文件系统。

                        源文件的镜像,里面保存的内容和源文件一模一样,大小也一样,一旦硬链接创建之后删除源文件,硬链接不会失效,且修改源文件的路径,硬链接也不会失效

                        ln 源文件名 硬链接名

         软链接        

                                (符号链接)是利用文件的路径名建立链接。通常建立软链接使用绝对路径而不是相对路径,以最大限度增加可移植性。
                                源文件被删除或者路径改变,软链接都会失效

                        

                        ln -s 源文件名 软文件名

注:一个扇区512个字节,一块有8扇共4MB

四、shell命令

1、shell命令格式

通常一条命令包含三个要素:命令名称、选项、参数。命令名称是必须的,选项和参数都可能是可选项。命令格式如下所示:

$ Command [-Options]Argument1 Argument2 ..指令选项′参数1
参数2...

Command:命令名称,Shell命令或程序,严格区分大小写,例如设置日期指令为date等:
Options:命令选项,用于改变命令执行动作的类型,由“-”引导,可以同时带有多个选项;

Argument:命令参数,指出命令作用的对象或目标,有的命令允许带多个参数。

:一条命令的三要素之间用空格隔开;
        若将多个命令在一行书写,用分号(;)将各命令隔开;
        如果一条命令不能在一行写完,在行尾使用反斜杠(\)标明该条命令未结束。

2、shell特殊字符
        1、通配符
通配符含义实例
*匹配任意长度字符串rm *.txt  --删除.txt的文件
 
匹配一个长度的字符rm ?.txt  --删除一位字符的.txt文件
 
[..]匹配其中指定的字符用file_[otr].txt。匹配file_o.txt、file_r.tx t和file_t.txt
 
[-]匹配指定的一个字符范围用file_[a-z].txt。匹配file_a.txt、file_b.txt。直到file_z.txt
 
[^...]除了指定范围的字符,均可匹配

a .txt b.txt c.txt d.txt e.txt f.txt

rm [^abc ].txt//删除除了abc开头.txt文件
//则除d e f .txt

{ }可在创建文件时使用touch {a..z}.c --创建a~z的.c文件

        2、管道 |

          将一系列的命令连接起来,前一个命令的输出将作为后一个命令的输入,以此类推。。。

        ls ~/class/shell/1.txt |wc -w        ---查看目录文件的单词个数

        3、输入输出重定向
重定向符含义
>filefile输出,新建模式
>>filefile输出,追加模式(不会覆盖原有的内容)
<file将file文件重定向为输入源
2>或&>将命令产生的错误信息输入到...

ls ~ > 1.txt ---将1s ~查询到的内容存放到1.txt文件

注意:如果1.txt不存在则创建
        如果1.txt存在则会清空,然后再放入重定向的内容

        4、命令置换

        命令command2的输出将作为命令command1的参数。需要注意,命令置换的单引号为ESC键下方的``键

        command1 `comand2`

3、shell基本系统命令
        1、echo (打印)

                echo -n information   输出不换行

                echo “字符串”        不会省略字符串中的重复空格

                echo “$PATH 你好” --不会省略字符串的空格,但会引用环境变量

                echo ' '   --不会省略字符串的空格,且不会引用环境变量

 

                echo $SHELL   ---查看当前终端使用的解释器类型

        2、pwd命令

                显示用户在文件系统中的当前位置(执行结果显示为绝对路径)

                绝对路径:从根目录出发到目标文件的路径
                相对路径:从当前位置到目标文件的路径

        3、ls列目录内容

                ls        ---列出当前文件夹下的所有文件

                ls-a        ---显示当前目录全部文件(包括隐藏文件)

                ls-l        ---显示当前目录全部信息

        4、man 与 info

                获取联机帮助

          可获得以下信息:(一般分为三页,第一页为命令/程序,第二页为系统调用函数,第三页为标准库函数)

                命令的名称

                命令的常用参数

                命令的一边描述以及用途

                命令的参数

                用法示例等...

                man commandname        --模糊查找

                info commandname

                man -k "directory"        ---关键字检索

                

               

        5、关机与重启

                sudo shutdown -h now        --关机

                sudo shutdown -r now        --重启

                sudo shutdown -h +1         --一分钟后关机 

                sudo reboot                         --重启

        6、  passwd

             修改已有账户的用户口令

        7、df命令

                  df命令用于查看磁盘空间的使用情况。

                df命令的一般格式为: df [-a 或 -T 或-h 或-k ] Filesystem

选项含义
-a显示所有物理文件系统的使用情况,包括虚拟文件系统,如/proc,/sys等
-T显示物理文件系统的文件格式类型
-h物理文件系统大小按兆字节为单位显示
-k物理文件系统大小按千字节为单位显示
        8、du命令

列出目录和文件所使用的磁盘块数,每块占512个字节。

常用参数:

-a:仅列出空闲的文件数

-k:列出磁盘的使用情况

-s:列出总的空闲空间

        9、history

        查询历史命令

echo $HISTSIZE        ---查询保存历史命令的数量

临时修改保存命令数量

注:临时修改后关闭终端后再打开需要重新配置,要想长期使用可以前往用户终端配置文件里修改,用户终端的配置文件   ~/.bashrc

        10、wc

        wc -w 普通文件        --统计单词数 

        wc-l 普通文件        --统计行数

        wc-c 普通文件        ---统计字节数

        11、cat

cat 普通文件 //将文件内容输出到终端

cat -n 普通文件 //显示行号

        12、more/less

more/less 普通文件 //分页查看普通文件的内容

                h        --帮助手册

                空格        --向下翻页

                回车        --翻行

        13、grep

                在文本中查找字符串

grep 选项 字符串 文件名  //在文件中查找字符串

         选项: -n  显示行数

                     -r   在路径中找

注:Linux中c库函数头文件的路径/usr/include

        14、head,tail

head 文件名        //从头开始显示文件

tail 文件名        //从尾部开始显示文件

        15、sort

        以行为单位,以字符ASCII码值为标准进行排序

        sort 普通文件

        sort -r 普通文件 //逆序排序

        16、diff

        比较两个文件

        diff 普通文件1 普通文件2

        a:add


        d :delete

        c: change


diff 1.txt 2.txt > 1.txt.patch
patch 1.txt 1.txt.patch         ---根据.patch文件中的规则将1.txt更新为2.txt

        17、file 

        查看文件类型        ————以文件的内容为标准

        file 文件名

        18、date

        显示系统时间

                date        ———显示系统时间

        

        19、who

        查看当前接入系统的用户

        20、in

        创建文件链接

        21、cp

        

总览

        

        

        

五、文件类型

文件类型类型符描述
普通文件-指ASCII文本文件、二进制可执行文件、以及硬件链接
块设备文件b块输入/输出设备文件
字符设备文件c原始输入/输出设备文件,每次I/O操作仅传送一个字符
目录文件d包含若干文件或子目录
符号链接文件l只保留了文件地址,而不是文件本身
命名管道p一种进程间通信的机制,用于进程间通信的暂时文件
套接字s用于进程间通信,两台计算机间通信的应用程序接口API

六、文件的压缩与归档

        归档--将一系列文件打包到一个文件中去

        压缩文件也是将一组文件或目录保存一个文件中,并按照某种存储个数保存到磁盘上,所占磁盘空间比其中所有文件总和要少

        du -h 文件名 查看文件占磁盘空间大小(-h 即以K、M、G为单位显示)

      1、 文件的压缩
压缩工具解压工具文件扩展名
gzipgunzip.gz
bzip2bunzip2.bz2
zipunzip.zip

        gzip [-l|-d|-num] filename

选项描述
-l查看压缩文件内的信息,包括文件数、大小、压缩比等参数,并不进行文件解压
-d将文件解压,功能与gunzip相同
-num指定压缩比率,num为1-9级
        2、文件的归档(打包)

        tar  --将多个文件或则目录打包为一个文件

                -c        创建归档

                -x        释放归档

                -f        指定创建的归档文件名  一般为以.tar作为归档文件的后缀(不可省略,放在最后)

                -v 显示归档和释放的过程

                -z 在归档的同时进行gzip压缩

        eg:


tar -cf 1.pdf.tar 1.pdf           -- 为1.pdf文件创建归档(1.pdf.tar)

tar -xf 1.pdf.tar                    --释放归档
tar -cvf 1.pdf.tar 1.pdf         -- 为1.pdf文件创建归档(1.pdf.tar)

tar -xvf 1.pdf.tar                  --释放归档
tar -czvf 1.pdf.tar.gz 1.pdf   -- 为1.pdf文件创建归档(1.pdf .tar)--在归档的同时进行压缩

tar -xzvf 1.pdf.tar. gz           --                                                   --在释放归档的同时进行解压

七、Linux软件包管理

        Linux软件包主要分为两类:Deb软件包、Rpm软件包

        软件包的命名规则: Filename_Version-Reversion_Architecture.deb

软件包管理工具

1、离线管理工具:dpkg

dpkg -i 软件包名 (安装本地文件安装包)

        eg: dpkg -r oneko_1.2.sakura.6-14_amd64.deb

dpkg -r 软件包名 (卸载)

        eg: dpkg -r oneko

dpkg -P 软件包名(移除已安装软件包及配置文件)

        eg: dpkg -P oneko

dpkg -L 软件包名 (列出安装的软件包清单)

dpkg -S 软件包名(显示出软件包的安装状态)

软件包名        运行软件

2、在线管理工具:apt

apt:获取、安装、编译、卸载、查询

        需要虚拟机连接网络

APT软件包管理器在一个文件中列出可获得软件包的镜像站点地址,这个软件源配置文件就是/etc/apt/sources.list。它本质就是一个普通的文本文件,可以在超级管理员授权下,使用任何文本编辑器进行编辑。在该文件中,添加的软件源镜像站点称为一个配置项,并遵循以下格式:

DebType AddressType://Hostaddress/Ubuntu Distribution Component1 Component.....

软件配置文件        /etc/apt/sources.list

vi  /etc/apt/sources.list        ---访问软件配置文件

:每次修改完/etc/apt/sources.list文件后,需要运行“apt-get update”命令,才会使更改有效!

apt-get工具

sudo apt-get update ---- 刷新软件源清单

sudo apt-get install 软件包名 ---- 安装相应软件包

        eg:sudo apt-get install oneko

sudo apt-get remove 软件包名--- 卸载指定的已安装的软件包
        eg:sudo apt-get remove cmatrix

sudo apt-get clearn -- 清除缓存区所有软件包

sudo apt-get check 软件包名-- 检查系统中的依赖关系

sudo apt-get instal -d oneko --- 只下载oneko软件包不安装软件包位
于/var/cache/ apt/archives
 

sudo apt-get remove --purge 软件包名  ---与remove子命令一起使用,完全卸载软件包
 

sudo apt-get instal --reinstall 软件包名  --- 与insta11子命令一起使用,重新安装软件包
 

apt-cache

apt-cache show 软件包名        --获取二进制软件包的详细信息

apt-cache search 软件包名       --根据正则表达式检索软件包

apt-cache depends 软件包名         --获取软件包的依赖信息

apt-cache redepends 软件包名         --获取依赖于软件包的信息

apt-cache policy 软件包名        --获取软件包安装状态

:寻找安装包的目录 --- /var/cache/apt/archives

八、网络配置
 

        1、虚拟机配网

1、虚拟网卡

虚拟机编辑->虚拟网络编辑器->更改设置->桥接模式->选中windows主机正在工作的网卡

2、让虚拟机使用网卡

虚拟机->设置->网络适配器->自定义->选中上一步配置的网卡->确定
sudo service network-manager restart ---重启网络服务(刷新查看虚拟机联网图标)
 

ping www.4399.com --测试虚拟机能否连接网络

成功收到如下反馈:

        2、网络映射

        以太网映射        -->ens

        无线网映射        -->wlan

        linux查看网络        ifconfig

        Windows查看网络        ipconfig

                IP:在网络中唯一标识一台主机

IPv4        --4个字节

点分十进制

        0-255,0-255,0-255,0-255

        192.168.12.33

二进制

        11000000 10101000 00001100 00100001

eg:

                域名:www.4399.com

                DNS:域名解释器,通过域名找IP

IPv6        --更多ip更安全

IP地址的范围

DHCP:IP租赁服务器,动态分配IP

配置静态IP:在主机进入网络之前,事先为主机设置固定的IP地址;
配置动态IP:选择DHCP网络服务,在主机进入网络之后,动态随机获取IP地址。

网络号(网段):子网掩码与IP地址按位相与

网络配置相关命令
        ifconfig  查看网卡配置信息

ifconfig 

sudo ifconfig ens33 192.168.12.77 mask 255.255.255.0

                --将ens33网卡的IP地址设置为192.168.12.77  子网掩码设置为255.255.255.0

sudo ifconfig ens33 down                   --关闭ens33网卡

sudo ifconfig ens33 up                --打开ens33网卡

netstat

netstat -apn        查看当前随机使用网络进程的详细信息

九、Linux系统用户管理
        1、用户的属性

        用户名、口令、用户ID(UID)“系统用一个整数来唯一标识一个用户”、用户主目录(HOME)、用户shell

           

                 /etc/passwd文件:系统能够识别的用户清单,用户登录时,系统通过查询这个文件来确定用户的UID并验证用户口令。

                /etc/group:包含UNIX组的名称和每个组中的成员列表

                                    一行代表一个组,包括4个部分:组名:加密的口令:GID号:成员列表(成员列表之间用逗号隔开)

        2、切换用户

                su  用户名                ——切换至指定用户

                su                    ———切换至根目录

        3、添加用户

                语法:adduser <username>

                        添加新用户        

                sudo adduser 用户名  //新建一个用户 并且自动创建用户目录

                添加新用户的过程:

                sudo addusr 用户名        //新建一个用户并且自动创建用户目录(/home)/etc/adduser.conf
                FIRST__UID=1000        //用户ID下限
                LAST_UID=29999USERS_GID=100        //用户ID上限

                DHOME=/home        //新建用户目录存放位置
               DSHELL=/bin/bash        //新建用户的默认终端
                SKEL=/etc/ske1         / /addusr新建的用户从此处加载配置文件

                        系统:编辑passwd和shadow文件,定义用户账号

                                  设置一个初始口令

                                  创建用户主目录,用chown和chmod命令改变主目录的属主和属性

                        用户操作:
                                        将默认启动文件复制到用户主目录

                                        设置用户的邮件主目录并建立邮件别名

        4、修改用户属性

                        usermod        -- 修改用户

                                eg: sudo usermod -d /home/lisi -m -l lisi zhangsan

                                        --修改目录,同时修改用户名zhangsan为lisi


                       

                        delgroup        --删除组

                                        sudo delgroup groupname


                        deluser        --删除用户

                                sudo deluser 用户名         --删除指定用户,但是不会删除用户的目录

                                sudo deluser --remove -home 用户名        --删除用户名和目录

十、查找命令/程序的可执行文件的位置
which

which 命令/程序        

whereis

whereis 命令/程序

十一、进程管理

        程序的执行就是一个进程

        ps        --查看系统中正在运行的进程

        ps -aux

        ps-aux | grep " "        --通过grep可快速找到需要的进程

        kill         --给进程发送信号

kill -l         --查看系统支持的进程

kill -9   进程号      --杀死相应进程

        进程状态

D:        不可中断的静止
R:        正在执行中
s:        阻塞状态
T∶      暂停执行
Z:        不存在但暂时无法消除
<:        高优先级的进程
N:        低优先级的进程
L:        有内存分页分配并锁在内存中

十二、shell脚本

文件开头写上                #!/bin/sh

                                                ---说明文件是脚本,以及其解释器

        1、编译性语言

                需要c/c++编译器编译后才能执行

        2、解释性语言

                不需要编译,在运行使用解释器一边解释一遍运行

                shell的本质:命令解释器

                shell脚本的本质:shell命令的有序集合

        3、shell编程过程

                建议shell文件(一般是.sh为后缀)-->编写脚本文件-->赋予shell文件执行权限(chmod)-->执行shell脚本 ./xxx.sh  或者bash xxx.sh

                注:用解释器执行脚本可以不用修改权限,如bash 1.sh或sh 1.s

        4、shell变量
                定义变量

                                        (命名规则与c/c++一致)

                 变量名=字符串      (等号两边不能加空格)

                shell会认为变量里面保存的内容都是字符串

               引用变量

                        $变量名

                        eg: echo $var                --打印变量var

                  变量清空       

                                        --unset  删除变量的里面保存的值

                                VAR=" hello world"
                                echo $VAR
                                unset VAR#清空变量

                                echo $VAR

                  位置变量

$0与键入的命令行一样,包含脚本文件名
$1,$2,.…..$9 分别包含第一个到第九个命令行参数

$#包含命令行参数的个数   -->不包含脚本文件名
$ @包含所有命令行参数:“$1,$2,......$9"

$?包含前一个命令的退出状态
$*包含所有命令行参数:“$1,$2,.....$9"

$$包含正在执行进程的ID号


注:0是正确,非0为错(shell)

                  环境变量

HOME : /etc/passwd文件中列出的用户主目录
IFS : Internal Field Separator,默认为空格,tab及换行符PATH : shell搜索路径
PS1,PS2:默认提示符($及换行提示符(>)
TERM:终端类型,常用的有vt100,ansi,vt200,xterm等

        

export   var = "hello"                      --新建一个环境变量

        

将脚本交给当前bash执行        ./1.sh
在当前bash中新建一个bash来执行脚本文件        bash 1.sh

          各种引号的作业

                " " --双引号

                      " "当中可以识别变量的引用->能够识别特殊字符

                ' '--单引号

                        ' '当中可以识别变量的引用->不能够识剃特殊字符

                      ` ` --反引号

                        ` `将里面的命令执行结果保存起来

        5、shell功能语句

                      shell程序由零或多条shell语句构成。shell语句包括三类:说明性语句、功能性语句和结构性语句。

                说明性语句

                        以#号开始到该行结束,不被解释执行

                功能性语句

                        任意的shell命令、用户程序或其他的shell程序

                结构性语句

                        条件测试语句、多路分支语句、循环语句、循环控制语句等

        说明性语句(注释行)

                注释行可以出现在程序中的任何位置,既可以单独占用一行,也可以接在执行语句的后面.以#号开始到所在行的行尾部分,都不被解释执行。

        功能性语句

                read       

                        read var        --从标准输入读入一行,并赋值给后面的变量

        

                        read var1 var2 var3        --把读入行中的第一个单词(word)赋给var1,第二个单词赋给var2 ,....…把其余所有的词赋给最后一个变量。

        注:如果执行read语句时标准输入无数据,则程序在此停留等侯,直到数据的到来或被终止运行。

                expr        --算术运算命令

                        主要用于进行简单的整数运算,包括+(加)、-(减)、\*(乘)、/(整除)、%(求模)等

             

                test

                       可测试三种对象: 字符串   整数   文件属性

                                 字符串测试:

                                          test "$var1" = "hello"

                                                --变量var的值是否为字符串hello

                                        test $num -eq 18

                                                --变量num是否为整数

                                        test -d tmp

                                                --判断tmp是否为目录名

                                        test s1 = s2

                                                --测试两个字符串是否完全一样

                                        test s1 != s2

                                                --测试两个字符串的内容是否有差异

                                        test -z s1 

                                                --测试s1字符串的长度是否为0

                                        test -n s1

                                                --测试s1字符串的长度是否不为0

                                整数测试:

                                        test a -eq b                测试相等

                                        test a -ne b                测试不等

                                        test a -gt b                 测试大于

                                        test a -ge b                测试大于等于

                                        test a -lt b                  测试小于

                                        test a -le b                 测试小于等于

                               文件测试:

                                        -d name        测试name是否为一个目录
                                        -e name        测试一个文件是否存在
                                        -f name         测试name是否为普通文件
                                        -L name        测试name是否为符号链接
                                        -r name         测试name文件是否存在且为可读
                                        -w name       测试name文件是否存在且为可写
                                        -x name        测试name文件是否存在且为可执行
                                        -s name        测试name文件是否存在且其长度不为0
                                        f1 -nt f2         测试文件f和是否比文件f2更新
                                        f1 -ot f2         测试文件f是否比文件f2更旧

                        注:返回0则为真,返回非0则为假

        结构性语句

                条件语句        if...then...fi

                        语句结构:
                                if        表达式

                                        then        命令表

                                fi

                        注意:        if[空格 判断条件 空格]

                        如果表达式为真,则执行命令表中的命令;否则退出if语句,即执行fi后面的语句。
                        if和fi是条件语句的语句括号,必须成对使用;

                        命令表中的命令可以是一条,也可以是若干条。

        

                条件语句        if...then...else...fi

                                        语句结构:

                                                if        表达式

                                                then        命令表1

                                                else        命令表2

                                                fi

                                                如果表达式为真,则执行命令表1中的命令,再退出if语句;否则执行命令表2中的语句,再退出if语句.

                多分支:        if...then...elif...then...fi

                                    语句结构:

                                                if        表达式1

                                                then

                                                                命令表1

                                                elif        表达式2

                                                then 

                                                               命令表2

                                                fi

                多路分支语句        case...esac

                        语句结构:

                                case        字符串变量        in

                                        模式1)

                                                        命令表1

                                                        ;;

                                        模式2|模式3)

                                                        命令表2

                                                        ;;

                                        ......

                                        模式n)

                                                        命令表n

                                                        ;;

                                esac

               

                循环语句        for...do...done

                        格式:

                                for 变量名 in 单词表

                                        do

                                                命令表

                                        done

        ------------------------------------------------------------------------------------------------------------------

                注:变量依次取单词表中的各个单词,每取一次单词,就执行一次循环体中的命令。循环次数由单词表中的单词数确定,命令表中的命令可以是一条,也可以是由分号或换行符分并的多条。如果单词表是命令行上的所有位置参数时,可以在for语句中省略“in单词表”部分。


 

                循环语句        while...do...done

                        格式:

                        while        命令或表达式

                             do

                                        命令表

                             done

while语句首先测试其后的命令或表达式的值,如果为真,就执行一次循环体中的命令,然后再
测试该命令或表达式的值,执行循环体,直到该命令或表达式为假时退出循环。while语句的退出状态为命令表中被执行的最后一条命令的退出状态。
 

                break和continue

                        break n         --跳出n层

                        continue 语句则马上转到最近一层循环语句的下一轮循环上

                        continue n         则转到最近n层循环语句的下一轮循环上

        6、shell函数
                函数定义格式

         方式一:

function_name()

{

        command1

        ...

        commandn

}

        方式二:

function function_name()

{

        command1

        ...

        commandn

}

                函数调用

                方式1:

value_name= `function_name[arg1 arg2 ...]`

                方式2:

function_name [arg1 arg2 ...]

echo $?

                函数变量作用域

                                shell的函数里面定义的变量默认全局可用,要使其局部可用需要加locall

                全局作用域:在脚本的其他任何地方都能够访问该变量

                局部作用域:只能在声明变量的作用域内访问

                声明局部变量格式:

                                local variable_name = value

十三、gcc编译器
        1、gcc编译的过程

                预处理           --->预处理之后的文件后缀 .i

                编译               --->        .s               

               汇编                --->         .o(目标文件 二进制)

               链接                --->        a.out

                gcc -E 文件名.c        //(预处理)删除注释

                gcc -S 文件名.c        //(编译)进行语法检查,将预处理后的文件编译成汇编文件

                gcc -c 文件名.s        //(汇编)将汇编文件转为二进制文件文件

                gcc 文件名.o                  //(链接)将工程文件夹中所有目标文件链接在一起生产可执行程序

                gcc test.c        ---执行编译汇编链接所有操作,默认生产可执行文件名a.out

          gcc    -o     可执行文件名     编译文件.c                --可定义生成的可执行的文件文件名

                gcc -I 头文件路径 *.c        //告知头文件所在路径

                gcc -wall  打印文件中所有潜在的风险

        2、gdb调试流程

                首先使用gcc -g test.c进行编译,注意一定要加上选项‘-g'

                #gcc-g test.c -o test
                # gdb test
.

           查看文件查看原文件的内容(gdb) 1        --默认显示十行,按回车健继续显示
           设置点                        (gdb) b 6

           查看断点情况             (gdb) info b

           运行代码                    (gdb) r
   

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值