作为程序员一定要保持良好的睡眠,才能好编程

Linux Shell函数定义与调用

发布时间:2019-12-13



一、Shell函数定义格式


shell函数定义格式,各部分说明如下:


[ function ]等中括号括起来部分----表示可选(即可有可无)


your_function_name部分----为函数名


your_shell_commands部分----为函数代码;shell一般以行为单位,但可以使用“\”换行,也可以在单行内使用“;”作为分隔符


return int部分----shell函数可以有返回值,但只能返回整数不能返回字符串


[ function ] your_function_name()

{

    your_shell_commands;

    [return int;]

}



二、基本函数定义与调用

本节程序实现函数定义与调用,注意调用函数是不要使用括号(即如testFun()是不对的),代码如下:



testFun{
    echo "helloworld!"
}
testFun


image.png



三、函数传参调用



本节程序实现向被调用函数传递参数,$0是运行该脚本的shell传递的参数从$1开始、传递多个参数是以空格分隔,代码如下:


testFun(){
    echo $1
}

param="helloworld!"
testFun $param


image.png


除了可以通过$n形式获取第n个参数外,还可以使用以下几个写法:

image.png



四、传递有空格参数

testFun(){
    echo $1
}

param="hello world!"
testFun $param


image.png

可以看到只有空格前的“hello”被打印了出来,空格后的“world!”并没被打印出来(实际上空格后的"world!"被识别成了$2)


要传递有空格的参数也简单,在传递时加上双引号即可(单引号就不被认为是变量了所以不能用单引号)




五、返回字符串

可以看到成功获取到了‘success“。但同时也可以看到这种做法获取到的被调用函数的所有输出,单要返回值到得单独解析一下


另外的一种做法是直接用一个变量,shell的变量都是全局的在被调用函数中赋值的变量在调用函数处也可获取,

testFun(){
    echo "helloworld!"
    echo "success"
}

return_value=$(testFun)
echo "$return_value"



image.png




1.显示所有的tag

git tag


2.查看某个版本系列的tag

git tag -l 'v1.0.*'


3.创建标签

git tag -a v1.0.0 -m "内容:v1.0.0"


4.查看标签的详情,可以看到你commit的内容

git show v0.0.6


4.推送标签

git push origin v1.0.0


5.删除标签


删除本地

git tag -d v1.0.0

删除远程的

git push origin :refs/tags/v1.0.0



查看远程tags

[songyongzhan@localhost syzdiseaseadmin]$ git ls-remote --tags origin

a23bb1e62b59868bade1d58c503de80d6e393657refs/tags/v1.0.0

1ffce8b24659bee9f9aa836f7ef538f500cbad1frefs/tags/v1.0.0^{}

165ac992c50b9d0443928d8b6f3874f442270533refs/tags/v1.0.1

991bed8f15b7eb5d6b6ef995bf5a1c45038268farefs/tags/v1.0.1^{}

728a9ba0350ec883ed4c07ec0ec0661bb5a37195refs/tags/v1.0.2

a94fe30603c55e09ca8bc7e01f4f4982e030b025refs/tags/v1.0.2^{}



refs/tags/v8.9.9^{}


git ls-remote --tags origin | tail -n 1 | awk  '{print $2}'


git ls-remote --tags origin | awk '{print $2}' | awk -F '[/]' '{print $3}' | awk -F '^' '{print $1}' | sort -r -t '.' -k 2r -k 3r | head -n 3

v8.9.9

v8.9.9

v8.9.8


git ls-remote --tags origin | awk '{print $2}' | awk -F '[/]' '{print $3}' | awk -F '^' '{print $1}' | sort -n -t '.' -k 1r


git ls-remote --tags origin | awk '{print $2}' | awk -F '[/]' '{print $3}' | awk -F '^' '{print $1}' | sort -n -t '.' -k 2r -k 3rn |head -n 10



git ls-remote --tags origin | awk '{print $2}' | awk -F '[/]' '{print $3}' | awk -F '^' '{print $1}' | sort -n -t '.' -k 1,1r -k 2,2nr -k 3,3nr |head -n 10


