精华内容
参与话题
问答
  • Linux程序设计shell程序设计 看了《linux程序设计(第4版)》(作者:Neil Matthew ,Richard Stones ,陈建 ,宋健建译)。做笔记,以备后面查看。 首先,清楚几概念。 shell编程属于脚本编程,脚本文件...

    Linux程序设计之shell程序设计

      看了《linux程序设计(第4版)》(作者:Neil Matthew ,Richard Stones ,陈建 ,宋健建译)。做个笔记,以备后面查看。

      首先,清楚几个概念。

      shell编程属于脚本编程,脚本文件就是指令的集合,GCC是GNU编译系统驱动程序。

      Linux中的库分两种:静态库和共享库。静态库以.a结尾,也叫归档文件(archive),类似于windows中的.lib文件,他的缺点是同时运行的多个程序使用同个函数库函数时,内存中会有多个该函数及该程序文件的副本,浪费了内存。共享库以.so结尾,类似于windows中的.Dll文件。

      shell是对linux内核的一种封装,提供了一些函数的接口,shell程序设计就是利用这些函数接口进行编程。

      一般linux系统的shell装的是bash(Bourne Angain Shell),安装为/bin/sh,可以用$/bin/bash --version命令查看bash版本号:

    重定向

      重定向有重定向输入和重定向输出,似乎重定向输出用的比较多,可以将默认输出到屏幕上的内容重定向输出到一个文档中,eg:

    也可以用>>将内容追加的重定向到已有的文件中,eg:

    重定向输入使用<符号

    管道

    管道的作用是可以让进程进行通信,这样一个进程的结果就可以作为另一个进程的操作对象,比如说想对ps列出的进程列表进行sort排序,然后分屏输出,就可以使用命令:ps | sort  more

    通配符

    通配符可以匹配字符串、单个字符等

    *:表示任意字符串

    ?:表示任意单个字符

    []:[]中可以添加任意的字符

    [^ ]:表示不匹配[]里面的字符

    {}:中添加的是字符串

    创建脚本

    可以使用vim编辑脚本文件,使用bash的话脚本文件的首行是:#!/bin/sh 声明语句。

    linux中的变量不用声明类型,系统默认是字符串型,当时数值时,系统会自动转变类型,使用“$”+变量名,可以访问变量内容。要想输出空格,要用“”括起来,否则空格会被会略。

    可以使用read操作将命令行下用户输入的内容赋值给指定的变量。

    “”    ‘’  \  对变量操作的区别:

    “$变量名”输出的是变量的内容,

    ‘$变量名’    \$变量名输出的是变量名本身,也就是说他们两个去掉了$的作用。

    注意创建完脚本文件后需要把该文件的执行权限加上,命令为:chmod +x  文件名

    在环境变量中,IFS表示输入域分隔符,用户可以将空格、制表符、换行符赋值给他,然后当shell读取输入时就可以安装IFS的值分隔单词,eg:

    可以看出“$@”是不受IFS影响的,"$*"则受IFS影响。

    布尔命令:test或者[]

    条件语句后面跟的条件可以放在test或者[]中

    模板为:if test 条件                        if [  条件 ]  要注意[]和条件语句之间要有空格隔开,并且等号左右都要有空格

        then                                then

          执行语句                               执行语句

        fi                                       fi

    比较的条件可以有字符串、算术、文件相关测试,一下三个表都来自于《linux程序设计(第4版)》

    if语句

    每组if语句都要使用fi做结束标志,eg:

    if 条件                        if 条件1

    then                            then

      语句1                          语句1

    else                         elif 条件2

      语句2                      then    

                                  语句2

    fi                          else

                                    语句3

                               fi

    for语句

    for语句一般针对于字符串

    模板: for 变量名 in 值的范围(一般为字符串)

        do 

          语句

       done

     

    while语句和until语句

    while和until语句的区别是:

    while语句至少执行一次,而until语句则不一定;while是条件为真时执行循环体,until是当条件不成立时执行循环体(如果判断某个用户登录的话用until语句比较合理)

    模板:while(until)条件

       do

          语句

       done

    case语句

    case语句的每个条件成立后执行语句体结束时一定要记得用两个;;表示结束,用esac表示case语句的结束

    模板:case 变量名 in

       值1) 语句体1

          语句体2;;

       值2) 语句体3;;

        ······

    esac

    exit 0

     

    判断条件的连接可以用AND:&&或者是OR:||,用法和c语言是一样的。

    函数:

    函数不用声明返回值类型,直接可以用:

      函数名(){

    }

    来定义函数体。

    如果函数需要操作从命令行输入的变量时,在函数体中可以用“$*”来指代该参数。

    其中调用函数时Child 后的$1表示脚本程序的参数,判断的是该函数的返回值

    冒号:表示的是空命令,while true就等价于while :

    转载自:https://www.cnblogs.com/jiangcsu/p/5776575.html

    展开全文
  • 和其他高级程序设计语言一样,shell提供了用来控制程序执行流程的命令,包括条件分支和循环结构,用户可以用这些命令建立非常复杂的程序。  与传统的语言不同的是,shell用于指定条件值的不是布尔表达式而是命令和...
     和其他高级程序设计语言一样,shell提供了用来控制程序执行流程的命令,包括条件分支和循环结构,用户可以用这些命令建立非常复杂的程序。
    
      与传统的语言不同的是,shell用于指定条件值的不是布尔表达式而是命令和字符串。
      1.test、[]、[[ ]]测试命令
      test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试,其测试符和相应的功能分别如下:
      (1)数值测试:
      -eq:等于则为真
      -ne:不等于则为真
      -gt:大于则为真
      -ge:大于等于则为真
      -lt:小于则为真
      -le:小于等于则为真
      (2)字符串测试:
      =:等于则为真
      !=:不相等则为真
      -z字符串:字符串长度伪则为真
      -n字符串:字符串长度不伪则为真
      (3)文件测试:
      -e文件名:如果文件存在则为真
      -r文件名:如果文件存在且可读则为真
      -w文件名:如果文件存在且可写则为真
      -x文件名:如果文件存在且可执行则为真
      -s文件名:如果文件存在且至少有一个字符则为真
      -d文件名:如果文件存在且为目录则为真
      -f文件名:如果文件存在且为普通文件则为真
      -c文件名:如果文件存在且为字符型特殊文件则为真
      -b文件名:如果文件存在且为块特殊文件则为真
      另外,Linux还提供了与(“!”)、或(“-o)、非(“-a”)三个逻辑操作符用于将测试条件连接起来,其优先级为:“!”最高,“-a”次之,“-o”最低。
      同时,bash也能完成简单的算术运算,格式如下:
      $[expression]
      例如:var1=2
      var2=$[var1*10+1]
      则:var2的值为21。
      2.if条件判断语句
      shell程序中的条件分支是通过if条件语句来实现的,其一般格式为:
      if条件命令串
      then
      条件为真时的命令串
      else
      条件为假时的命令串
      fi
    单分支:if...then...fi
    双分支:if...then...else...fi
    多分支:if...then...elif...then...else...fi
       3.case条件判断语句(与if多分支一样)
      格式:
    case 变量名 in
            模式1)
            命令序列1
             ;;
            模式2)
            命令序列2
             ;;
             *)
            命令序列3
             ;;
            esac
       实例:read -p "input a character:" value
             case $value in
            [a-z]|[A-Z])
             then
             echo "you input a letter"
             ;;
            [0-9])
             then
             echo "you input a digit"
             ;;
             *)
             echo "you input a special letter"
             ;;
            esac
      3.for循环
      for循环对一个变量的可能的值都执行一个命令序列。赋给变量的几个数值既可以在程序内以数值列表的形式提供,也可以在程序以外以位置参数的形式提供。for循环的一般格式为:
      for变量名
      [in数值列表]
      do
      若干个命令行
      done
      变量名可以是用户选择的任何字符串,如果变量名是var,则在in之后给出的数值将顺序替换循环命令列表中的$var。如果省略了in,则变量var的取值将是位置参数。对变量的每一个可能的赋值都将执行do和done之间的命令列表。
      4.while和until循环
      while和until命令都是用命令的返回状态值来控制循环的。While循环的一般格式为:
      while [条件命令测试]
      do
      若干个命令行
      done
      只要while的“条件命令测试”中最后一个命令的返回状态为真,while循环就继续执行do...done之间的“若干个命令行”。
    实例1:#! /bin/bash
         declare -i num=0
         while (( $num<10 ))
         do
         echo "$num"
    实例2:#!/bin/bash
          echo "where xia come from?"
          read answer
          while [[ "$answer != "china" ]]
          do
            echo "wrong, try again!"
          read answer
          done
          echo "you got it!"
      until命令是另一种循环结构,它和while命令相似,其格式如下:
      until
      若干个命令行1
      do
      若干个命令行2
      done
      until循环和while循环的区别在于:while循环在条件为时继续执行循环,而until则是在条件为时继续执行循环。
      Shell还提供了true和false两条命令用于建立无限循环结构的需要,它们的返回状态分别是总为0或总为非0
      
      6.无条件控制语句break和continue(循环控制语句)
      break:用于立即终止当前循环的执行,
    实例:验证用户输入的密码是否为123321,如果输入正确则退出循环,程序往下继续运行,否则一直提示用户输入正确的密码。、
         #!/bin/bash
         while true
         do
            echo "input your passwd"
            read passwd
         if  [[$passwd == 123321]]
            then
            break
            else
            echo "passwd error"
         fi
         done
            echo "welcome"
        contiune:用于不执行循环中后面的语句而立即开始下一个循环的执行。 这两个语句只有放在do和done之间才有效.
    实例:name从good1,good2,bad,good3中依次取值,当取值为bad时,使用continue跳出本次循环,程序跳至循环语句的顶部重新测试条件
         #!/bin/bash
          for name in good1 good2 bad good3
          do
            if [[ $name == bad ]]
           then
           continue
           else
           echo "hello $name"
          fi
          done
      7.函数定义
      在shell中还可以定义函数。函数实际上也是由若干条shell命令组成的,因此它与shell程序形式上是相似的,不同的是它不是一个单独的进程,而是shell程序的一部分。函数定义的基本格式为:
      functionname
      {
      若干命令行
      }
      调用函数的格式为:
      functionname param1 param2……
      shell函数可以完成某些例行的工作,而且还可以有自己的退出状态,因此函数也可以作为if、while等控制结构的条件。
      在函数定义时不用带参数说明,但在调用函数时可以带有参数,此时shell将把这些参数分别赋予相应的位置参数$1、$2、...及$*。
      8.命令分组
      在shell中有两种命令分组的方法:“()”和“{}”,前者当shell执行()中的命令时将再创建一个新的子进程,然后这个子进程去执行圆括弧中的命令。当用户在执行某个命令时不想让命令运行时对状态集合(如位置参数、环境变量、当前工作目录等)的改变影响到下面语句的执行时,就应该把这些命令放在圆括弧中,这样就能保证所有的改变只对子进程产生影响,而父进程不受任何干扰;{}用于将顺序执行的命令的输出结果用于另一个命令的输入(管道方式)。当我们要真正使用圆括弧和花括弧时(如计算表达式的优先级),则需要在其前面加上转义符(\)以便让shell知道它们不是用于命令执行的控制所用。
      9.信号
      trap命令用于在shell程序中捕捉到信号,之后可以有三种反应方式:
      (1)执行一段程序来处理这一信号
      (2)接受信号的默认操作
      (3)忽视这一信号
      trap对上面三种方式提供了三种基本形式:
      第一种形式的trap命令在shell接收到signal list清单中数值相同的信号时,将执行双引号中的命令串。
      trap 'commands' signal-list
      trap "commands" signal-list
      为了恢复信号的默认操作,使用第二种形式的trap命令:
      trap signal-list
      第三种形式的trap命令允许忽视信号:
      trap " " signal-list
      注意:
      (1)对信号11(段违例)不能捕捉,因为shell本身需要捕捉该信号去进行内存的转储。
      (2)在trap中可以定义对信号0的处理(实际上没有这个信号),shell程序在其终止(如执行exit语句)时发出该信号。
      (3)在捕捉到signal-list中指定的信号并执行完相应的命令之后,如果这些命令没有将shell程序终止的话,shell程序将继续执行收到信号时所执行的命令后面的命令,这样将很容易导致shell程序无法终止。
      另外,在trap语句中,单引号和双引号是不同的,当shell程序第一次碰到trap语句时,将把commands中的命令扫描一遍。此时若commands是用单引号括起来的话,那么shell不会对commands中的变量和命令进行替换,否则commands中的变量和命令将用当时具体的值来替换。
    展开全文
  • Shell脚本的基本语法 :变量、I/O、算术运算、条件判断、流程控制、函数


    变量

    环境变量

    环境变量用于初始化shell的启动环境,是系统定义的变量。

    常用的环境变量有下面几种
    在这里插入图片描述
    可以使用env命令来查看所有的环境变量,也可以直接echo查看某个环境变量的值

    位置变量

    我们可以使用shift命令来将参数左移,语法如下

    shift 表示移动的位数 
    

    每次左移一位

    #!/bin/bash
    
    echo $@
    shift 1
    echo $@
    shift 1
    echo $@
    shift 1
    echo $@
    

    在这里插入图片描述

    特殊变量

    $n :表示输入的第n个参数,当超过十的时候需要用大括号括起来,如${10}
    $# :获取输入参数的个数
    $? :获取上一条命令的执行状态,如果为0则说明执行成功,为1则说明执行失败。当然也可以用于获取函数返回值
    $$ :获取当前进程的pid
    $@ :代表当前命令行中所有的参数,不过它会把每个参数区分对待
    $* :代表当前命令行中所有的参数,不过它会把所有参数当成一个整体

    自定义变量

    定义变量的方式很简单,只需要给它赋值进行,并且不需要指明类型

    变量名=

    当需要删除变量的时候,可以使用unset命令

    unset 变量名
    

    如果想要声明常量,可以使用readonly关键字,但是需要注意,常量不可被unset

    readonly 变量名
    

    我们还可以通过export命令将局部变量升级为环境变量

    export 变量名
    

    注意事项

    • 等号两边不能有空格
    • 如果变量名中存在空格时需要以单引号或者双引号括起来,否则会被当成命令
    • bash中变量会被默认视为字符串类型,无法直接进行算数运算

    数组

    定义数组

    数组名=( 元素1 元素2 元素3 ...... )
    # 元素前后以空格为间隔
    

    显示数组的所有元素

    echo ${数组名[@]}
    

    显示数组的元素个数

    echo ${#数组名[@]}
    

    显示数组的第i个元素

    echo ${数组名[i]}
    

    例如
    将参数作为数组元素,查看数组中的内容

    #!/bin/bash
    
    arr=( $@ )
    
    echo ${arr[@]}
    echo ${#arr[@]}
    echo ${arr[5]}
    

    在这里插入图片描述


    I/O

    printf / echo

    shell中的输出命令有printf和echo两种,printf是从C语言中模仿而来,所以它可以指定类型、对其方式等属性。

    echo 输出
    printf 输出
    

    同时echo输出时会自带换行,而printf则需要自己手动加入\n

    read

    read用于从终端获取输入
    语法如下

    read (选项)(参数)
    -p:指定读取值时的提示符;
    -t:指定读取值时等待的时间(秒)。
    

    实例:从终端获取一个值并输出

    #!/bin/bash
    
    read -p "请输入参数:" str
    echo $str
    

    在这里插入图片描述


    算术运算

    shell中存在两种算术运算的命令,分别是let和expr

    let

    let的语法如下

    let 变量名=let 变量名=变量名+值
    

    需要注意的是,当有变量加入运算的时候不需要在变量前面加$
    通常为了简便,我们也会使用两个圆括号let

    ((算术式))	# 不需要空格
    

    我们通常以以下两种方式来获取计算结果

    $((运算式)) 或 $[运算式]
    

    expr

    expr用来计算表达式,每一个运算符之间要有空格,并且当有变量加入时需要加上$

    expr  + , - , \*,  /,  %   
    

    条件判断

    test

    在shell中我们通常利用test来进行条件判断,当结果为真时返回0,失败时返回1

    语法如下:

    test 判断内容
    

    不过我们通常都会以方括号的形式进行简写,如下

    [ 判断条件 ] # 需要注意的是条件前后需要有空格
    

    常用判断条件

    1. 判空

    -n :非空(nonzero)
    -z :为空(zero)

    1. 字符串之间比较

    = :字符串相同           != :字符串不同

    1. 整数之间比较

    -eq :等于(equal)               -ne :不等于(Not equal)
    -lt :小于(less than)            -le :小于等于(less equal)
    -gt :大于(greater than)      -ge :大于等于(greater equal)

    1. 判断文件权限

    -r :有读的权限(read)
    -w :有写的权限(write)
    -x :有执行的权限(execute)

    1. 判断文件类型

    -f :文件存在并且是一个常规的文件(file)
    -e :文件存在(existence)
    -d :文件存在并是一个目录(directory)


    流程控制

    if

    if用于进行逻辑判断,语法格式如下

    if test 条件 # 或者使用[ 条件 ]
    	then 
    	# 执行的命令
    elif test 条件	# 进行其他的分支判断
    	then 
    	# 执行的命令
    else	# 剩余的情况
    	# 执行的命令
    fi
    

    例如判断输入的数字是否大于十

    #!/bin/bash
    
    a=$1
    
    if [ $a -lt 10 ]
        then 
        echo "less than 10"
    elif [ $a -gt 10 ]
        then 
        echo "greater than 10"
    else
        echo "equal than 10"
    fi
    

    在这里插入图片描述


    case

    case用于进行分支选择,语法格式如下

    case $变量名 in
        "值A")
        # 执行分支A
        ;;
        "值B")
        # 执行分支B
        ;;
        "值C")
        # 执行执行分支C
        ;;
        *)
        # 如果不为以上值,则执行缺省分支
        ;;
    esac
    

    注意事项

    • case行必须以in结尾,每个值必须要用双引号包含,并以右括号结束
    • ;;代表分支的结束,类似于C中的break
    • *)代表缺省模式,类似于C中的default

    例如以下使用情况

    #!/bin/bash
    
    a=$1
    case $a in
        "1")
        echo "11111111111"
        ;;
        "2")
        echo "22222222222"
        ;;
        "3")
        echo "33333333333"
        ;;
        *)
        echo "default"
        ;;
    esac
    

    在这里插入图片描述


    shell中的循环控制主要有for,while,until三种

    for

    shell中的for循环有两种语法,一种是我们传统的C语言for,另一种则类似C++中的范围for

    # 语法1
    for ((初始值; 循环条件; 变量变化))
        do
            # 执行命令
        done
    
    # 语法2
    for 变量 in 数组或者区间
        do
            # 执行命令
        done
    

    分别进行演示

    计算1到100的累加和

    #!/bin/bash
    
    i=0
    sum=0
    for ((i=0; i<=100; i++))
        do
            sum=$[$sum+$i]
        done
    
    echo $sum
    

    在这里插入图片描述
    计算输入的参数之和

    #!/bin/bash
    
    sum=0
    for i in $@
        do
            sum=$[$sum+$i]
        done
    
    echo $sum
    

    在这里插入图片描述


    while

    while的逻辑是当判断条件为真时执行循环

    语法如下

    #!/bin/bash
    
    while [ 判断条件为真则执行 ]
        do
        # 执行命令
        done
    

    until

    until与while刚好相反,如果判断条件为假,则until继续执行

    语法如下

    #!/bin/bash
    
    until [ 判断条件为假则执行 ]
        do
        # 执行命令
        done
    

    函数

    系统函数

    系统自建的函数库在路径 /etc/init.d/functions
    常用的主要有basenamedirname两种,用于解析文件的路径

    basename通常用于获取文件名,它会找到最后一个/的位置,并删除前面所有字符

    basename 文件路径 [可选: 删除的字符]
    

    例如
    在这里插入图片描述

    dirname主要用于获取路径名,它会去掉文件名,然后返回剩余的部分

    dirname 文件路径
    

    在这里插入图片描述

    自定义函数

    shell中也允许自定义函数,语法如下

    function 函数名() #括号中不能填任何东西
    {
    	# 执行命令
    	# 返回值
    }
    

    注意事项

    • 括号中不能填任何参数,传参可以直接通过 $变量名的形式传递,返回值可以使用特殊变量 $? 获取。如果没有声明返回值,则以函数最后一条命令的结果作为返回值
    • shell脚本是逐行运行的,所以必须先声明函数才能调用

    获取两个数相加的结果

    function add()
    {
        echo $[$1+$2]
    }
    
    read -p "请输入参数A: " a
    read -p "请输入参数B: " b
    
    add $a $b
    

    在这里插入图片描述

    展开全文
  • Shell函数定义和使用

    万次阅读 2017-09-02 16:28:01
    和其他语言一样,在Shell语言中也有着函数。尽管在Shell中函数并非是必须的编程元素,但是通过使用...函数的定义在Shell中可以通过下面的两种语法来定义函数,分别如下:function_name () { statement1 statement2 .

    和其他语言一样,在Shell语言中也有着函数。尽管在Shell中函数并非是必须的编程元素,但是通过使用函数,可以对程序进行更加好的组织。将一些相对独立的代码变成函数,可以提高程序的可读性和重用性。避免重复编写大量相同的代码。

    函数的定义

    在Shell中可以通过下面的两种语法来定义函数,分别如下:

    function_name ()
    {
        statement1
        statement2
        ....
        statementn
    }

    或者

    function function_name()
    {
       statement1
       statement2
       ....
       statementn
    }
    

    函数的调用

    当某个函数定义好了以后,用户就可以通过函数名来调用该函数了。在Shell中,函数调用的基本语法如下,

    function_name parm1 parm2

    下面定义了一个 sayhell()的方法,并调用

    #! /bin/bash
    function sayhello()
    {
      echo "Hello,World"
    }
    sayhello
    

    代码调用结果

    [root@VM_156_149_centos shell]# sh hello.sh 
    Hello,World

    函数的返回值

    首先,用户利用return来返回某个数值,这个与绝大部分的程序设计语言是相同的。但是 在Shell中,return语句只能返回某个0-255之间的整数值。在Shell中还有一种更优雅的方法帮助用户来获得函数执行后的某个结果,那就是使用echo。在函数中,用户需要将要返回的数据写入到标准输出(stout),通常这个操作是使用echo语句来完成的,然后在调用程序中将函数的执行结果赋值给一个变量。这种做法实际上就是一个命令替换的一个变种。

    函数使用return返回值

    函数的定义

    #! /bin/bash
    
    function sum()
    {
      returnValue=$(( $1 + $2 ))
      return $returnValue
    }
    
    sum 22 4
    
    echo $?
    

    函数的调用

    [root@VM_156_149_centos shell]# sh sum.sh 
    26
    

    函数返回值大于0-255,出错的情况

    在上面的执行结果可以看到,所传递的两个数的和被成功的返回。但是通过return只能返回整数值,并且是0-255的范围,如果超出这个范围就会错误的结果。例如将上面的代码换成下面的参数

    sum 253 4

    则执行结果如下,

    [root@VM_156_149_centos shell]# sh sum.sh 
    1

    可以发现,正确的结果应该是257,但是函数的返回值是1.

    函数使用echo返回值

    函数的定义

    #! /bin/bash
    
    function length()
    {
      str=$1
      result=0
      if [ "$str" != "" ] ; then
          result=${#str}
      fi
      echo "$result"
    }
    
    len=$(length "abc123")
    
    echo "The string's length is $len "
    

    函数的调用

    [root@VM_156_149_centos shell]# sh length.sh  
    The string's length is 6 
    
    展开全文
  • 回调函数

    千次阅读 多人点赞 2019-09-09 17:36:28
    回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数回调函数不是由该函数的实现方直接调用,而是在特定...
  • 理解和使用 JavaScript 中的回调函数

    万次阅读 多人点赞 2014-11-25 01:20:46
    原文:http://javascriptissexy.com/在JavaScrip中,function是内置...因为function实际上是一种对象,它可以“存储在变量中,通过参数传递给(别一个)函数(function),在函数内部创建,从函数中返回结果值”。因为func
  • 深入理解:回调函数

    万次阅读 多人点赞 2019-06-21 15:36:09
    关于回调函数到底是什么,已经困扰了我很久了~ 在知乎上看到几位大神的帖子,才恍然大悟 作者:no.body 链接:https://www.zhihu.com/question/19801131/answer/27459821 来源:知乎 作者:常溪玲 链接...
  • C++回调函数使用心得

    万次阅读 多人点赞 2018-11-11 15:23:52
    关于C++回调函数的介绍网上有很多,要知道它的概念很容易,难的是灵活应用,这里就笔者遇到的一个使用场景对回调函数进行一个简单的介绍,如果能对您有所帮助是我的荣幸。本文不会对C++回调函数的基础知识做过多的...
  • 通俗理解“回调函数

    万次阅读 多人点赞 2018-06-24 20:42:26
    我们先来看看回调的英文定义:A callback is a function that is passed as an argument to ...字面上的理解,回调函数就是一个参数,将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,再执行传进去的...
  • C语言中函数指针和回调函数的详解

    万次阅读 多人点赞 2019-05-18 23:10:01
    如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的...
  • JS回调函数——简单易懂有实例

    万次阅读 多人点赞 2018-05-11 17:33:02
    初学js的时候,被回调函数搞得很晕,现在回过头来总结一下什么是回调函数。什么是JS?(点击查看) 下面先看看标准的解释: <script language="javascript"> 02 function SortNumber( obj, func ) // ...
  • 那么,回调函数什么鬼呢?它和函数到底有何异同?既然已经有了函数,为啥还非要生出个回调函数来?想必,小伙伴们在刚碰到这概念的时候,都会被这些问题困扰。网上搜搜,有很多相关的材料,但是未必透彻。我...
  • Java/Android中的函数调用&回调函数&自定义回调函数

    万次阅读 多人点赞 2015-10-23 12:47:01
    所谓的回调函数就是:在A类中定义一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用...
  • C++ 回调函数理解

    万次阅读 2015-12-18 13:49:55
    编程中肯定会遇到在C++中使用回调函数的情况。 但是为什么要使用回调函数...如果想知道回调函数在实际中有什么作用,先假设有这样一种情况,我们要编写一个库,它提供了某些排序算法的实现,如冒泡排序、快速排序、shel
  • 关于什么是回调函数,在如下的知乎帖子上有许多的讨论。个人觉得有讨论得絮烦无比的,也有故作高深的,看官自度即可。  [ 什么是回调函数 ]传送门: https://www.zhihu.com/question/19801131 [ 大写的PS...
  • js 彻底理解回调函数

    万次阅读 多人点赞 2017-02-10 13:53:58
    、前奏在谈回调函数之前,先看下下面两段代码: 不妨猜测一下代码的结果。function say (value) { alert(value); } alert(say); alert(say('hi js.'));如果你测试了,就会发现:只写变量名 say 返回的将会是 say...
  • 回调函数原理

    千次阅读 2015-07-16 11:09:23
    回调种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即...
  • 深入浅出剖析C语言函数指针与回调函数()

    万次阅读 多人点赞 2017-03-24 00:19:41
    百度的权威解释如下:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数回调函数不是由该函数的实...
  • 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数回调函数不是由该函数的实现方直接调用,而是在特定的...
  • 【C++笔记】回调函数

    万次阅读 多人点赞 2018-08-16 15:24:37
    http://www.cnblogs.com/ioleon13/archive/2010/03/02/1676621.html ... 原文如下 /*-----------------------------------------------------------------------...
  • 一、如何在一个callback回调函数中调用另一个回调函数   网上找了好多帖子,都是在答非所问,我最终失去了耐心,自己去写个小demo碰碰运气吧,然后非常幸运,我解决了,哈哈,看下面的小案例。 图形界面非常简单,...
  • Linux C 函数指针应用---回调函数

    千次阅读 2015-12-21 18:08:11
     我们先来回顾一下函数指针,函数指针是专门用来存放函数地址的指针,函数地址是一个函数的入口地址,函数名代表了函数的入口地址。当一个函数指针指向了一个函数,就可以通过这个指针来调用该函数,可以将函数作为...
  • 回调函数原理以及自定义回调函数

    万次阅读 2009-03-02 16:32:00
    回调函数原理声明CALLBACK 调用(calling)机制从汇编时代起已经大量使用:准备段现成的代码,调用者可以随时跳转至此段代码的起始地址,执行完后再返回跳转时的后续地址。CPU为此准备了现成的调用指令,调用时可以...
  • 回调函数 初识

    千次阅读 2016-05-07 11:10:19
    回调函数可以把调用者与被调用者分开,所以调用者不关心谁是被调用者。...简而言之,回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。
  • c++回调函数/ROS回调函数

    千次阅读 多人点赞 2018-01-09 10:15:58
    以下均是个人在实际耕码的过程中遇到的问题和整理的结果,可能会有不对的地方,望各位指正与交流 -------------------------------------------------我会有...c++中的回调函数: A "callback" is any function th...
  • 回调函数详解

    千次阅读 2018-12-04 19:26:53
      回调函数是指 使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人(或...
  • 回调函数的作用

    千次阅读 2017-03-12 09:02:09
    回调函数的作用 原文地址:http://wmnmtm.blog.163.com/blog/static/3824571420105484116877/ 一直不太理解回调函数的作用,下面是找到的一些关于回调函数的作用的解答。...2.回调函数就相当于一个中断处
  • 在C++编程,尤其时写Qt程序时,需要大量使用回调函数,在网上也有很多大牛对回调函数的使用进行了讲解,但是很多都是针对某一个或者两个特定的类型的。我在这篇文章中对网上关于回调函数的使用进行了归纳总结,并且...

空空如也

1 2 3 4 5 ... 20
收藏数 795,408
精华内容 318,163
关键字:

定义函数 设计一个shell程序