shell编程值之函数和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

select和if选择语句的使用

#!/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

select和case

#!/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

函数

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

函数和shell程序的差异

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

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

语法一:

function f_name {

函数体

}

语法二:

function f_name () {

函数体

}

语法三:

f_name (){

函数体

}

函数有两种返回值:

函数的执行结果返回值:

(1)      使用echo或printf命令进行输出

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

函数的退出码状态:

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

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

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

return 0 无错误返回

return 1-255 有错误返回

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

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

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

利用函数显示用的uid及shell类型

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

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

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

载入函数的方法

. filename 或source filename(两者之间的差别,在于前者定于变量不会加载到环境变量中去,而后者则加入到环境变量中)

删除函数的方法

使用unset function_name跟删除变量一样

函数参数

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

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

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

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

#!/bin/bash

#

fab() {

if[ $1 -eq 1 ] ;then

echo-n  "1 "

elif  [ $1 -eq 2 ] ;then

echo -n "1 "

else

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

fi

}

for i in {1..10};do

fab$i

echo

done

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

时间: 2024-10-24 21:19:04

shell编程值之函数和select的使用的相关文章

shell编程continue break 函数的return

跳出循环和函数返回值 一.退出循环 在shell编程中,通常退出循环有两种方法: contine:是结束本次执行的循环,默认是contine 1,当contine 3 时,则表示进入第3层循环: break:是跳出本次循环,默认是break 1, 当break 2 时,则表示退出第二层循环,进入第3层循环: 因此在循环中:contine n = break n-1 [[email protected] ~/test]#vim for.sh #!/bin/bash for i in {1..3};

shell编程:向函数中传递参数

cal.sh sh cal.sh 20 + 10 实现这样传参的函数(shell不是一个严谨的编程语言,参数这种是不用定义的,函数中直接引用,shell执行中直接写) #!/bin/bash # cal() { case $2 in +) echo "`expr $1 + $3`" ;; -) echo "`expr $1 - $3`" ;; \*) echo "`expr $1 \* $3`" ;; /) echo "`expr $1

Shell编程关于函数要注意的几点

今天上午一个朋友突然QQ问到,shell编程中的函数为什么return只能是整数,怎么样才能将函数的执行结果返回并保存至某个变量中.其实这个问题很好解决---只需要认真了解下shell函数即可. shell编程中关于函数需要知道的几点 一.无论是在函数内,还是在函数外,$0的值都是该脚本本身.     [[email protected] ~]# cat test.sh     #!/bin/bash          echo $0          function testFunc(){

shell编程之服务脚本编写,文件锁以及信号捕获

shell脚本编程是linux运维工程师必备的技能,也是非常重要的一个技能,所以把shell编程学好,只有好处.基础语法我也就不讲了,学过C语言这些语言的,稍微看一下就能明白shell编程的基础,所以我们直接切入正题. 开班第20天: 今天的课程大纲: shell编程中的函数 编写一个自动挂载的脚本 利用autofs怎么实现自动挂载 文件锁和信号捕获trap sed流文件编辑器 详细讲解: shell编程中的函数 shell中,我们定义函数的方法有两种: 下面调用的时候,直接调用函数名就可以了

linux脚本编程之函数和select循环

一.select循环 select 循环主要用于创建菜单,以数字显示菜单的选项,用户输入被保存在内置变量REPLY 中.select通常和case一起用,并且是一个死循环,注意要设置退出循环的选项. 与for 循环类似,可以省略in list ,此时使用位置参量 语法: select 变量name  in 变量列表 do     action done [[email protected] blog2]# bash select.sh 1) begin 2) stop 3) continue #

shell编程中for,while,util,case,select,break, continue用法详解

关于shell脚本的更多详细实例讲解请参考:http://www.cnblogs.com/yuexiaxiaoxi/category/646749.html Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for.while和until.while循环和for循环属于"当型循环",而until属于"直到型循环".循环控制符:break和continue控制流程转向. 参考:<Linux 与unix shell 编程指

shell编程之函数

函数:function 过程式编程:代码重用 模块化编程 结构化编程 把一段独立功能的代码当作一个整体,并为之一个名字:命名的代码段,此即为函数: 注意:定义函数的代码段不会自动执行,在调用时执行:所谓调用函数,在代码中给定函数名即可: 函数名出现的任何位置,在代码执行时,都会被自动替换为函数代码: 语法一: function  f_name  { ...函数体... } 语法二: f_name()  { ...函数体... } 函数的生命周期:每次被调用时创建,返回时终止: 其状态返回结果为函

(三)Linux Shell编程——Shell常用命令(输出、判断、循环、函数、包含)

3. 常用命令 3.1 输出 3.1.1 echo命令 echo是Shell的一个内部指令,用于在屏幕上打印出指定的字符串.命令格式: echo arg name="coding" echo '$name\"'+" ${name}" #原样输出 $name\"+ coding echo `date` #当前日期 3.1.2 printf命令 printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变

shell的编程结构体(函数、条件结构、循环结构)

1.1 shell函数 在shell中,函数可以被当作命令一样执行,它是命令的组合结构体.可以将函数看成是一个普通命令或者一个小型脚本. 首先给出几个关于函数的结论: (1).当在bash中直接调用函数时,如果函数名和命令名相同,则优先执行函数,除非使用command命令.例如:定义了一个名为rm的函数,在bash中输入rm执行时,执行的是rm函数,而非/bin/rm命令,除非使用"command rm ARGS". (2).如果函数名和命令别名同名,则优先执行别名.也就是说,在优先级