zoukankan      html  css  js  c++  java
  • 14、位置参数+随机数+数组+函数

    位置参数:
    linux 程序中会大量用到位置参数,位置参数就形如:
    mkdir a b c d e f g
         
    在以上程序中 mkdir 它自己也是一个参数,它个参数用 $0 表示
    后面的参数用 $1 (a) $2(b) $3 (c)
     
    最多到 $10,如果超10,那要用 shift 进行参数移位
     
    参数移位
    参数移位就是把后面(右边)的参数,往前(左边)移动,最前面(左边)的参数
    覆盖(删除)了,整个参数个数也会少1。
     
    例:
            a b c d e f g h
                     ||
             || shift
                     ||
                 b c d e f g h
                     ||
             || shift
                     ||
                 c d e f g h
                     ||
             || shift
                     ||
                 d e f g h
     
    位置参数的表示:
    $0          程序本身
    $1  - $10 1个参数、第2个参数、第3个参数...第10个参数
    $# 参数个数
    $* 所有参数
     
     
    例:写程序,打印输入指定个数的指定字符
       如:   xxx *  5    --打5个*,xxx 是你的程序名
              xxx # 10     --打10个#,xxx 是你的程序名
     
     
     
    随机数:
    RANDOM
     
    echo $RANDOM   
         
    生成 0-32767 间的随机数,要前生其它随机数,要用间接的方法了
     
      例:生成 0-100 间的随机数
            echo $[$RANDOM%101]
     
      例:生成 50-100 间的随机数
    echo $[$RANDOM%51+50]
     
     
    数組 
       具有相同的名字,不同下票变量集合,如 a[1]  a[2] ......
     
    数組定义方法:
        方法一:把所有值用小括号括起(值间空格分形),赋給一个变量
              如: a=(1 2 3 a b c)
     
      使用:使用它的具体元素,如: echo ${a[0]}    echo ${a[5]}
     
        方法二:直接给单个下标赋值
     如:b[1]=5
         b[10]=8
     
    下标值查看:
         echo ${b[*]}    显示所有值,但不会显示下标个数,和下标序号
     
     
    echo ${#b[*]}    看有多少个值
     
    命令行可以通过set 来看
     
     
     
    例:利用随机数与数组产生随机验证码
     
        定义数组:a=(1 2 3 4 .... X Y Z # ^ _)
        产生随机数:n
        利用随机数作数组下标取数:  echo ${a[$n]}
     
     
     
    函数:
         shell程序时,经常会遇到反复使用相同或相近的代码段,那这里我们可以将这些代
    码,提取出来,构成函数。
     
    函数的优点在于,1、让主程序变得简短。2、方便维护。
     
     
    函数定义:
        
        FUNCTION function_name() {
     
     
        }
     
        function_name() {
     
     
        }
     
     
    函数返回值:
        1、默认以函数最后一条命令返回返回(没有显示的为函数指定返回值时)
     
        2、使用return返回值,只能返回 0-255
     
    例:写个求2个数这和的函数
    add() {
    sum=$[$1+$2]
    return $sum
    }
     
    read -p "输入第一个数: " x
    read -p "输入第二个数: " y
     
    add $x $y
    echo "x+y=$?"
     
        3、在函数中使用echo
    add2 () {
    sum=$[$1+$2]
    echo $sum
    }
    read -p "输入第一个数: " x
    read -p "输入第二个数: " y
     
    add2 $x $y
    echo "x+y=`add2 $x $y`"
     
     
    函数中的变量问题:
        程序中使用的变量,我们把它分为全局变量和局部变量
        全局变量
    未作特别声明都是全局变量,主程序代码中定义的变量都是全局变量,全局变量的作用范围
    是从它的定义处,到程序末尾
     
        局部变量
       定义的方法:local 变量名
     
    局部变量的作用范围:只在定义它的函数有效,一般来讲函数中的变量都应该声明为局部变量
     
    函数使用:
    先定义、后使用,使用时输入函数名即可
     
     
        FUNCTION          关键字
        function_name   函数名
     
      
        例:定义一个打印函数
    function my_print() {
     
               commands    
      
    }
     
    也可以
     
    my_print() {
     
       commands
     
    }
     
        例:定义一个打印指定个数*的函数
     
    function my_print() {
    n=1
    while [ $n -le $1 ]
    do
    echo -n "*"
    n=$[$n+1]
    done
    }
       
     
    my_print 5
     
     
        例:定义一个打印指定个数,指定字符的函数
    my_print 5 "*"
            my_print 10 "#"
     
     
    函数递归
        自已调用自已
     
        要点:
    1、必须有个变量终值时的处理
    2、递归调用时,变量值的变化要向终值靠近
     
     
    #函数递归调用,求阶乘
     
    function jx() {
    local n
    if [ $1 -eq 1 ]
    then
    n=1
    else
    n=$[$1*`jx $[$1-1]`]
    fi
    echo $n
    }
     
    s=`jx 5`
    echo "5的阶乘是: $s"
     
    利用函数创建菜单
     
     
     
     
     
     
        
     
     
     
     
     
  • 相关阅读:
    哎~水题,还是最小生成树。没想到一遍AC了...
    博客搬家咯~
    又遇到一个奇葩问题....输出double用%f...
    又想吐槽一下了...同样是DP,差别咋就那么大呢?
    1487: 未覆盖顶点数量.
    并查集~
    侃项目管理 序
    安装Redis报错jemalloc/jemalloc.h: No such file or directory
    PyCharm设置pip国内源(镜像)
    HBase元数据及损坏文件的修复
  • 原文地址:https://www.cnblogs.com/steven9898/p/11331210.html
Copyright © 2011-2022 走看看