1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > apscheduler 脚本执行失败_Bash编程入门-3:数学运算及脚本

apscheduler 脚本执行失败_Bash编程入门-3:数学运算及脚本

时间:2024-07-14 00:30:18

相关推荐

apscheduler 脚本执行失败_Bash编程入门-3:数学运算及脚本

说明:本文是对Vamei知乎文章《快速学习Bash》(/p/32692644)一文的学习笔记,根据个人理解调整了内容顺序,补充了一些注释和说明等内容。

4.2 数学运算

在Bash中,数字和运算符都被当做普通文本。所以你无法像C语言一样便捷地进行数学运算。比如执行下面的命令:

result=1+2 $echo $result

Bash并不会进行任何运算。它只会打印文本“1+2”。

在Bash中,你可以通过“$(())”语法来进行数值运算。在双括号中你可以放入整数的加减乘除表达式。Bash会对其中的内容进行数值运算。比如:

echo $((2 + (5*2))) #不能写成result=((2+5*2)),赋值符号似乎不能识别双括号,正确的的写法是result=$((2+5*2))

将打印运算结果12。此外,在$(())中,你也可以使用变量。比如:

$var=1echo $(($var+(5*2)))

将打印运算结果11。

我们可以用Bash实现多种整数运算:

加法:$(( 1 + 6 ))。结果为7。减法:$(( 5 – 3 ))。结果为2。乘法:$(( 2*2 ))。结果为4。除法:$(( 9/3 ))。结果为3。求余:$(( 5%3 ))。结果为2。乘方:$(( 2**3 ))。结果为8。

可以把数学运算结果存入变量:

result=$(( 1 + 2 ))echo $result

4.3 返回代码

在Linux中,每个可执行程序会有一个整数的返回代码。按照Linux惯例,当程序正常运行完毕并返回时,将返回整数0。在Shell中,我们运行了程序后,可以通过$?变量来获知返回码。

如果一个程序运行正常,那么这个程序将返回0,。

如果一个程序运行异常,那么这个程序将返回非0的返回代码。

比如删除一个不存在的文件:

rm none_exist.file echo $? #返回值为1

在Linux中,可以在一个行命令中执行多个程序。比如:

touch demo.file; ls;

在执行多个程序时,我们可以让后一个程序的运行参考前一个程序的返回代码。比如说,只有前一个程序返回成功代码0,才让后一个程序运行:

rm demo.file && echo "rm succeed" #双&代表前一句命令顺利执行后再执行后一个命令如果rm命令顺利运行,那么第二个echo命令将执行。

还有一种情况,是等到前一个程序失败了,才运行后一个程序,比如:

rm demo.file || echo "rm fail" #双竖线代表若果前一个命令执行失败,才执行第二个命令如果rm命令失败,第二个echo命令才会执行。

4.4 Bash脚本

还可以把多行的Bash命令写入一个文件,成为所谓的Bash脚本。当Bash脚本执行时,Shell将逐行执行脚本中的命令。编写Bash脚本,是我们开始实现Bash代码复用的第一步。

1)脚本的例子

用文本编辑器编写一个Bash脚本hello_world.bash:

#!/bin/bash #说明了该脚本使用的shell的具体位置,这里的是/bin/bash即Bash程序echo Hello echo World #这两行代码也可以一行 echo “Hello${IFS}World"

脚本的第一行说明了该脚本使用的Shell,即/bin/bash路径的Bash程序。脚本正文是两行echo命令。运行脚本的方法有两种:

# 方法1bash hello_world.bash# 方法2chmod u+x hello_world.bash./hello_world.bash#需要注意的是,如果用户不具有执行Bash脚本文件的权限,那么他将无法执行Bash脚本。#此时,用户必须更换文件权限,或者以其他身份登录,才能执行脚本。#当脚本运行时,两行命令将按照由上至下的顺序依次执行。Shell将打印两行文本:HelloWorld

Bash脚本是一种复用代码的方式。我们可以用Bash脚本实现特定的功能。由于该功能记录在脚本中,因此我可以反复地运行同一个文件来实现相同的功能,而不是每次想用的时候都要重新敲一遍命令。我们看一个简单的Bash脚本hw_info.bash,它将计算机的信息存入到名为log的文件中:

#!/bin/bash echo "Information of Vamei's computer:" > log #">"代表定向输出到log文件lscpu >> log# ">>"代表追加到log文件末尾uname –a >> log free –h >> log

2)脚本参数

和可执行程序类似,Bash脚本运行时,也可以携带参数。这些参数可以在Bash脚本中以变量的形式使用。比如test_arg.bash:

#!/bin/bash echo $0 #显示变量0 变量0一般就是脚本名echo $1 #显示变量1 变量1一般是脚本后的第一个参数,之后依次类推echo $2 #显示变量2

在Bash中,你可以用$0、$1、$2……的方式,来获得Bash脚本运行时的参数。我们用下面的方式运行Bash脚本:

bash test_arg.bash hello world

$0是命令的第一部分,也就是test_arg.bash。$1代表了参数hello,而$2代表了参数world。因此,上面程序将打印:

test_arg.bashhelloworld

如果变更参数,同一段脚本将有不同的行为。这大大提高了Bash脚本的灵活性。上面的hw_info.bash脚本中,我们把输出文件名写死成log。我们也可以修改脚本,用参数作为输出文件的文件名:

#!/bin/bash echo "Information of Vamei's computer:" > $1 lscpu >> $1 uname –a >> $1 free –h >> $1

借助参数,我们就可以自由地设置输出文件的名字:

bash hw_info.bash output.file

3)脚本的返回代码

和可执行程序类似,脚本也可以有返回代码。还是按照惯例,脚本正常退出时返回代码0。在脚本的末尾,我们可以用exit命令来设置脚本的返回代码。我们修改hello_world.bash:

#!/bin/bash echo Hello echo World exit 0 #设置脚本返回代码为0, 其实默认自动返回为0

其实在脚本的末尾加一句exit 0并不必要。一个脚本如果正常运行完最后一句,会自动的返回代码0。在脚本运行后,我们可以通过$?变量查询脚本的返回代码:

bash hello_world.bash echo $?

如果在脚本中部出现exit命令,脚本会直接在这一行停止,并返回该exit命令给出的返回代码。比如下面的demo_exit.bash:

#!/bin/bash echo hello exit 1 echo world

你可以运行该脚本,检查其输出结果,并查看其返回代码。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。