需求

.sh文件添加默认参数,默认为true

当参数为true时执行操作;当参数为false时不做处理。

涉及的知识点

参数的获取

shell使用一种默认的获取参数的方法:通过$n来获取参数。其中n是一个数字,$1就代表第一个参数。

值得注意的是shell中将$0定义为脚本名

比如:

#!/bin/bash

echo '脚本名是:'$0
echo '第一参数的名称是:'$1

执行结果:

clipboard.png

同时,这种获取参数的方式也使用于方法中获取参数,也就是说获取方法的第一个参数也是用$1这种方式。

if else语法

基本的语法跟我们已经学过的任何一门语言都差不多:

if [ xxx ]
then
    xxx
else
    xxx
fi

这里比较要注意的就是,if的判断条件由[]进行包围,并且,两个括号与条件之间,必须要有空格

另一个比较值得注意的就是,由于没有用于包围程序块的{}来标示if语句的结束,所以就需要使用fi来表示if语句的结束。

设置默认值

shell中允许多种设置默认值的方式,这里我只介绍我实现的一种:

var=${a:-b}

这种写法的含义就是,当变量a的值为null空串的时候,将b作为他的值,及var=b

实现需求

基本的语法都介绍完了,下面就可以开始实现我们的需求了。

这里还有一个需要注意的是,我们最后的实现会通过函数的调用的形式来实现,所以,中间还会涉及到向函数传参的问题。

这里我就给出在函数调用的前提下实现需求的例子。

#!/bin/bash

# 程序入口函数
main() {
    # 获取传入函数的第一个参数,默认为true
    temp=${1:-true}
    
    if [ $temp = true ]
    then 
        echo '我在这里做了一些事情!'
    fi
}

# 执行main函数,并将命令的第一个参数传给方法
main $1

clipboard.png

可以看到我在这里成功实现了我们想要的效果,但是还要一点问题。

虽然我们可以通过输入参数使程序什么也不做,但是也可以通过输入一些其他字符达到效果。所以我们还要完善一下:

#!/bin/bash

# 程序入口函数
main() {
    temp=${1:-true}
    if [ $temp == true ]
    then 
        echo '我在这里做了一些事情!'
    fi
}

# 执行main函数,并将命令的第一个参数传给方法
if [[ ! -n $1 || $1 == true || $1 == false ]]
then
    main $1 
else
    echo '参数未知错误!'
fi

可以看到,我们在执行main函数之前对它加了一些限制。只有在没有参数,或者参数为truefalse的时候才会执行函数。

clipboard.png

这里要注意的一点就是,当在if语句中添加多个条件的时候,一组[]变成了两组[[]]

总结

当我们接触一门新的语言的时候,有一些是这门语言独有的特性,而这些特性正是我们需要重点注意的地方。


相关参考:http://www.runoob.com/linux/l...


喵先生的进阶之路
348 声望21 粉丝