• Shell脚本学习


    函数

    函数定义

    [ function ] funname [()]
    
    {
    
        action;
    
        [return int;]
    
    }

    定义时可以是function fun(),也可以直接fun(),不带参数

    返回值不显式返回时,以最后一条命令运行结果作为返回值。return后为数值,范围0-255

    带返回值的示例

    #!/bin/bash
    
    funWithReturn(){
        echo "这个函数会对输入的两个数字进行相加运算..."
        echo "输入第一个数字: "
        read aNum
        echo "输入第二个数字: "
        read anotherNum
        echo "两个数字分别为 $aNum 和 $anotherNum !"
        return $(($aNum+$anotherNum))
    }
    funWithReturn
    echo "输入的两个数字之和为 $? !"

    $?可以获取到函数返回值

    函数定义必须放在脚本开始部分,所有函数必须使用前就定义

    函数参数定义使用$n。也就是说$1表示第一个参数,$2表示第二个参数

    #!/bin/bash
    
    funWithParam(){
        echo "第一个参数为 $1 !"
        echo "第二个参数为 $2 !"
        echo "第十个参数为 $10 !"
        echo "第十个参数为 ${10} !"
        echo "第十一个参数为 ${11} !"
        echo "参数总数有 $# 个!"
        echo "作为一个字符串输出所有参数 $* !"
    }
    funWithParam 1 2 3 4 5 6 7 8 9 34 73

    $10输出是10。n >= 10时不能直接$n,得写成${n}

    特殊字符

    $#:参数个数

    $*:参数列表(字符串形式)

    $$:脚本运行的最后一个进程的ID号

    $!:后台运行的最后一个进程的ID号

    $@:和$*相同,不同的是使用时要加引号,在引号内返回每个参数

    $-:显示Shell使用的当前选项,与set命令功能相同

    $?:显示最后命令的退出状态,0表示没错误,其他值表示有错误

    输入/输出重定向

    command > file:输出到file

    command < file:从file输入

    command >> file:输出到file(append)

    n > file:将文件描述符为n的文件重定向到file

    n >> file:将文件描述符为n的文件重定向到file(append)

    n >& m:将输出文件m和n合并

    n <& m:将输入文件m和n合并

    << tag:将开始标记tag和结束标记tag之间的内容作为输入

    文件描述符:

    内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。

    文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

    重定向

    一般情况下,每个 Unix/Linux 命令运行时都会打开三个文件:

    • 标准输入文件(stdin):stdin的文件描述符为0,Unix程序默认从stdin读取数据。
    • 标准输出文件(stdout):stdout 的文件描述符为1,Unix程序默认向stdout输出数据。
    • 标准错误文件(stderr):stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。

    默认情况下,command > file 将 stdout 重定向到 file,command < file 将stdin 重定向到 file。

    未完待续

  • 相关阅读:
    CodeForces 19D Points (线段树+set)
    FZU 2105 Digits Count
    HDU 5618 Jam's problem again(三维偏序,CDQ分治,树状数组,线段树)
    HDU 5634 Rikka with Phi (线段树)
    Java实现 蓝桥杯 算法提高 转圈游戏(暴力快速幂)
    Java实现 蓝桥杯 算法提高 转圈游戏(暴力快速幂)
    Java实现 蓝桥杯 算法提高 转圈游戏(暴力快速幂)
    Java实现 蓝桥杯 算法提高VIP Substrings(暴力)
    Java实现 蓝桥杯 算法提高VIP Substrings(暴力)
    Java实现 蓝桥杯 算法提高VIP Substrings(暴力)
  • 原文地址:https://www.cnblogs.com/wuhuohanke/p/10082516.html
Copyright © 2020-2023  润新知