shell编程之函数以及函数的调用,变量的比较

shell作为一门脚本语言,就不得不和Python以及PHP相比较一下了,相比而言,shell的适用范围要窄很多,编写的过程类似Python十分灵活,同所有的高级编程语言一样,都可以通过函数封装一些变量和对变量处理流程所构成的一些逻辑,从而实现一些更高级的功能。

大部分shell脚本是通过调用操作系统的内置命令以及变量来满足工作需求的,但也有需要自定义变量,然后使用函数封装变量,改变shell脚本的执行流程,这期间会有许多的逻辑在内。

shell脚本内的函数写法:

#!/bin/bash
#! author zsk_john
a=10
b=7
function Number_Add() {
c=`expr $a + $b`
}
Number_Add
echo "$c"

函数的结构为:  function 函数名() 空格{

}

{}内的内容为函数体,在花括号内书写对变量的处理逻辑。对函数的调用是在函数体外,只写函数的名称,这一点和Python不同,Python调用函数需要加括号。

 以上脚本是一个十分简单的加法运算函数,变量时定义在函数外部的,表示a和b这两个变量是全局变量,也就是说,如果在这个函数后面在写别的功能函数,可以重复调用a和b这两个变量。

c变量是函数内的变量,调用后,提升为了全局变量(为什么是全局可看后面验证)。

函数调用不需要加(),直接写函数名称即可,定义函数的时候 按照规范需要书写function,但不写也不会报错(写了更容易阅读,一看就知道这是函数)。
 

脚本的执行流程为按行自上而下逐行执行,因此,这里特别要注意了,调用函数的部分一定要在函数的后面。

#!/bin/bash
#! author zsk_john
a=10
b=7
function Number_Add() {
c=`expr $a + $b`
}
Number_Add
echo "$c"

function cheng() {

d=`expr $c \* $a`
}
cheng
echo $d

这个脚本调用c变量和a变量相乘,赋予乘的值给d变量,然后打印d变量的值。以上两个脚本是加法运算和乘法运算。

下面是比较变量的值。

#!/bin/bash
#! author zsk_john
a=10
b=10
if [ $a == $b ];then
echo "a=b"
else
echo "a!=b"
fi

这两个变量a和b的值的类型都为整数,整数比较可用 -eq和 ==两种方式比较数值是否相等。那么,如果a和b的值为字符串类型,如何比较呢?

a="shiguang feishi"
b="shiguang feishi"
if [[ $a == $b ]];then
echo "a=b"
else
echo "a!=b"
fi
#结果为相等
#!/bin/bash
#! author zsk_john
a="shiguang feishi"
b="shiguang feishi"
if ( echo ${a} |grep -q "${b}" );then
echo "a=b"
else
echo "a!=b"
fi
#结果为相等
#!/bin/bash
#! author zsk_john
a="shiguang feishi"
b="shigudang feishi"
if [[ ${a} =~ "${b}" ]];then
echo "a=b"
else
echo "a!=b"
fi
#结果为不相等

以上三个实例,分别使用了==,=~,管道+grep过滤字符串的三种方法,其中的空格要严格按照示例书写,被比较的字符串不管是不是变量都需要双引号引起来(二,三示例)。

比较通用的方法是第一种,最为常见和方便。