Shell 编写自定义函数和获取参数的方法

2017-04-18 0 By admin

在使用 Shell 编写脚本文件时,如果我们可以通过自定义函数,来降低代码的重复。

一、函数方法定义

[function] funname () {
action command:
[return int;]
}

1、function 用来声明函数,此声明函数的关键词可以省略。
2、return 只能返回0-255以内的数值。

二、函数调用的方法

直接使用函数名调用函数,不需要加小括号。函数名后加空格写入需要传入的实参。
funname arg1 arg2

三、函数参数相关

调用函数时,对函数传入实参。在编写函数时使用”$n”方式接受传入的参数。
function funname(){
echo "first arg:$1"
echo "second arg:$2"}
funname 1 2 3 4 5

其他运行状态参数列表

  • $# 传递到脚本的参数个数
  • $* 以一个单字符串显示所有向脚本传递的参数
  • $$ 脚本运行的当前进程ID号
  • $! 后台运行的最后一个进程的ID号
  • $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
  • $- 显示当前运行Shell的环境信息,可以使用echo $-查看。
  • $_ 上一条命令执行中使用到的参数。
  • $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

四、返回值

1、在调用的函数执行后,可以使用$?获取返回值,由return语句返回。
funname arg1
echo "return value:" $?

2、如果想要函数返回其他数据信息,可以使用echo返回值。
对变量赋值为函数执行的结果。
function funname(){
echo "the value"}
the_value=`funname`

五、编写函数示例

1、对每行内容中重复出现的信息进行去重;信息与信息之间有特定的分隔符号。
简单说就像:一篇英语短文中,去除每行重复出现的单词。
function line_word_uniq(){
cat $1| while read Line
do
Line1=`echo ${Line} | tr ' ' '\n' |sort|uniq `
#将分隔符替换为换行符,由sort,uniq去重
Line2=`echo ${Line1}|tr '\n' ' '`
#还原
echo ${Line2}
done}
line_word_uniq file_name

2、向数据库中插入数据
函数参数:数据类型,数据大小,时间,备注
function insertToMySQL() {
date_minute=${3/2019:/${date_string} }
date_minute=${date_minute/\*/00}
sql="insert into ${db_table} (hostname,kind,sum_access,sum_minute,total) values('NX1','$1','$2','${date_minute}',$4)"
echo ${sql}
/usr/bin/mysql -h${db_host} -u${user_name} -p${user_passwd} ${db_name} -e "${sql}"
}

3、字节单位转换
字节单位转换函数
SIZES=('B' 'KB' 'MB' 'GB' 'TB' 'PB')
function byteToSize() {
size_access=$1
i=0
while [ `echo "${size_access} > 1024.0" |bc` -eq 1 ]
do
size_access=`echo "scale=4;${size_access}/1024.0"|bc`
let i++
done
echo "${size_access}${SIZES[${i}]}"
}