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)
上一篇 2016-08-24 10:13
下一篇 2016-08-24 10:25

相关推荐

  • LVM2详解

    1、什么是lvm LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性。LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,与硬件相关的存储设置被其隐藏,你可以不用停止应用或卸载文件系统来调整卷大小或数据迁移.这样…

    Linux干货 2017-01-03
  • N25第二周作业

    1、Linux上的文件管理类命令都有哪些其常用的使用方法及其相关示例演示。 cp(copy) 复制,mv(move)移动或者更名,mkdir(创建目录,-p可以同时创建父目录),rm(删除目录,-r 可以递归操作,rmdir(删除空目录)删除文件或者目录,建议建立一个临时回收站,否则误删或者短时间内还需要的文件),touch,file,stat, …

    Linux干货 2016-12-25
  • Linux的安全控制访问模块之SElinux

    SElinux   1、Selinux介绍:Linux的一个强制访问控制安全模块,2000年以GNU GPL发布,Linux内核2.6版本集成在内核中。 DAC:自由访问控制,进程是无束缚的。 MAC:强制访问控制,策略的规则决定控制的严格程度(策略被用来定义被限制的进程能够使用那些资源[文件和端口]);进程的可以被限制的;默认情况下,没有允许的行…

    Linux干货 2016-09-19
  • Linux文件系统的创建、检测、修复、分区等工具的使用

    一、文件系统管理 什么是文件系统?     我的理解是文件系统是对磁盘上的数据和文件结构的管理规范。     如果文件系统没有继承性,那么以前文件系统的数据就无法传到新的文件系统中。     Linux的文件系统有这么几种:ext2, ex…

    系统运维 2016-03-03
  • 第一篇文章

    第一篇文章。

    Linux干货 2016-12-26
  • 文件处理工具

    Linux的哲学思想之一是一切皆文件,所有系统中有许多文本文件。因此Linux有许多关于文本处理的命令。 cat命令 连接文件并打印到标准输出设备上,cat经常用来显示文件内容。 语法 cat [OPTION]… [FILE]… 常用选项 -A, –show-all #显示所有控制符 -b, –num…

    Linux干货 2016-08-08