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
下一篇 2016-08-24

相关推荐

  • N25第八周学习总结_sed命令详解

    sed使用详解 大纲: 1、    sed是什么 2、    为什么要使用sed 3、    sed使用方法 4、    sed详解   正题: 1、    sed是什么 sed全名Stream Ed…

    2017-02-26
  • Linux中的cut、sort、uniq以及用户(组)管理类指令应用示例

    Linux中的cut、sort、uniq指令 列出当前系统上所有已经登录的用户的用户名,注意:同一用户登录多次,只显示一次。 解决思路: 先使用who指令显示出所有已登录的用户。然后对who指令的输出进行切割得到想要的第一列内容,即只包含用户名。可以使用cut指令。最后对cut的结果进行排序并去重。可以使用sort指令。   借助管道符,可以方便的…

    Linux干货 2016-11-13
  • Python基础篇之过程型程序设计

    一、Python过程型程序设计 面向过程 以指令为中心,由指令处理数据 如何组织代码解码问题 面向对象 以数据为中心,所有的处理代码都围绕数据展开 如何设计数据结构组织数据,并提供对此类数据所允许处理操作 简单方法: 1)、编译安装新版本至某特定路径 # yum install readline-devel # tar xf Python-2.7.6.tar…

    2018-01-11
  • Shell 变量类型及用法

    一、      什么是变量          变量源于数学,在计算机语言中能储存计算机结果或能表示值的抽象概念,变量可以由变量名访问,在指令语言中,变量通常是可变的。Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个…

    Linux干货 2016-08-12
  • N26第四周博客作业

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

    Linux干货 2017-02-27
  • session sticky + session cluster 实战

    前言 在做负载均衡集群的时候,如果后端是应用服务器,我们就有一个不得不考虑的一个问题:会话绑定。为了追踪会话,我们常见的有三种方式:(1)session sticky:会话粘性,常见有2种方式: source_ip:采用源地址绑定方式 nginx:ip_hash,ip地址哈希 haproxy:source lvs:sh,源地址哈希 cookie:基于cook…

    Linux干货 2017-02-13