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

相关推荐

  • shell编程、程序包管理及习题

    shell编程、程序包管理及习题 一、编程语句 1、while 循环 while CONDITION; do     循环体 done CONDITION :循环控制条件;进入循环之前,先做一次判 断;每一次循环之后会再次做判断;条件为“true” ,则执行 一次循环;直到条件测试状态为“false” 终止循环 因此:…

    Linux干货 2016-08-18
  • 程序包的编译安装

    程序包的编译安装     程序包的编译安装是比较重要的内容,在之后的网络知识以及服务的配置等学习方面也发挥着重要作用,是我们的必备技能。 一、杂项知识整理 1、which –skip-alias:跳过别名,直接查看原命令 [root@localhost ~]# which –…

    Linux干货 2016-08-24
  • find可以这么用

    在工作中不可或缺的工具find:查找系统中的各种文件,对查找的文件进行操作,这就是find的作用。进入正题: 1、查找下系统中有一下系统中有几个文件叫issue的     [root@localhost private]#find / -name issue      …

    Linux干货 2017-03-05
  • N26-博客作业-week11

    1、详细描述一次加密通讯的过程,结合图示最佳。 加密过程 1、先用单向加密算法计算出数据的特征码 2、私钥加密特征码,并将结果附加在数据之后 3、生成一个临时的对称密钥,并使用对称密钥加密整段数据 4、获取对方的公钥,使用该公钥加密之前生成的临时对称密钥,并附加在数据之后 5、将所有数据发送给对方解密过程 1、先使用私钥解密加密的对称密钥 2、用对称密钥解密…

    2017-04-18
  • grep 命令详解

    grep 命令详解 概述:本文档基于 info grep 翻译,完成度可能 90% 左右。 作者:N10-guli 时间:2016-01-05 版本:v1.0 目录:     1,grep 命令的选项     2,grep 命令的正则表达式     3,gre…

    Linux干货 2016-02-14
  • 马哥教育网络班22期第3周课程作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [root@MyCloudServer ~]# who | cut -d " " -f1 |sort -u root 2、取出最后登录到当前系统的用…

    Linux干货 2016-09-19