bash编程函数select语句的使用

£select      

      select循环主要用于创建菜单,按数字顺序排列的菜单项将显示在标准错误上,并显示PS3提示符,等待用户的输入,用户输入菜单列表中的某个数字,执行相应的命令,用户输入被保存在变量REPLY中。

select是个无限循环,因此要记住用break命令退出循环,或者用exit直接退出脚本,也可以使用ctrl+c退出循环

 

select语句结构:

    select 变量 in 选项1 选项2 ;do

    break

    done

 

    #!/bin/sh

    PS3="what is you favourite OS?:"

    select i  in "Linux" "Windows" "Mac";do

    echo "you have select $REPLY"

    break

    done

1.jpg

 

selectif选择语句的使用

    #!/bin/bash

    #

    PS3="please input a color:"

    select  color  in   red  white   black  ; do

         if [[ "$color" == "red" ]];then

         echo  " is  good"         

         elif [[ "$color" ==  "white"  ]] ;then

                   echo   "is ok "

         elif [[ "$color"  == "black" ]];then

                   echo "is god"

         fi

    break

    done

2.jpg

 

selectcase

    #!/bin/bash

    #

    PS3="please input a color:"

    select  color  in   “red”  “white”   “black”  ; do

         case $color in

         red)

         echo “is goog”

         ;;

         white)

         echo “is ok”

         ;;

         black)

         echo “is god”

         ;;

         *)

         exit

         esac

         done

 

    break

    done

 

3.jpg

 

 

函数

       函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程,最大化的代码重用和最小化的代码冗余,它与shell程序形式上是相似的,不同的是他不是一个单独的进程,不能独立运行,而是shell程序的一部分。函数是

函数和shell程序的差异

shell程序在子shell中运行,而shell函数在当前shell中运行,因此在当前shell中,函数可以shell中变量进行修改

函数由两部分组成:函数名和函数体

  语法一:

      function  f_name {

   函数体

      }

  语法二:

     function f_name () {

  函数体

     }

 语法三:

   f_name (){

  函数体

  }

函数有两种返回值:

  函数的执行结果返回值:

(1)       使用echoprintf命令进行输出

(2)       函数体中调用命令的输出结果

函数的退出码状态:

(1)       取决于函数中执行的最后一条命令的退出状态码

(2)       自定义退出状态码,其格式为:

return 从函数中返回,用最后状态命令决定返回值

return 0 无错误返回

return 1-255 有错误返回

 

 

  函数使用前必须定义,因此应将函数定义放在脚本开始部分,直至shell首次发现它后才能使用

调用时直接使用函数名即可,如下例子

 

利用函数来显示当前系统的主机名

 1.jpg

利用函数显示用的uidshell类型

 2.jpg

  有时候我们会经常进行某些操作,每次重新写一遍太耗时,有了函数我们就可将要执行的操作定义在函数中,这样在我们想执行某些操作的时候,直接来调用函数来完成操作,如果是多个函数,那么可以定义在一个文件当中,然后将函数载入shell,文件名可任意取,但最好跟某些任务有某种关联,这样用的时候也好找一些。

  一旦函数文件载入shell,就可以在命令或脚本中调用函数。可以使用set命令查看所有定义的函数,其输出列表包括已经载入shell的所有函数

  若要改动函数,首先用unst命令从shell中删除函数,改动完毕后,再重新载入此文件

 

载入函数的方法

      . filename source filename两者的区别是前者里定义的变量不会加载到环境变量中,而后者恰恰相反

 

删除函数的方法

  使用unset function_name跟删除变量一样

5.png

 

£函数参数

  传递参数给函数:调用函数时,在函数名后面以空白分隔给定参数列表即可;例如“testfunc arg1 arg2 …

在函数体中当中,可使用$1, $2, …调用这些参数;还可以使用$@, $*, $#等特殊变量,注意:如果函数中有局部变量,如果其名称同本地变量,使用局部变量

 

 

    1、斐波那契数列又称黄金分割数列,因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:0112358132134、……,斐波纳契数列以如下被以递归的方法定义:F0=0F1=1Fn=F(n-1)+F(n-2)n2

写一个函数,求n阶斐波那契数列

    #!/bin/bash

    #

    fab() {

         if [ $1 -eq 1 ] ;then

         echo -n  "1 "

         elif  [ $1 -eq 1 ] ;then

                   echo  -n "1 "

         else

                   echo  -n "$[$(fab $[$1-1]) + $(fab $[$1-2] ) ] "

        fi

    }

    for i in {1..10};do

         fab $i

    echo

    done

 

6.png

 

 

       2、汉诺塔(又称河内塔)问题是源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

利用函数,实现N片盘的汉诺塔的移动步骤

    #!/bin/bash
    #
    step=0
    move (){
    let step++
    echo "$step:  move disk $1   $2 —–> $3"
    }
    hanoi(){
        if [ $1 -eq  1 ];then
            move  $1   $2  $4
        else
    hanoi "$[$1-1]" $2 $4 $3
    move $1  $2  $4
    hanoi  "$[$1-1]" $3  $2  $4
    fi
    }
    read -p "please input the  number of plates: "  number
    hanoi $number A B C

QQ截图20160823104247.jpg

原创文章,作者:fszxxxks,如若转载,请注明出处:http://www.178linux.com/38082

(0)
fszxxxksfszxxxks
上一篇 2016-08-24 10:13
下一篇 2016-08-24 10:25

相关推荐

  • Python from entry to abandon 4

        python from entry to abandon系列的收官之作    本篇博客将会介绍《简明Python教程》的最后四章内容。并在最后附上对于本书的个人评价和下阶段自学Python系列博客更新的计划。    13.异常   &nbsp…

    Linux干货 2017-04-07
  • 文本处理工具

    文件 查看命令:cat, tac,revcat [OPTION]… [FILE]…-E: 显示行结束符$-n: 对显示出的每一行进行 编号-A :显示所有控制符-b: : 非空行编号-s :压缩连续的空行成一行 分页查看文件内容more: 分页查看文件more [OPTIONS…] FILE…-d: 显示翻页及…

    Linux干货 2017-03-17
  • Linux常用命令及bash特性(1)

    马哥教育网络班22期第二周课程练习 Linux简单使用(1) Linux常用命令介绍 linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心。 linux命令在系统中有两种类型:内置Shell命令和Linux命令。可以使用help、…

    Linux干货 2016-08-29
  • tomcat之-从AT到Cluster

    本文导航 一、    LAMT搭建以及部署应用        1、LAMT部署                   (1)、安装Apache     …

    2017-02-13
  • 用户查找与添加 第四周

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 cp /etc/skel /home/tuser1  chmod -R go=— /home/tuser1 2、编辑/etc/group文件,添加组hadoop…

    Linux干货 2017-02-14
  • 硬盘及文件系统基础概念

    机械硬盘HDD(Mechanical hard disk) 机械硬盘中所有的盘片都装在一个旋转轴上,每张盘片之间是平行的,在每个盘片的存储面上有一个磁头,磁头与盘片之间的距离比头发丝的直径还小,所有的磁头联在一个磁头控制器上,由磁头控制器负责各个磁头的运动。 磁头(Head): 对硬盘上的数据进行读写操作. 磁道(Track) 当磁盘旋转时,磁头若保持在一个…

    Linux干货 2017-04-09