第二章 shell程序设计(2)

1.函数形式

function_name ()

{

   statements

}

示例:

#!/bin/sh

foo()

{

    echo“Function foo is executing”

}

echo “script starting”

foo

echo “script ended”

exit 0

注意:

(1)函数先定义后使用(放在最前面即可)。

(2)调用函数时,脚本程序的位置参数($*、$@、$#、$1、$2等)会被替换为函数的参数。当函数执行完毕后,这些参数会恢复为它们原先的值。

(3)函数中可以用return直接返回数字值,如果要返回字符串需要其他办法。主要办法有:将字符串存储到外部变量;函数体内echo字符串,函数外用result=”$(function)”形式捕获。

(4)如果return命令没有指定一个返回值,那么函数返回的就是执行的最后一条命令的退出码。

2.命令

(1)break:跳出一层循环。后面可以加数字表示跳出几层循环。

(2)冒号(:):一个空命令。也被用于简化逻辑条件,相当于一个true,但执行速度比true快。while true等同于while:。

(3)continue:使for,while或者until循环跳到下一次循环继续执行。

(4).命令:通常情况下,shell脚本程序会在一个新建的环境中执行,所以脚本程序对环境变量所做的任何修改都会丢失。而点命令让脚本程序就在本shell中执行。

示例:. ./test(两个点号之间有空格)

注意:第一个.是点命令,第二个是路径中的当前参数。

(5)echo命令:输出结尾带有换行符的字符串。

去掉换行符的解决方法:

echo –n “string to output” (linux和bash上不错的选择)或者

echo –e “string to output\c”

第二种方法echo –e确保启用了反斜线转义字符(如\c代表去掉换行符)

另外tr命令也可以删除换行符。

(6)eval:对参数进行求值

foo=10

x=foo

eval y=’$’$x

echo $y

输出结果为10,如果不加eval输出结果为foo。

eval y=’$’$x这句话$x前面的'$'有何作用,没有这个'$'怎么就得不到正确结果?

eval可读取一连串的参数,然后再依参数本身的特性来执行,参数不限数目,彼此之间用分号分开。那么evaly='$'$x  等同与 eval y="$"$x。‘ ’ ,或“ ” 的作用是告诉shell,有两个参数需要展开。第一次取参数时候,将$x 展开,得到foo,此时表达式可以理解为y=$foo,那么第二次在展开时候,就会对$foo 展开,那么就得到了10。

eval z='$'$x'$'$y也是可以的

(7)exec命令

1)用来将当前shell替换为一个不同的程序

例如:exec wall “Thanks for you.”

脚本中的这个命令会用wall命令替换当前的shell。

2)用来修改当前文件描述符

例如:exec 3< afile

这使得文件描述符3被打开以便从文件afile中读取数据。

(8)exti n命令

使得脚本程序以退出码n结束运行。

例如:[ -f .profile ] && exit 0 || exit 1

(9)export命令

export命令将作为它参数的变量导出到子shell中,并使之在子shell中有效。一般在shell中创建的变量在这个shell调用的下级(子)shell中是不可用的。

解释:如果有a和b两个shell程序,在a中定义了两个变量(其中一个变量前加了export),a的末尾调用了b,b的作用是打印出两个变量,那么只有前面加了export的变量可以被打印出来。

注:set –a 或 set –allexport命令将会到处它之后声明的所有变量。

(10)expr命令

expr命令将它的参数当做一个表达式来求值。

例如:x=’expr $x + 1’

反引号使得x取值为后面整个执行结果的值,也可以被替换为$(expr $x + 1)这种形式。

(11)printf命令

使用格式:printf “format string” parameter1 parameter2……

注:shell中所有的运算都是按照整数运算来进行的,不支持浮点数。

例如:# printf “%s %d\t%s” “Hi There” 15 people

输出:Hi There 15 people

注意:Hi There必须用双引号引起来作为一个参数,因为中间包含空格。

(12)return命令

return命令的作用是使函数返回,return命令只能返回一个数值参数,若没有指定参数,return将返回最后一条命令的退出码。

(13)set命令

set命令的作用是为shell设置参数变量,例如$1, $2等。

例如:set foo bar

set命令还可以用来控制shell的执行方式。其中最常用的命令格式是set–x,它让一个脚本程序跟踪显示它当前执行的命令。

(14)shift命令

shift不加数字则表示所有变量左移一个($2变为$1,$3变为$2,但是$0保持不变,$1丢弃);加数字表示左移的个数。$*,$@,$#等变量则会自动根据现有变量进行调整。

(15)trap命令

trap命令用于指定在接收到信号后将要采取的行动,常用的地方是在脚本程序被中断时完成清理工作。在命令符提示下输入trap–l可以查看信号的编号以及其关联的名称(使用信号名时需要省略SIG前缀)。

trap有两个参数,第一个是接收到指定信号时将要采取的行动,第二个是要处理的信号名。如果想重置某个信号的处理方式到其默认值,只需要trap– signal即可。如果忽略某个信号就使用trap ‘’ signal。

(16)unset命令

从环境中删除变量或者函数,但是不能删除shell定义的只读变量。

例如:foo=“Hello”;unset foo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值