一、系统函数
用户名日志加时间戳
[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