【shell】shell函数的应用与注意事项

希望各位不要白piao,点个赞或者刷个评论再走,还有【禁止转载】我个人觉得写的比较细,有基础的还是看一下黑体字的部分,因为我觉得还是很容易出错。话不多说讲什么我会先列出来,如果会了可以忽略本文章,省下时间去学习别的知识~

如果你有一定基础还是要看下黑体字的!!
如果你有一定基础还是要看下黑体字的!!
如果你有一定基础还是要看下黑体字的!!

这篇文章主要讲函数,如果有其他的疑惑,请参考我的其他文章,根据自己的需求去获取自己想要的答案(所有的文章开头和题目都会注明这篇文章写了什么)!

函数

和C语言、java类似,Shell中也有函数的概念,但是函数定义中没有返回值也没有参数列表。例如:

    #! /bin/sh
foo(){ 
	echo "Function foo is called";
	}
	
echo "-=start=-"
foo
echo "-=end=-"

注意函数体的左花括号’{‘和后面的命令之间必须有空格或换行,如果将最后一条命令和右花括号’}'写在同一行,命令末尾必须有;号。
在定义foo()函数时并不执行函数体中的命令,就像定义变量一样,只是给foo这个名字一个定义,到后面调用foo函数的时候(注意Shell中的函数调用不写括号)才执行函数体中的命令。Shell脚本中的函数必须先定义后调用,一般把函数定义都写在脚本的前面,把函数调用和其它命令写在脚本的最后(类似C语言中的main函数,这才是整个脚本实际开始执行命令的地方)。
Shell函数没有参数列表并不表示不能传参数,事实上,函数就像是迷你脚本,调用函数时可以传任意个参数,在函数内同样是用$0、$1、$2等变量来提取参数,此处可以参考我的另一篇博文:位置参数和特殊变量
函数中的位置参数相当于函数的局部变量,改变这些变量并不会影响函数外面的$0、$1、$2等变量。函数中可以用return命令返回,如果return后面跟一个数字则表示函数的Exit Status
下面这个脚本可以一次创建多个目录,各目录名通过命令行参数传入,脚本逐个测试各目录是否存在,如果目录不存在,首先打印信息然后试着创建该目录。

    #! /bin/sh
is_directory()
    {
      DIR_NAME=$1
      if [ ! -d $DIR_NAME ]; then # 判断是不是directory
        return 1
      else
        return 0
      fi
    }
for DIR in "$@"; do #遍历位置参数,如果看不懂砍我上面的博文连接
      if is_directory "$DIR"
      then :
      else
        echo "$DIR doesn't exist. Creating it now..."
        mkdir $DIR > /dev/null 2>&1 #创建文件夹,重定向错误输出
        if [ $? -ne 0 ]; then # 判断文件夹是否创建成功
          echo "Cannot create directory $DIR"
          exit 1
        fi
      fi
    done

注意:
is_directory()返回0表示真返回1表示假。$@的意思是所有传入的参数 还有一个重要的点就是 $#这个意思是传入所有参数的个数,再啰嗦一下如果还是不懂请参照我的另一篇博文:位置参数和特殊变量

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章