zoukankan      html  css  js  c++  java
  • 常用工具Makefile,GDB和Shell

    1.Makefile

      功能:make命令运行时需要Makefile文件,告诉make命令需怎样编译和链接程序。

      内容:具体规则,隐含规则,定义变量,指令,注释。

      基本格式:target(目标):dependency(依赖)

                     (tab键)command(命令)

      例:hello:hello.c

                  gcc hello.o -o hello

    伪目标: .PHONY

    2.GDB调试工具

      被调试的应用程序在编译时最好使用-g参数将调试信息编入目标文件中:

      gcc -g 文件.c -o 文件

      启动调试: gdb 文件

      若程序调试时需要参数: gdb --args arg1 arg2 (arg1,arg2视为程序的参数)

    命令 简写 功能
    list l 列出源码
    break b 设置断点
    run r 从头开始运行程序
    continue c 从停止除继续运行程序
    next n 向前执行一句(不进入被调用函数中)
    step s 向前执行一句(可进入被调用函数中)
    return ret 从当前函数返回
    print p 显示变量或表达式的值
    x x 显示内存值
    backtrace bt 显示调用栈
    quit q 退出gdb
    symbol-file sy 从可执行文件中加载符号表

    3.Shell使用基础

      开头格式:#!/bin/bash

      脚本后缀.sh

      执行脚本前需先将脚本改为可执行:chmod 数字代号 文件

      然后执行脚本:./文件

      或直接执行脚本:sh 文件

      echo " "           输出

      echo " " >x      创建x文件并输出到x(覆盖)

      echo " " >>x    创建x文件并输出到x(添加)

      echo $*           输出全部参数

      echo $#          输出了n个参数

      echo $n          输出第n个参数

    一些参数:

                -f 存在且是普通文件
                -d 存在且是目录
                -s 存在且字节数大于0
                -r 存在且可读
                -w 存在且可写
                -x 存在且可执行

                =: 等于则为真
                !=:不相等则为真
                -z字符串:字符串长度为零则为真
                -n字符串:字符串长度不为零则为真

                -lt 小于
                -le小于等于
                -gt  大于
                -ge 大于等于
                -eq 等于
                -ne 不等于

      if语句:

                构造:if [  ] ;

                        then

                        else

                        fi

                例:测试目录shell和文件123是否存在

                     #!/bin/bash

                     DIR="/home/shell"

                     FILE="/home/123"

                     if [ -d ${DIR} ] ;

                     then echo "exist"

                     fi

                     if [ -f ${FILE} ] ;

                     then echo "unexist"

                     fi

      case语句:

               构造:case "$#" in

                           0) echo "输入了0个参数";;

                           1) echo "输入了1个参数";;

                           *) echo "输入了多个参数";;

                       esac

               例:输入一个参数,若在A-Z,a-z,1-9之间则分别发出不同的信号

                   #!/bin/bash

                   read key

                   case ${key} in

                       [A-Z] ) echo "UpperLetter"

                       [a-z] ) echo "LowerLetter"

                       [1-9] ) echo "Number"

                       * ) echo "Unkown"

                   esac

      for语句:

               构造:for variable_name in <list_of_values>
                       do
                           ...
                       done   

               例:输入三个参数,分别创建以三个参数命名的文件夹并在对应文件夹里创建.txt文件

                    #!/bin/bash

                    for dir in $1 $2 $3

                    do

                        mkdir ${dir}

                        cd ${dir}

                        touch ${dir}.txt

                        echo "hello ${dir}">${dir}.txt

                        cd ..

                    done

      while语句:

              构造:while <条件>
                      do
                          <命令(s)>
                      done

              例:求1-100的和

                   #!/bin/bash

                   i=1

                   sum=0

                   while [ $i -le 100 ]

                   do

                       sum=$[$sum+$i]

                       i=$[$i+1]

                   done

                   echo $sum

     

  • 相关阅读:
    C#——Unity事件监听器
    关于RAS加解密的工具类
    关于Map的源码分析之HashMap
    关于Map的源码分析
    关于Set的源码分析
    关于集合List的源码分析
    关于String源码分析
    hdu 1285 确定比赛名次
    hdu 2553 N皇后问题
    hdu 1312 Red and Black
  • 原文地址:https://www.cnblogs.com/kutoli/p/7806083.html
Copyright © 2011-2022 走看看