linux 计算


expr 两个变脸之间必须有空格

((i=$j+$k))    等价于 i=`expr $j + $k`

((i=$j-$k))     等价于   i=`expr $j -$k`

((i=$j*$k))     等价于   i=`expr $j \*$k`

((i=$j/$k))     等价于   i=`expr $j /$k`


Let expressions 执行一个或多个表达式。表达式中的变量前不必有$.如果表达式中包含了空格或其他特殊字符,则必须引起来。


例:let “I = I + 1” 或 let i=i+1


 


算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。Shell中常用的数学运算符如下所示。


— +:对两个变量做加法。


— -:对两个变量做减法。


— *:对两个变量做乘法。;


— /:对两个变量做除法。


— **:对两个变量做幂运算。


— %:取模运算,第一个变量除以第二个变量求余数。


— +=:加等于,在自身基础上加第二个变量。


— -=:减等于,在第一个变量的基础上减去第二个变量。


— *=:乘等于,在第一个变量的基础上乘以第二个变量。


— /=:除等于,在第一个变量的基础上除以第二个变量。


— %=:取模赋值,第一个变量对第二个变量取模运算,再赋值给第一个变量。


在使用这些运算符时,需要注意到运算顺序的问题。例如输入下面的命令,输出1+2的结果。


echo 1+2


Shell并没有输出结果3,而是输出了1+2。在shell中有三种方法可以更改运算顺序。


— 用expr改变运算顺序。可以用echo `expr 1 +2`来输出1+2的结果,用expr表示后面的表达式为一个数学运算。需要注意的是,`并不是一个单引号,而是“Tab”键上面的那个符号。


— 用let指示数学运算。可以先将运算的结果赋值给变量b,运算命令是b=let 1 + 2。然后用echo$b来输出b的值。如果没有let,则会输出1+2。


— 用$[]表示数学运算。将一个数学运算写到$[]符号的中括号中,中括号中的内容将先进行数学运算。例如命令echo$[1+2],将输出结果3。


下面是一个shell程序实例,实现数学函数S=3(xy)+4x2+5y+6的运算。在程序中以位置变量的方式输入x与y的值。程序的编写步骤如下所示。


 在主菜单中打开一个终端。在终端中输入“vim”命令打开VIM。


 在VIM中按“i”键进入插入模式,然后输入下面的代码。


代码4-2  数学运算实例:\源文件\04\4.4.sh


#!/bin/bash


#4.4.sh


s=0                                    #定义一个求和变量,初值为0。


t=`expr$1**$2`                        #用expr改变运算顺序,求x的y次方。


t=$[t*3]                               #t乘以3。


s=$[s+t]                               #结果相加。


t=$[$1**2]                             #求x的平方。


t=$[t*4]                               #结果乘以4。


s=$[s+t]                               #结果相加。


t=`expr$2*5`                          #求5y的值。


s=$[s+t]                               #结果相加。


s=$[s+6]                               #结果加上6。


echo$s                                #输出结果。


echo$((a%b))                          #取余


 在这个程序中,需要注意算术运算的写法。如果没有expr或$[]更改运算顺序,则会将运算式以字符串的形式赋值,而不会赋值运算结果。


 按“Esc”键返回到普通模式。然后输入“:w 4.4.sh”保存文件。


 输入“:q”命令,按“Enter”键退出VIM。


 在终端中,输入下面的命令对4.4.sh文件添加可执行权限。


chmod +x 4.4.sh


 输入下面的命令运行程序。在命令中需要输入两个参数。


./4.4.sh 2 4


 程序会完成S=3(xy)+4x2+5y+6的数学运算并输出结果,结果如下所示。


90


echo "v8.9.9"| awk -F '[.]' '{gsub($(NF-1)"\."$NF,"");print}'


echo $b |awk -F'/' '{gsub($(NF-1)"/"$NF,"");print}'





使用awk分割字符串并且获取分割后的最后一个字符串


示例:从字符串"you-me-he"中获取he


echo "you-me-he" |awk -F '[-]' '{print $NF}'