项目实训(树莓派)(十九)树莓派4B下的ubuntu系统下的Bash的使用和脚本初步-第五部分(Bash函数、文件包含等)

目录

Bash介绍

实验目的

实验环境

实验步骤与内容:

1.Bash 函数

2.Bash文件包含

3.Bash随机数

4.Bash当中的一些保留变量

5.Bash变量的操作

6.Bash的调试


Bash介绍

Bash是一个命令处理器,通常运行于文本窗口中,并能执行用户直接输入的命令。Bash还能从文件中读取命令,这样的文件称为脚本。和其他Unix shell 一样,它支持文件名替换(通配符匹配)、管道、here文档、命令替换、变量,以及条件判断和循环遍历的结构控制语句。

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell。

在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash

实验目的

掌握Bash命令处理器的使用

实验环境

树莓派4B、系统:Ubuntu 20.10系统 、vim软件

实验步骤与内容:

1.Bash 函数

Bash可以用户定义函数,然后在Bash脚本中可以随便调用。

Bash中函数的定义格式如下:

[ function ] funname [()]

{

    action;

    [return int;]

}

说明:

  • 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

下面的例子定义了一个函数并进行调用:

#!/bin/bash


demoFun(){
    echo "This is a fun"
}
echo "-----start-----"
demoFun
echo "-----end-----"

执行此脚本,输出结果如下:

下面的示例定义一个带有return语句的函数:

#!/bin/bash

funWithReturn(){
    echo "add alg"
    echo "input first num: "
    read aNum
    echo "input second num: "
    read anotherNum
    return $(($aNum+$anotherNum))
}
funWithReturn
echo "add is  $? !"

执行结果如下:

函数的返回值通过$!来得到。

注意:所有的函数都必须在使用前进行定义。调用函数使用函数名来调用。

函数参数

在Bash中,调用函数时可以向其传递参数。在函数体内部,可以通过 $n 的形式来获取参数的值,例如,$1表示第一个参数。

 示例如下:

#!/bin/bash

funWithParams(){
    echo "$1"
    echo "$2"
    echo "$3"
    echo "all params have $# "
    echo "all params is $* "
}
funWithParam 1 2 3 

输出结果为:

下面有几个命令可以来处理参数:

参数功能说明
$#得到函数总共有多少参数
$*显示所有向脚本传递的参数
$$显示当前脚本运行进程的ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

$? 仅对其上一条指令负责,一旦函数返回后其返回值没有立即保存入参数,那么其返回值将不再能通过 $? 获得。

#!/bin/bash
function demoFun1(){
    echo "This is demofun1"
    return `expr 1 + 1`
}

demoFun1
echo $?

function demoFun2(){
 echo "This is demofun2"
 expr 1 + 1
}

demoFun2
echo $?
demoFun1
echo "-----"
echo $?
    

输出结果如下:

通过上面的结果可以看到最后因为在调用demoFun1函数后加了一句echo命令,这也就导致最后一句$?获得的结果为0。

调用 demoFun2 后,函数最后一条命令 expr 1 + 1 得到的返回值($?值)为 0,意思是这个命令没有出错。所有的命令的返回值仅表示其是否出错,而不会有其他有含义的结果。

第二次调用 demoFun1 后,没有立即查看 $? 的值,而是先插入了一条别的 echo 命令,最后再查看 $? 的值得到的是 0,也就是上一条 echo 命令的结果,而 demoFun1 的返回值被覆盖了。

同时函数和命令的执行结果可以作为条件语句使用。Bash语言中0代表true,0以外的值代表false。

示例代码如下:

#!/bin/bash

function demofun1(){
    return 0
}

function demofun2(){
    return 1
}

if demofun1
then 
   echo true
else
   echo false
fi

if demofun2
then 
   echo true
else
   echo false
fi

输出结果如下:

将函数作为条件语句交给 if 判断,得出返回值为 0 时,依然为 true,而返回值只要不是 0,条件语句都判断为 false。

2.Bash文件包含

Bash和其他编程语言差不多也可以包含一些外部的脚本。可以比较方便的封装一些公共的代码以便其他的文件也可以使用

语法格式如下所示:

. filename   
或
source filename

注意:点号和文件名之间要有空格

示例代码如下:

1.创建两个Bash脚本文件:

testfile1.sh的代码:

#!/bin/bash

animal="cat"

testfile2.sh的代码:

#!/bin/bash

. ./test1.sh
#或
# source ./test1.sh

echo "you favourite animal is:$animal"

执行testfile2.sh脚本,输出结果如下:

you favourite animal is:cat

注意:被包含的文件testfile1.sh不是必须要有可执行权限          

3.Bash随机数

Bash当中也提供了随机数这个功能。示例代码如下:

#!/bin/bash 

r=$RANDOM 
echo $r

上述代码可以在执行的时候随机的打印出来一个在1到65536之间的整数。

4.Bash当中的一些保留变量

保留变量功能说明
$IFS变量中保存用于分割输入参数的分割字符,默认是空格。
$PATH存储当前 Bash的默认路径字符串。
$HOME存储当前用户的根目录路径。
$PS1代表第一个系统提示符
$PS2代表第二个系统提示符
$PWD表示当前的工作路径
$EDITOR表示系统的默认编辑器名称。
$BASH表示当前Bash的路径名称字符串

5.Bash变量的操作

Bash当中一些对变量的操作,下面主要讲解一下对于${num}命令的一些新功能。

参数功能说明
${num-default} 这个命令表示如果num变量还没有设置,就会保持num没有设置的状态,返回设置的默认值default
${num=default}这个命令是如果num没有设置,就会直接去后面的defalut默认值
${num+other} 表示如果num已经设置了值,就会返回other的值,否则返回null(空)
${num?error}表示如果变量 num已经设置,则返回该变量的值,否则就将后面的 error 输出到标准错误输出上
${num#pattern}和${num##pattern删除变量 num 中最短/最长的和 pattern 相匹配的最早的字符串
${num%pattern}, ${num%%pattern}删除变量 num 中最短/最长的和 pattern 相匹配的最晚(也就是最靠右)的字符串
${num:n} 表示删除变量num的前n个字符
${num:n:m}表示变量 num 中去掉前 n 个字符后的剩余字符串的前 m 个字符
${num/a/b}表示将变量 num 中第一个出现的 a 字符串替换为 b 字符串
${var//a/b}表示将变量 $var 中出现的所有 a 字符串全部都替换为 b 字符串

6.Bash的调试

查看一个出错的 BASH 脚本到底错在什么地方,可以帮助程序员找出脚本中的错误,这是十分有用且方便的。

bash -x bash-script

另外用 trap 语句可以在 BASH 脚本出错退出时打印出一些变量的值,以供程序员检查。trap 语句必须作为继 "#!/bin/bash" 后的第一句非注释代码,一般 trap 命令被写作: trap 'message $checkvar1 $checkvar2' EXIT。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值