精华内容
下载资源
问答
  • Shell函数

    2015-08-11 21:11:03
    Shell函数不同于“wildcard”之外的其他函数。函数shell所实现的功能和shell中的引用(‘’)相同,实现对命令的扩展,这就意味着需要一个shell命令作为此函数的参数,函数返回值是此命令在shell中的执行结果。 ...
    Shell函数不同于“wildcard”之外的其他函数。函数shell所实现的功能和shell中的引用(‘’)相同,实现对命令的扩展,这就意味着需要一个shell命令作为此函数的参数,函数返回值是此命令在shell中的执行结果。
    
    下面来说一下常用的shell命令:
    Basename:从路径中分离出文件名
    Cat:文本文件显示命令
    Compress:用来压缩文件,压缩后的文件名具有.z后缀,还可以用这个命令解压文件。
    Cp:将一个文件复制到另一个文件,或者讲述个文件复制到另一个目录(全部覆盖)
    Diff:比较文本文件或内容中的不同,他将显示两个文件中不一致的行
    Dircmp:比较并显示两个目录中的不同
    Dirname:这与basename相反,它返回路径部分
    Du:概述磁盘使用情况 –a显示每个文件大小 –s只显示总计
    File:用来确定文件类型。
    Fuser:显示访问某个文件或文件系统的所有进程。
    Head:可以显示相应文件的前十行。如果希望指定显示的行数,可用-number选项 $head -1 myfile \
    Logname:可以显示当前所使用的登陆用户名:$logname
    Mkdir:创建一个新的子目录,子目录的路径名作为参数。
    More:该命令和page及pg命令的功能类似,能够分屏显示文件内容。
    nl:用来计算文件中行号,可以将文件输出的内容自动加上行号。
    Printf:该命令有点类似于awk命令的printf函数,它将格式化文本送至标准输出。
    Pwd:显示当前的工作目录。
    rm:删除文件及目录。
    Rmdir:删除空目录。
    Script:script option file可以记录当前会话,该命令在你会话结束时,它可以将你的输入及记录下来并附加到文件末尾。
    Shutdown:将关闭系统, shutdown –g60 –I6 –y 上面的命令将会在60秒后关机,然后重新启动系统。
    Sleep:意味着系统在10秒内不进行任何操作。
    Strings:可以看二进制文件中包含的文本
    Touch: touch options filename –t 创建一个具有相应月,日,时分时间戳的文件。
    tty:来报告所连接的设备或终端。
    Uname:显示系统信息 –a显示所有信息 –s系统名 –v只显示操作系统版本或者发布日期
    Uncompress: umcompress files可以用该命令来恢复压缩文件
    Wait :wait process id该命令可以用来等待进程号为 process id的进程或者所有的后台进程结束后,再执行当前脚本。
    Wc:wc options files  -c:显示字符数 –l:显示行数 –w:显示菜单数 该命令统计文件中的字符数,单词数和行数、
    Whereis: 格式:whereis  command_name  whereis命令能够给出系统命令的二进制文件及其在线手册的路径。
    Who options: -a 显示所有结果。 -r显示当前的运行级别(在linux系统中应当使用runlevel命令)。
    -s列出用户名及时间域。
    注意,who可以显示当前系统有哪些用户登录到系统上
    Whoami显示执行该命令的用户名。
    展开全文
  • shell函数

    千次阅读 2009-07-22 09:16:00
    函数由两部分组成:函数标题函数体标题是函数名.函数体是函数内的命令集合.标题名应该唯一;如果不是,将会混淆结果,因为脚本在查看调用脚本前将首先搜索函数调用响应的shell.格式:函数名 (){命令1...}或者函数名() {...

    shell允许将一组命令集或语句形成一个可用块,这些块称为shell 函数.
    函数由两部分组成:
    函数标题
    函数体
    标题是函数名.函数体是函数内的命令集合.标题名应该唯一;如果不是,将会混淆结果,因为脚本在查看调用脚本前将首先搜索函数调用响应的shell.
    格式:
    函数名 ()
    {
    命令1
    ...
    }
    或者
    函数名() {
    命令1
    ...
    }
    两种方式都可行.如果愿意,可在函数名前加上关键字function,这取决于使用者需求.
    function 函数名 ()
    { ...
    }
    19.1 在脚本中定义函数
    以下是一个简单函数
    hello ()
    {
    echo "Hello there today's date is `date`"
    }
    19.2 在脚本中使用函数
    $ vi func1.sh
    #!/bin/bash
    hello ()
    {
    echo "hello there today's date is `date`"
    }
    hello
    运行脚本:
    $ sh func1.sh
    Hello there today's date is Tue Sep 11 11:41:21 CST 2007
    19.3 向函数传递参数
    函数里调用参数(变量)的转换以下划线开始,后加变量名,如: _FILENAME或_filename.
    19.4 从调用函数中返回
    当函数完成处理或希望函数基于某一测试语句返回时,可做两种处理:
    1)让函数正常执行到函数末尾,然后返回脚本种调用函数的控制部分.
    2)使用return返回脚本种函数调用的下一条语句,可以带返回值.0为无错误,1为有错误.
    这是可选的,于最后状态命令报表例子极其类似,格式为:
    return  从函数种返回,用最后状态命令决定返回值
    Return 0  无错误返回
    Return 1 有错误返回
    19.6 在shell中使用函数
    当你收集一些经常使用的函数时,可以将之放入函数文件中并将文件载入shell.
    一旦文件载入shell,就可以在命令行或脚本中调用函数.可以使用set命令查看所有定义的函数.输出列表包括已经载入shell的所有函数.
    19.7 创建函数文件

    下面创建包容函数的函数文件并将之载入shell,进行测试,再做改动,之后再重新载入.
    函数文件名为functions.main,内容如下:
    $ vi functions.main
    #!/bin/bash
    #functions.main
    #findit:this is front end for the basic find command
    findit() {
    if [ $# -lt 1 ]; then
    echo "usage:findit file"
    return 1
    fi
    find / -name $1 -print
    19.8 定位文件
    定位文件格式为:
    ./pathname/filename
    现在文件已经创建好了,要将之载入shell,键入:
    . /functions.main 或.  functions.main(应该是后者正确)
    点-空格-斜线-文件名,或点-空格-文件名
    19.9 检查载入函数
    使用set命令确保函数已载入,set命令将在shell中显示所有的载入函数.
    19.10 执行shell 函数
    要执行函数,简单地键入函数名即可.
    19.10.1 删除shell 函数
    $ unset function_name
    19.10.2 编辑shell函数
    编辑函数functions.main,加入for循环以便脚本可以从命令行中读取多个参数.改动后函数脚本如下:
    $ vi functions.main
    #!/bin/bash
    findit()
    {
    #findit
    if [ $# -lt 1 ];then
    echo "usage:findit file"
    return 1
    fi
    for loop
    do
    find / -name $loop -print
    done
    }
    执行改动过的findit函数,输入参数:
    $ findit passwd
    1.却提示错误:
    -bash: findit: command not found ?
    通常Shell程序将在子Shell中执行,该程序对变量的改变只在子Shell中有效而在当前Shell中无效。"."命令可以使Shell程序在当前Shell中执行。用户可以在当前Shell中定义函数和对变量赋值。
    A: 输入 . functions1.main , 然后执行 findit passwd后正常
    2.return 1 是什么意思?
    A: 通常,函数中的最后一个命令执行后,就退出被调用函数。也可利用return命令立即退出函数,其语法格式是:
    return [ n ]
    其中,n值是退出函数时的退出值(退出状态),即$?的值,当n值缺省时,则退出值是最后一个命令执行后的退出值.

    19.10.3 函数举例
    既然已经学习了函数的基本用法,现在就用它来做一些工作.函数可以节省大量的编程时间,因为它时可重用的.
    1.变量输入
    以下脚本询问名,然后是姓:
    $ vi func2.sh
    # func2
    echo -n "What is your first name:"
    read F_NAME
    echo -n "What is you surname:"
    read S_NAME
    要求输入字符必须只包含字母,以下是取得只有小写或大写字符的测试函数.
    char_name()
    {
    # char_name
    # to call: char_name string
    # assign the argument across to new variable
    _LETTERS_ONLY=$1
    # use awk to test for characters only!
    _LETTES_ONLY=`echo $1|awk '{if($0~/[^a-z A-Z]/) print "1"}'`
    if [ "$_LETTERS_ONLY" != "" ]
    then
    # oops errors
    return 1
    else
    # contains only chrs
    return 0
    fi
    }
    2.echo 问题
    使用echo时,提示应放在语句末尾,以等待从 read命令中接受进一步输入。
    linux 和bsd为此使用echo 命令-n 选项.
    在echo 语句开头linux使用-e选项反馈控制字符.其他系统使用反斜线保证shell获知控制字符的存在。
    3.读单个字符
    在菜单进行选择时,最麻烦的工作是必须在选择后键入回车键,或显示"press any key to continue".可以使用dd命令解决不键入回车符以发送击键序列的问题。
    dd命令常用于对磁带或一般的磁带解压任务中出现的数据问题提出质疑或转换,但也可用于创建定长文件.下面创建长度为1M的文件myfile.
    dd if=/dev/zero of=myfile count=512 bs=2048
    注:
    dev/null 是linux的拉圾箱,任何重定向到该设备的文件都将被丢弃
    /dev/zero 是添零设备,提供无限个零
    cp /dev/null tmp 将使tmp文件为空
    cp /dev/zero tmp 若不加限制将迅速填满整个文件系统
    dd命令可以翻译键盘输入,可被用来接受多个字符,这里如果只要一个字符,dd命令需要删除换行自负,这与用户点击回车键相对应.dd只送回车前一个字符.在输入前必须使用stty命令将终端设置成未加工模式,并在dd执行前保存设置,在dd完成后恢复终端设置。
    函数如下:
    read_a_char()
    #read_a_char
    {
    #save the settings
    SAVEDSTTY=`stty -g`
    # set terminal raw please
    stty cbreak
    #read and output only one character
    dd if=/dev/tty bs=1 count=1 2>/dev/null
    # restore terminal and restore stty
    stty -cbreak
    stty $SAVEDSTTY
    }
    要调用函数,返回键入字符,可以使用命令替换操作,例子如下:
    echo -n "Hit any key to continue"
    character=`read_a_char`
    echo "In case you are wondering you perssed $character"
    4.测试目录存在
    拷贝文件时,测试目录是否存在时常见的工作之一.以下函数测试传递给函数的文件名是否是一个目录.因为此函数返回时带有成功或失败取值,可用if语句测试结果.
    is_it_a_directory()
    {
    #is_it_a_directory
    $to call:is_it_a_directory directory_name
    if [ $# -lt 1 ]
    ; then
    echo "is_it_a_directory: I need an argument"
    return 1
    fi
    # is it a directory ?
    _DIRECTORY_NAME=$1
    if [ ! -d $_DIRECTORY_NAME ]
    ; then
    # no it is not
    return 1
    else
    # yes it is
    return 0
    fi
    }
    要调用函数并测试结果,可使用:
    echo -n "enter destination directory:"
    read DIREC
    if is_it_a_directory $direc;
    then:
    else
    echo "$DIREC does not exitst,create it now? [y..n]"
    #commands go here to either create the directory or exit
    ...
    ...
    fi
    5. 提示Y或N
    许多脚本在继续处理前会发出提示.大约可以提示以下动作:
    创建一个目录
    是否删除文件
    是否后台运行
    确认保存记录
    等等
    6.从登陆ID号中抽取信息
    当所在系统很庞大,要和一登陆用户通信时,如果忘了用户的全名,是很讨厌的事情.比如有时你看到用户锁住了一个进程,但是他们的用户ID对你来说没有意义,因此必须用grep passwd文件以取得用户全名,然后从中抽取可用信息,向其发信号,让其他用户开锁.
    7.列出文本文件行号
    在vi编辑器中,可以列出行号来进行调试,但是如果打印几个带有行号的文件,必须使用nl命令。
    8.字符串大写
    有时需要在文件中将字符串转为大写,例如在文件系统中只用大写字符创建目录或在有效的文本域中将输入转换为大写数据。
    可以用tr命令。
    9.is_upper
    虽然函数str_to_upper做字符串转换,但有时在进一步处理前只需知道字符串是否为大写,is_upper实现此功能.在脚本中使用if语句决定传递的字符串是否为大写。
    10.字符串小写
    现在实现此功能,因为已经给出了str_to_upper,最好相应给出str_to_lower.函数工作方式与前面一样。
    11.字符串长度
    在脚本中确认域输入有效是最常见的任务之一.确认有效包括许多方式,如输入是否为数字或字符;域的格式长度是否为确定形式或值.
    假定脚本要求用户交互输入数据到名称域,你会想控制此域包含字符数目,比如人名最多为20个字符.有可能用户输入超过50个字符,以下函数实施控制功能.需要向函数传递两个参数,实际字符串和字符串最大长度.
    12.chop
    chop函数删除字符串前面字符。可以指定从第一个字符起删去的字符数.假定有字符串
    13.months
    产生报表或创建屏幕显示时,为方便起见有时要快速显示完整月份。函数months,接受月份数字或月份缩写作为参数,返回完整月份.
    19.10.4 将函数集中在一起
    测试函数时,首先将其作为代码测试,当结果满意时,再将其转换为函数,这样做可节省大量时间。
    19.11 函数调用
    本章最后讲述使用函数的两种不同方法:从原文件中调用函数和使用脚本中的函数.
    19.11.1 在脚本中调用函数
    要在脚本中调用函数,首先创建函数,并确保它位于调用之前.
    19.11.2 从函数文件中调用函数
    将函数放入函数文件,比如functions.sh里,sh即shell脚本。
    函数文件在脚本中以下述命令格式定位:
    ./
    使用这种方法不会创建另一个shell,所有函数均在当前shell下执行。
    19.12 定位文件不只用于函数
    定位文件不只针对于函数,也包含组成配置文件的全局变量。
    假定有两个悲愤文件备份同一系统的不同部分。最好让他们共享一个配置文件。为此需要在一个文件里创建用户变量,然后将一个备份脚本删除后,可以载入这些变量以获知用户在备份开始前是否要改变其缺省值.有时候也要悲愤到不同的媒体中。

    展开全文
  • std::cout << "file path = %s" << __FILE__; std::cout << "function name = %s" << __FUNCTION__; std::cout << "line = %d" << __LINE__;
  • #define LOGV(FMT, ...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, "[%d*%s:%d:%s]:" FMT, \ gettid(), basename(__FILE__), __LINE__, __FUNCTION__, ## __VA_ARGS__)
  • 系统函数调用系统自带的一些函数basename:这直接给个例子吧,其实就是截取路径中的文件名称dirname:获取文件的绝对路径自定义函数基本语法:[ function ].../bin/bash看下运行结果:shell 工具cut:用来切分:c...

    系统函数

    调用系统自带的一些函数

    basename:

    这直接给个例子吧,其实就是截取路径中的文件名称2e1e6c272803da3d46fd9ab87db64239.png

    dirname:

    获取文件的绝对路径e4a8932adc6df0a84c96e89f5b802a6d.png

    自定义函数

    基本语法:
    [ function ]funname[ () ]
    {
    Action;
    [return int;]
    }
    funname

    举个栗子:定义一个加法函数:
    (后面就都是从脚本内容直接写了哈)

    #!/bin/bash

    看下运行结果:4dd780a1139f906928ec821abc795a19.png

    shell 工具

    cut:

    用来切分:cut[选项参数] filename

    -f 表示取几列
    -d 表示用什么分隔符来切分

    定义一个cut文本文件:

    myz myz myz
    loves likes hates
    her typing tobe
    family code fat

    先来输出个第一列:95df25b731aa1fdac55ac0275fdb5d30.png
    再来输出个2,3列20736c0eb5cc9765db2e681b5662668e.png
    在cut.txt中切割出love38db369d0737629f49b8e1144d62b139.png
    顺嘴一句,把一行切出来:14b0d8a32df72cc58c3be800d1d422d9.png

    再来一个,选取系统PATH的变量值,从第二个“:”之后输出:adbf802d69b7f978808da9b0b4b762d2.png

    sed

    流编辑器,一次处理一行内容。
    -e 直接在指令列模式上进行sed动作指令
    a 新增,a的后面可以跟字符串,在下一行出现
    d 删除
    s 查找并替换
    还是建一个内容和刚刚一样的txt文件吧:
    然后来操作–
    在第二行插入“ha ha ha”72afd931334b0adbed31e73ccbdc6256.png
    但是文件本身没变哦!!还是原来的文件!只是输出变啦!
    接下来,将包含“loves”的一行删除16438af3ab77d83b7385c5a034d67dc5.png
    把文件中的myz替换成xiaomeid05894c069f85ffa793977878bd00366.png

    awk

    数据准备

    cp 

    搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。

    -F: 

    搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”号分割。

    -F: 

    注意:只有匹配了pattern的行才会执行action

    只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"dahaige,/bin/zuishuai"

    -F : 

    注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。

    将passwd文件中的用户id增加数值1并输出

    -v i=1 

    awk的内置变量

    FILENAME 文件名
    NR 已读的记录数
    NF 浏览记录的域的个数(切割后,列的个数)

    案例实操
    统计passwd文件名,每行的行号,每行的列数

    -F: 

    切割IP

    | grep 

    查询sed.txt中空行所在的行号

    '/^$/{print NR}' sed

    sort

    排序 -n:按照数值的大小来排序
    -r:以相反的顺序来排序
    -t:设置排序时所用的分割字符
    -k:指定需要排序的列

    展开全文
  • typedef struct _frame { PyObject_VAR_HEAD struct _frame *f_back; /* 调用者的帧 */ PyCodeObject *f_code; /* 帧对应的字节码对象 */ PyObject *f_builtins; /* 内置名字空间 */ PyObject *f_globals;...
  • linux shell 脚本 获取当前函数名

    千次阅读 2020-03-28 09:35:29
    linux bash shell 中 $FUNCNAME 得到当前函数名 在C/C++中,__FUNCTION__常量记录当前函数的名称。有时候,在日志输出的时候包含这些信息是非常有用的。而在Bash中,同样有这样一个常量FUNCNAME,但是有一点区别是...

    linux bash shell 中

    $FUNCNAME 得到当前函数名

    ${FUNCNAME[1]} 得到上一层函数名 如果上层没有函数调用 则为空

    在C/C++中,__FUNCTION__常量记录当前函数的名称。有时候,在日志输出的时候包含这些信息是非常有用的。而在Bash中,同样有这样一个常量FUNCNAME,但是有一点区别是,它是一个数组而非字符串,其中数组的第一个元素为当前函数的名称。

    可能初看有点难以理解,为什么FUNCNAME要是一个数组呢?看看下面的例子,你就明白了。

    #!/bin/bash
    
    function test_func()
    {
        echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"
        another_func
        echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"
    }
    
    function another_func()
    {
        echo "Current $FUNCNAME, \$FUNCNAME => (${FUNCNAME[@]})"
    }
    
    echo "Out of function, \$FUNCNAME => (${FUNCNAME[@]})"
    test_func
    echo "Out of function, \$FUNCNAME => (${FUNCNAME[@]})"
    

    执行后的结果为:

    Out of function, $FUNCNAME => ()
    Current test_func, $FUNCNAME => (test_func main)
    Current another_func, $FUNCNAME => (another_func test_func main)
    Current test_func, $FUNCNAME => (test_func main)
    Out of function, $FUNCNAME => ()
    

    所以,更加准确地说,FUNCNAME是一个数组,但是bash中会将它维护成类似一个堆栈的形式。

    与FUNCNAME相似的另外一个比较有用的常量是BASH_SOURCE,同样是一个数组,不过它的第一个元素是当前脚本的名称。
    这在source的时候非常有用,因为在被source的脚本中,$0是父脚本的名称,而不是被source的脚本名称。而BASH_SOURCE
    就可以派上用场了。

    # If the script is sourced by another script
    if [ -n "$BASH_SOURCE" -a "$BASH_SOURCE" != "$0" ]
    then
        do_something
    else # Otherwise, run directly in the shell
        do_other
    fi
    

    唯一遗憾的是,这种做法会让脚本失去一些可移植性,因为不是所有的shell都支持这些常量。

     

     

    展开全文
  • 2017-10-30 18:58:31.740513+0800 TestProject[8383:291415] 当前函数名: -[ViewController viewDidLoad] 2017-10-30 18:58:31.740513+0800 TestProject[8383:291415] 当前函数和参数: -[ViewController ...
  • 标题是函数名.函数体是函数内的命令集合.标题名应该唯一;如果不是,将会混淆结果,因为脚本在查看调用脚本前将首先搜索函数调用响应的shell. 格式: 函数名 () { 命令1 ... } 或者 函数名() { 命令1 ... }...
  • void printSystemInfo() { cout<<__FILE__<<endl; cout<<__LINE__<<endl; cout<<__FUNCTION__<<endl; }
  • shell函数和调试命令

    2013-03-08 07:52:08
    1  第19章  函数 1.1  函数 函数由两部分组成: ...标题是函数名。...果,因为脚本在查看调用脚本前将首先搜索函数调用相应的s h e l l。...函数名() ...如果愿意,可在函数名前加上关键字f u n c t i
  • 文章目录函数shell中的数组grepgrep -E 等价于egrep 函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。 格式 function f_name() { ...
  • Bash 获取当前函数名

    千次阅读 2016-06-22 14:09:42
    shell 函数名
  • 当使用shell函数名作为简单的命令名时,将执行与该函数名相关的命令列表。Shell函数在当前Shell上下文中执行;没有创建新的进程来解释它们。 1. 函数语法 函数的声明语法如下: fname () compound-command [ ...
  • Shell script PROJECT_DIR=~/Documents/Computer_science/Source_code/C/openssh-2.2.0p1/ SOURCE_FILE_LIST=~/Documents/Computer_science/Source_code/Bash/AWK/file_list OUTPUT_FILENAME=/home/Ken/Documen
  • shell脚本中函数的使用

    千次阅读 2012-08-24 14:49:10
    shell脚本中函数的使用  定位文件格式: ./... 执行shell函数,简单地的键入函数名即可。  对函数做些修改。首先删除函数,使其对shell不可利用。使用unset命令完成。  在脚本中调用函数,首先创建函数,并确
  • Shell Curses成立于1993年,旨在解决需要一组可移植的游标操纵函数的特定问题,而不必为每个新平台都重新编译它们。 这些功能最初是用Bourne Shell编写的,此后已迁移到Korn Shell 93,尽管当前的功能集在Bash中也能...
  • Shell函数应用 函数定义格式 [function] 函数名(){ 命令序列 [return x] } 其中 [ function ] 是可选的,表示该函数的功能(可省略) [return x]的作用是当命令序列执行完后返还系统一个值 例: 函数写的计算器 ...
  • Shell

    万次阅读 多人点赞 2017-09-04 11:53:05
    shell编程 shell历史 执行脚本 基本语法 变量 文件名代换Globbing 命令代换 算术代换 转义字符 单引号 双引号 Shell脚本语法 条件测试 条件分支 ifthenelifelsefi caseesac ...函数 Shell脚本调试方法 正
  • shell

    2015-04-29 01:39:21
    其基本的语法是 : trap ‘command’ signal其中signal是要捕获的信号,command是捕获到指定的信号之后,所要执行命令(一条或多条合法的shell语句/ 一个函数名)。shell脚本在执行时,会产生三个所谓的“伪信号”, (之...
  • 用 Addr2line 将函数地址解析为函数名 原文链接:http://www.ibm.com/developerworks/cn/linux/l-graphvis/  Addr2line 工具(它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像...
  • shell脚本中的函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可。 格式: function f_name() { command } 函数必须要放在最前面 示例...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,856
精华内容 7,942
关键字:

shell函数名行号