一。

  • 数组
  • 数组简介
  • 变量:用一个固定的字符串,代替一个不固定字符串。

    数组:用一个固定的字符串,代替多个不固定字符串。

  • 类型
  • 普通数组:只能使用整数作为数组索引

    关联数组:可以使用字符串作为数组索引

    图示如下:

    函数和数组

    总结:变量切片有个索引的概念。一个索引(整数)对应一个字符。

    普通数组:中的索引对应一个字符串。

    关联数组:数组中的索引可以使用字符串。

    1.普通数组

    赋值方法一一个赋一个值

          格式:数组名[下标]=变量值

      #array[0]=pear

      #array[1]=apple

      #array[2]=orange

      #array[3]=peach

    赋值方法二:一次赋多个值

      #array=(tom   jack   alice)

      #array=(`cat  /etc/passwd`)   //将该文件中每一行作为一个元素赋值给数组array

      #array=(`ls   /var/ftp/shell/for*`)  //将目录下的各文件作为元素输出给数组

      #array=(tom   jack   alice   “bash  shell”)

      #red=红色

       blue=蓝色

       green=绿色

       colors=($red  $blue   $green)

    查看数组:

    #declare  -a  |  grep  array

    echo函数和数组

    #查看所有元素         echo  ${array[@]}  等于echo  ${array[*]}

    访问数组元素:

    #访问数组中第一个元素   echo  ${array[0]}

    #统计数组中元素的个数   echo  ${#array[*]}

    #获取数组元素的索引   echo  ${!array[*]}

    #从数组下标1开始   echo  ${array[*]:1}

    #从数组下标1开始,访问两个数据  echo  ${array[@]1:2}

  • 关联数组(先声明)
  • 赋值方法一: 一次赋一个值:数组名[索引]=变量值

    #declare   -A   ass

    #ass[index1]=pear

    #ass[index2]=apple

    #ass[index3]=orange

    查看#echo  ${ass[@]}

        # declare   -A  |  grep   ‘ass’

    赋值方法二:一次赋多个值

     #declare  -A   bss 

     #bss=([index1]=tom  [index2]=jack   [index3]=alice )

    访问数组元素

      #echo  ${bss[index1]}  访问数组中的第二个数组

      #echo  ${bss[@]}  =  echo ${bss[*]} 访问数组中所有元素

      #获得数组中元数的个数  echo  ${#bss[*]}

      #获得数组元数的索引  echo  ${!bss[*]}

     

     

     

     

     

     

    While 语句按行分割

    For语句按空格分割

    示例如下

     #vim  while.sh

     #!/usr/bin/bash

     while  read   line

     do

        host[i++]=$line

    done    <   /etc/hosts

    for  i   in  ${!host[*]}

    do

    echo  “索引是$i  :值是${host[$i]}”

    done

    函数和数组

    函数和数组

     

    #vim   for.sh

    OLD_IFS=$IFS

    IFS=$’\n’

          for  line  in  `cat   /etc/hosts`

          do 

    host[i++]=$line

    done

     

    for   i   in  ${!host[@]}

    do

    echo  “索引$i,他的值是${host[$i]}”

    done

         IFS=OLD_IFS

    for按空格分割,补上以上三条命令后按while的回车分割,按行输出

      for原本的按空格分割

    函数和数组

    函数和数组   加上条件以后按回车分割

    函数和数组

    函数和数组

    定义性别的文件

      #Vim  sex.txt

    Jack   m   henan

    Alice   f    Hebei

    Tom   m   Beijing

      #vim  sex.sh

    declare  -A   sex

    while  read  line

    do

    type=`echo  $line  | awk  ‘{print  $2}’`

    let   sex[$type]++

    done   <   sex.txt

    for   i    in  ${!sex[*]}

    do

    echo “索引值是$i,值是${sex[$i]}”

    done

     

     

    使用数组统计用户shell的类型和数量

    #vim  shell.sh

       #!/usr/bin/bash

      declare   -A   shells

    while  read   aa

      do

    type=`echo  $aa |awk   -F:  ‘{print  $NF}’`

    let   shells[$type]++

     done  <   /etc/passwd

    for  i   in   ${!  shells[*]}

    do

    echo  “索引是$i;索引值是${shells[$i]}”

    done

  • 函数
  • 概念:函数是一段完成特定功能的代码片段(块),在shell中定义了函数,就可以使用代码模块化,便于复用代码(注意函数必须先定义后使用

    定义函数:

    方法一:函数名(){

    函数要实现的功能代码

    }

    方法二: function   函数名  {

    函数要实现的功能代码

    }

     

    传参:让函数能够自定义

           Vim  bb.sh

    #!/usr/bin/bash

      fun()   {

    factorial=1

    for((i=1;i<=$1;i++))

      do

      factorial=$[$factorial*$i]

    done

      echo  “$i的阶乘是$factorial”

     

    }

       fun  $1

       fun  $2

       fun  $3

    #bash   bb.sh   3   5  6

      3的阶乘是6

      5的阶乘是120

      6的阶乘是720

    Shell的写法和其他运算表达式

       Vim  cc.sh

       #!/bin/bash

       func ()  {

    factorial=1

    #for((i=1;i<=$1;i++))

     for  I  in  `seq  $1`

    do

      #factorial=$[$factorial*$i]

      #let  factorial=$factorial*$i

     let  factorial*=$i

     done

    echo  “$1的阶乘是:$factorial”

     

    }

    fun  $1

    #bash  cc.sh  3

     

     

    函数传参,数组传参

    Vim  22.sh

    #!/bin/bash

    #先定义一个数组

     num=(1  2  3)

    #定义一个函数

      array()  {

      factorial=1

    for  i  in  $*

    do

    factorial=$[ $factorial * $i ]

    done

    echo  $factorial

    }

    #调用函数,使用数组

    array   ${num[*]}

     

    函数结果,赋予数组(用户获赠流量包,每人增加5g流量)

       Vim  33.sh

    #!/bin/bash

    num=(1  2  3 )

    array()  {

    #定义变量仅在函数中有效

    local  j

    #设置循环的次数,等于索引的总数

     for    i   in  $*

      do

      #定义不同的值加5,注意取值的时候使用的是索引

     outrray[j++]=$[$i+5]

      done

    #输出新的数组

       echo  “${outarray[*]}”

    }

    调出函数使用数组

      array${num[*]}

    通过循环脚本,输出如下结果

    a 1 2 3 4 5 6 7 8 9

    b 1 2 3 4 5 6 7 8 9

    c 1 2 3 4 5 6 7 8 9

    d 1 2 3 4 5 6 7 8 9

    编写循环脚本

       #!/bin/bash

     for   i  in  {a..d}

     do

       echo  $i

       for  j   in  {1..9}

       do

       echo  $j

       done

    done

    输出为:a

            1

            2

            .

            .

    注:echo默认输出换行符,使用-n则不会输出换行符

    解决换行问题

       #!/bin/bash

      for   i  in  {a..d}

     do

       echo  $i

       for  j   in  {1..9}

       do

       echo      -n    $j

       done

    done

    输出为:a 1 2 3 4 5 6……b 1 2……c 1 2 3 ……d 1 2 3… 9

     

    正确的输出表达式

       #!/bin/bash

      for   i  in  {a..d}

     do

       echo  $i

       for  j   in  {1..9}

       do

       echo      -n    $j

       done

       echo               //输出回车换行

    done

    输出则为:

        a 1 2 3 4 5 6 7 8 9

    b 1 2 3 4 5 6 7 8 9

    c 1 2 3 4 5 6 7 8 9

    d 1 2 3 4 5 6 7 8 9

  • continue  跳出本次循环
  • #!/bin/bash

      for   i  in  {a..d}

     do

       echo  $i

       for  j   in  {1..9}

       do

    if  [  $j  -eq  5 ]

     then

    continue

     fi

       echo      -n    $j

       done

       echo               //输出回车换行

    done

    是5则跳出本层循环

      输出为:

                a 1 2 3 4 6 7 8 9

    b 1 2 3 4 6 7 8 9

    c 1 2 3 4 6 7 8 9

    d 1 2 3 4 6 7 8 9

  • exit  直接退出
  • #!/bin/bash

      for   i  in  {a..d}

     do

       echo  $i

       for  j   in  {1..9}

       do

    if  [  $j  -eq  5 ]

     then

      exit

    fi

       echo      -n    $j

       done

       echo               //输出回车换行

    done

    直接退出本次循环

     输出为:a 1 2 3 4

  • break  跳出本层循环
  • #!/bin/bash

      for   i  in  {a..d}

     do

       echo  $i

       for  j   in  {1..9}

       do

    if  [  $j  -eq  5 ]

    then

      break

    fi

       echo      -n    $j

       done

       echo               //输出回车换行

    done

    注:break  加数字是跳出循环的层数

       break  不加数字默认是1,跳出本层循环

    输出是:

       a 1 2 3 4

       b 1 2 3 4

       c 1 2 3 4

       d 1 2 3 4

    break2  输出为a 1 2 3 4

     

    for循环不定义循环的范围,循环取参数作为循环的范围

      #!/usr/bin/bash

      for  i

      do

    let  sum+=$i

      done

     echo  “sum  :$sum”

      #bash  sum.sh   1

      输出为  1

      #bash  sum.sh   1   4 

       输出为  5

    While循环发现停不下来,shift可以进行解决此问题

      While  [  $#  -ne   0  ]

    do

     let  sum+=$1

    echo  $sum

    done

    echo  “sum  :$sum”

    测试:bash   sum.sh   1   发现根本停不下来

     

    While  [  $#  -ne   0  ]

    do

     let  sum+=$1

      shift

    echo  $sum

    done

    echo  “sum  :$sum”

     

    测试:bash  sum.sh  1  2   输出为3

          bash  sum.sh  4  5  6  输出为15

    总结:shift默认是1 (左移一位)

          shift  2    (左移两位)

          bash  sum.sh   1  2   3   4   5  6 输出为9

      九九乘法表

    程序    函数和数组

    输出:

相关文章:

  • 2021-04-30
  • 2021-04-10
  • 2022-12-23
  • 2021-11-29
  • 2022-01-24
  • 2021-08-07
  • 2021-05-21
  • 2022-02-24
猜你喜欢
  • 2021-11-15
  • 2021-08-16
  • 2021-12-06
  • 2022-12-23
  • 2021-12-06
相关资源
相似解决方案