带参数的函数

1>位置参数

  在上节中,checkFileExiist.sh脚本中定义了checkFileExist函数,但是可以看到这个脚本实际上写死了FILE变量,这会造成想要判断不同的文件是否存在时,需要修改脚本中的FILE 变量——也就是要对代码本身的内容进行修改,这也是典型的代码和数据没有分开而导致的问题。事实上,可以通过定义带参数的函数解决这个问题。在shell中,向函数传递参数也是使用位置参数来实现的。

  使用带参数的函数修改之前的checkFileExist.sh脚本为checkFileExist_v2.sh,注意后面执行脚本时的传参方式。
带参数的函数

执行脚本时,通过直接向脚本传递文件全路径的方式传递参数
以看到可这种方式不会因为测试文件的不一样而修改脚本本身的内容,非常简单

下面的例子可以接受两个参数:$1$2,该脚本将计算出$1$2次方的值。
带参数的函数

计算2的2次方
带参数的函数

计算3的3次方
带参数的函数


2>指定位置参数值

  除了在脚本运行时给脚本传入位置参数外,还可以使用内置命令set命令给脚本指定位置参数的值(又叫重置)。一旦使用set设置了传入参数的值,脚本将忽略运行时传入的位置参数(实际上是被set命令重置了位置参数的值)。
带参数的函数

运行结果如下
  给脚本传入参数 a b c d e f ,但是由于脚本运行时“重置”了位置参数的值所以打印出来的位置参数为脚本中设置的值
带参数的函数


移动位置参数

  在shell中使用shift命令移动位置参数,shift命令可以让位置参数左移
一位,如下
带参数的函数

运行结果
带参数的函数

  可以在shift命令后跟上向左移动的位数,比如说shift2就是将位置参数整体向左移动两位,将上面的脚本修改一下后,运行结果如下:
  如果将shift_03.sh脚本中的shift改为shift 2,则位置参数将会每次移动两位运行结果如下
带参数的函数

  下面的例子是利用shift来计算脚本中所有参数的和。
带参数的函数

执行结果
带参数的函数