shell脚本的函数

Posted lambda-小张

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本的函数相关的知识,希望对你有一定的参考价值。

一、系统函数

用户名日志加时间戳

[root@hadoop scripts]# vim cmd_test.sh
#!/bin/bash

filename="$1"_log_$(date +%s)
echo $filenam
[root@hadoop scripts]# chmod +x cmd_test.sh 
[root@hadoop scripts]# . cmd_test.sh zhangsan
zhangsan_log_1660710993

1.basename

1)基本语法

basename [string / pathname] [suffix]

功能描述:basename 命令会删掉所有的前 缀包括最后一个(‘/’)字符,然后将字符串显示出来。 basename 可以理解为取路径里的文件名称

选项:

suffix 为后缀,如果 suffix 被指定了,basename 会将 pathname 或 string 中的suffix 去掉

2)案例实操

字符串剪切

[root@hadoop scripts]# basename /root/scripts/parameter.sh    #前面截取
parameter.sh
[root@hadoop scripts]# basename /root/scripts/afdfsg    #没有存在文件也可以截取
afdfsg
[root@hadoop scripts]# basename /root/scripts/parameter.sh .sh    #前后都截取
parameter

或者

[root@hadoop scripts]# vim parameter.sh
#!/bin/bash
echo '===============$n================'
echo scripts name:$(basename $0 .sh)
echo 1st parament: $1
echo 2nd parament: $2
echo '===============$#================'
echo parameter numbers: $#
echo '===============$*================'
echo $*
echo '===============$@================'
echo $@
[root@hadoop scripts]# ./parameter.sh a b
===============$n================
scripts name:parameter
1st parament: a
2nd parament: b
===============$#================
parameter numbers: 2
===============$*================
a b
===============$@================
a b

2.dirname

1)基本语法

dirname 文件绝对路径

(功能描述:从给定的包含绝对路径的文件名中去除文件名 (非目录的部分),然后返回剩下的路径(目录的部分))

dirname 可以理解为取文件路径的绝对路径名称

2)案例实操

截取路径最后一个/之前的路径

[root@hadoop scripts]# dirname /root/scripts/parameter.sh
/root/scripts
[root@hadoop scripts]# dirname ../scripts/parameter.sh
../scripts

或者

[root@hadoop scripts]# vim parameter.sh
[root@hadoop scripts]# cat parameter.sh
#!/bin/bash
echo '===============$n================'
echo scripts name:$(basename $0 .sh)
echo scripts path:$(cd $(dirname $0); pwd)    #前后执行命令,
echo 1st parament: $1
echo 2nd parament: $2
echo '===============$#================'
echo parameter numbers: $#
echo '===============$*================'
echo $*
echo '===============$@================'
echo $@
[root@hadoop scripts]# ./parameter.sh a b
===============$n================
scripts name:parameter
scripts path:/root/scripts
1st parament: a
2nd parament: b
===============$#================
parameter numbers: 2
===============$*================
a b
===============$@================
a b

二、自定义函数

1)基本语法

[ function ] funname[()]

        Action;

        [return int;]

2)经验技巧

(1)必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言一 样先编译。

(2)函数返回值,只能通过$?系统变量获得,可以显示加:return 返回,如果不加,将 以最后一条命令运行结果,作为返回值。return 后跟数值 n(0-255) 

3)案例实操

计算两个输入参数的和。

第一种方法,相加的超过255会报错

[root@hadoop scripts]# vim fun_test.sh
#!/bin/bash

function add()
	s=$[$1 + $2]
	echo "和:"$s


read -p "请输入第一个整数:" a
read -p "请输入第二个整数:" b

add $a $b
[root@hadoop scripts]# chmod +x fun_test.sh 
[root@hadoop scripts]# ./fun_test.sh 
请输入第一个整数:35
请输入第二个整数:67
和:102

第二种方法,相加的超过255不会报错,结果不对

[root@hadoop scripts]# vim fun_test.sh 
#!/bin/bash

function add()
	s=$[$1 + $2]
	return $s


read -p "请输入第一个整数:" a
read -p "请输入第二个整数:" b

add $a $b
echo "和:" $?
[root@hadoop scripts]# ./fun_test.sh 
请输入第一个整数:35
请输入第二个整数:45
和: 80
[root@hadoop scripts]# ./fun_test.sh 
请输入第一个整数:156
请输入第二个整数:237
和: 137

第三种,更加完整,还可以求平方

[root@hadoop scripts]# vim fun_test.sh 
#!/bin/bash

function add()
	s=$[$1 + $2]
	echo $s


read -p "请输入第一个整数:" a
read -p "请输入第二个整数:" b

sum=$(add $a $b)
echo "和的"$sum
echo "和的平方:"$[ $sum * $sum]
[root@hadoop scripts]# ./fun_test.sh 
请输入第一个整数:146
请输入第二个整数:237
和的383
和的平方:146689

以上是关于shell脚本的函数的主要内容,如果未能解决你的问题,请参考以下文章

Shell 函数

009-Shell 函数

shell脚本怎么生成运行日志

shell定义带参数的函数

shell脚本之函数的定义及使用

如何对shell脚本进行加密且不影响脚本运行