Java教程

Shell函数

本文主要是介绍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
这篇关于Shell函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!