zoukankan      html  css  js  c++  java
  • shell函数和数组概念(含案例,适合练习)

    一、shell函数

    1.1、函数的定义

     

    1.1.1、return返回的是状态码,需要使用$?调取

    1.1.2、echo 返回的是值,使用变量调用

    1.1.3、传参:指位置变量

    1.1.4、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。

    1.1.5、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。

    1.1.6、return后跟数值n(0-255)

    1.2、调用函数的方法

    1.2.1、函数名 [参数1($1)] [参数2($2)

    1.2.2、在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…

    1.3、shell函数应用

    1.3.1、求两个数的平方相加的结果

    1.3.2、比如: 5的平方加上6的平方

    1 #!/bin/bash
    2 read -p "请输入两个整数:" shu_1 shu_2
    3 
    4 function  sqrt (){
    5   sum=$(expr $(expr $1 * $1) + $(expr $2 * $2))
    6 }
    7 sqrt $shu_1 $shu_2

    二、数组

    2.1、数组定义方法

    • 方法一:
    1 基本格式
    2 数组名=(value0 value1 value2...)
    • 方法二:
    1 基本格式
    2 数组名=([0]=value [1]=value [2]=value...)
    • 方法三:数组元素之间使用空格隔开
    1 基本格式
    2 列表名=“value0 value1 value2”
    3 数组名=($列表名)
    • 方法四:
    1 基本格式
    2 数组名[0]=“value”
    3 数组名[1]=“value”
    4 数组名[2]=“value”
    5 ...

    2.2、数组操作

    2.2.1、获取数组长度

    1 基本格式  ${#数组名[@/*]}
    2 例如
    3 [root@localhost opt]# abc=(10 20 30 40 50)
    4 [root@localhost opt]# echo ${#abc[*]}
    5 5

    2.2.2、读取某下标赋值

     1 基本格式
     2 ${数组名[下标]}
     3 例如
     4 [root@localhost opt]# echo ${abc[0]}
     5 10
     6 [root@localhost opt]# echo ${abc[1]}
     7 20
     8 [root@localhost opt]# echo ${abc[1]}
     9 20
    10 [root@localhost opt]# echo ${abc[2]}
    11 30
    12 ...

    2.2.3、获取数组的内容

    1 基本格式  ${数组名[@]}
    2         ${数组名[*]}
    3              以上是把数组的内容一一单列出来
    4  例:
    5  [root@localhost opt]# echo ${abc[*]}
    6 10 20 30 40 50 

    2.2.4、数组切片数组,切片即读取数组的一部分

    1 基本格式    ${数组名[@]:跳过的元素:元素个数}
    2 
    3 例:从数组的第二个元素后面取,取3个元素
    4         ${name[*]:2:3}
    5 这里的 2 指跳过的元素,3 指获取的元素个数

    2.3、数组实例

    • 案例1:先输5个数放入数组,然后求出数组的最大值max
     1 #!/bin/bash
     2 for ((i=1;i<=5;i++));do
     3   read -p "请输入第$i个数字:" num
     4   abc[$i-1]=$num
     5 done
     6 
     7 max=${abc[0]}
     8 for ((k=1;k<=${#abc[*]}-1;k++));do
     9   if [ $max -lt ${abc[$k]} ];then
    10    max=${abc[$k]}
    11   fi
    12 done
    13 echo "最大值是:$max"  
    1 [root@localhost opt]# chmod +x max.sh 
    2 [root@localhost opt]# ./max.sh 
    3 请输入第1个数字:2
    4 请输入第2个数字:3
    5 请输入第3个数字:66
    6 请输入第4个数字:33
    7 请输入第5个数字:111
    8 最大值是:111
    • 案例2:交互由用户用户随意输一个数组,求出最大值
     1 #!/bin/bash 
     2 read -p "请输入你的数组长度:" num1
     3 for i in `seq $num1`
     4 do
     5 read -p "请输入$i个数:" shu
     6  number[$i-1]=$shu
     7 done
     8 echo ${number[*]}
     9 max=${number[0]}
    10 for((j=1;j<=${#number[*]}-1;j++))
    11 do
    12     if [ ${number[j]} -gt $max ]
    13     then
    14         max=${number[j]}
    15     fi
    16 done
    17 echo "最大值为$max"
  • 相关阅读:
    bzoj 1013: [JSOI2008]球形空间产生器sphere
    bzoj 1012: [JSOI2008]最大数maxnumber
    bzoj 1010: [HNOI2008]玩具装箱toy
    bzoj 1008: [HNOI2008]越狱
    bzoj 1007: [HNOI2008]水平可见直线
    UVa12105 越大越好
    POJ
    最优点配对问题(紫书)
    Ned 的难题
    UVA
  • 原文地址:https://www.cnblogs.com/xuhao0705/p/14003817.html
Copyright © 2011-2022 走看看