Shell函数

Shell函数

系统函数

系统自带的函数,Linux自带的一些命令就是系统已经封装好的函数,下面简单介绍两个系统函数用法

basename:用于打印末尾目录或者文件的基本名称

查看基本用法

[root@zookeeper1 shell]# basename --help Usage: basename NAME [SUFFIX]   or:  basename OPTION... NAME... Print NAME with any leading directory components removed. If specified, also remove a trailing SUFFIX.  Mandatory arguments to long options are mandatory for short options too.   -a, --multiple       support multiple arguments and treat each as a NAME   -s, --suffix=SUFFIX  remove a trailing SUFFIX   -z, --zero           separate output with NUL rather than newline       --help		显示此帮助信息并退出       --version		显示版本信息并退出  Examples:   basename /usr/bin/sort          -> sort   basename include/stdio.h .h     -> stdio   basename -s .h include/stdio.h  -> stdio   basename -a any/str1 any/str2   -> str1 followed by str2 

basename 目录名/文件名:获取末尾目录名或者文件名

[root@zookeeper1 shell]# basename /home/root/ root [root@zookeeper1 shell]# basename /home/root/java java 

basename 文件名 文件后缀:获取末尾文件名称,同时去掉文件后缀

[root@zookeeper1 shell]# basename /home/root/java/test.java .java test 

basename -s 文件后缀 文件名:-s选项和上面一条的命令效果一样

[root@zookeeper1 shell]# basename -s .java /home/root/java/test.java test 

basename -a 目录1/文件1 目录2/文件2:-a选项可以同时输出多个目录或者文件名称

[root@zookeeper1 shell]# basename -a /home/root/java/test.java /home/root/java/hello.java test.java hello.java [root@zookeeper1 shell]# basename -a -s .java /home/root/java/test.java /home/root/java/hello.java  test hello 

dirname:去除文件名中的非目录部分

dirname命令读取指定路径名保留最后一个/及其后面的字符,删除其他部分,并写结果到标准输出。如果最后一个/后无字符,dirname 命令使用倒数第二个/,并忽略其后的所有字符

查看基本用法

[root@zookeeper1 shell]# dirname --help 用法:dirname [选项] 名称... Output each NAME with its last non-slash component and trailing slashes removed; if NAME contains no /'s, output '.' (meaning the current directory).    -z, --zero     separate output with NUL rather than newline       --help		显示此帮助信息并退出       --version		显示版本信息并退出  Examples:   dirname /usr/bin/          -> /usr   dirname dir1/str dir2/str  -> dir1 followed by dir2   dirname stdio.h            -> . 

实战

[root@zookeeper1 shell]# cat route.sh  #!/bin/bash  # 输出不带后缀的文件名称 echo 文件名:$(basename $0 .sh) # 输出文件的绝对路径 echo 文件绝对路径:$(cd $(dirname $0);pwd) [root@zookeeper1 shell]# ./route.sh  文件名:route 文件绝对路径:/home/user01/java/shell 

自定义函数

基本语法([ ] 里面表示是可选值)

[ function ] funname[()] {  	Action 	[return int]  } 

注意

  • 必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行,不会像其它语言一 样先编译
  • 函数返回值,只能通过 $? 系统变量获得,可以显示加:return 返回;如果不加,将 以最后一条命令运行结果,作为返回值;只能return 数值,且数值范围是 0-255

实战

[root@zookeeper1 shell]# cat fun.sh  #!/bin/bash  function sum(){ 	sum=$[$1+$2] 	# 这里不能直接返回sum,因为返回值范围是0-255,一旦sum的值超过255则返回的值不准备 	# return sum  	# 可以直接输出sum 	echo $sum }  read -p 请输入第一个数: a read -p 请输入第二个数: b  # 直接调用函数输出sum # sum $a $b  # 获取函数值再输出,这种方法更灵活,可以对函数值做一些运算或者其他操作 value=$(sum $a $b) echo $value   [root@zookeeper1 shell]# ./fun.sh  请输入第一个数:77 请输入第二个数:77 154