apscheduler 脚本执行失败_Bash编程入门-3:数学运算及脚本
說(shuō)明:本文是對(duì)Vamei知乎文章《快速學(xué)習(xí)Bash》(https://zhuanlan.zhihu.com/p/32692644)一文的學(xué)習(xí)筆記,根據(jù)個(gè)人理解調(diào)整了內(nèi)容順序,補(bǔ)充了一些注釋和說(shuō)明等內(nèi)容。
4.2 數(shù)學(xué)運(yùn)算
在Bash中,數(shù)字和運(yùn)算符都被當(dāng)做普通文本。所以你無(wú)法像C語(yǔ)言一樣便捷地進(jìn)行數(shù)學(xué)運(yùn)算。比如執(zhí)行下面的命令:
result=1+2 $echo $resultBash并不會(huì)進(jìn)行任何運(yùn)算。它只會(huì)打印文本“1+2”。
在Bash中,你可以通過(guò)“$(())”語(yǔ)法來(lái)進(jìn)行數(shù)值運(yùn)算。在雙括號(hào)中你可以放入整數(shù)的加減乘除表達(dá)式。Bash會(huì)對(duì)其中的內(nèi)容進(jìn)行數(shù)值運(yùn)算。比如:
echo $((2 + (5*2))) #不能寫(xiě)成result=((2+5*2)),賦值符號(hào)似乎不能識(shí)別雙括號(hào),正確的的寫(xiě)法是result=$((2+5*2))將打印運(yùn)算結(jié)果12。此外,在$(())中,你也可以使用變量。比如:
$var=1 echo $(($var+(5*2)))將打印運(yùn)算結(jié)果11。
我們可以用Bash實(shí)現(xiàn)多種整數(shù)運(yùn)算:
加法:$(( 1 + 6 ))。結(jié)果為7。減法:$(( 5 – 3 ))。結(jié)果為2。乘法:$(( 2*2 ))。結(jié)果為4。除法:$(( 9/3 ))。結(jié)果為3。求余:$(( 5%3 ))。結(jié)果為2。乘方:$(( 2**3 ))。結(jié)果為8。
可以把數(shù)學(xué)運(yùn)算結(jié)果存入變量:
result=$(( 1 + 2 )) echo $result4.3 返回代碼
在Linux中,每個(gè)可執(zhí)行程序會(huì)有一個(gè)整數(shù)的返回代碼。按照Linux慣例,當(dāng)程序正常運(yùn)行完畢并返回時(shí),將返回整數(shù)0。在Shell中,我們運(yùn)行了程序后,可以通過(guò)$?變量來(lái)獲知返回碼。
如果一個(gè)程序運(yùn)行正常,那么這個(gè)程序?qū)⒎祷?,。
如果一個(gè)程序運(yùn)行異常,那么這個(gè)程序?qū)⒎祷胤?的返回代碼。
比如刪除一個(gè)不存在的文件:
rm none_exist.file echo $? #返回值為1在Linux中,可以在一個(gè)行命令中執(zhí)行多個(gè)程序。比如:
touch demo.file; ls;在執(zhí)行多個(gè)程序時(shí),我們可以讓后一個(gè)程序的運(yùn)行參考前一個(gè)程序的返回代碼。比如說(shuō),只有前一個(gè)程序返回成功代碼0,才讓后一個(gè)程序運(yùn)行:
rm demo.file && echo "rm succeed" #雙&代表前一句命令順利執(zhí)行后再執(zhí)行后一個(gè)命令 如果rm命令順利運(yùn)行,那么第二個(gè)echo命令將執(zhí)行。還有一種情況,是等到前一個(gè)程序失敗了,才運(yùn)行后一個(gè)程序,比如:
rm demo.file || echo "rm fail" #雙豎線代表若果前一個(gè)命令執(zhí)行失敗,才執(zhí)行第二個(gè)命令 如果rm命令失敗,第二個(gè)echo命令才會(huì)執(zhí)行。4.4 Bash腳本
還可以把多行的Bash命令寫(xiě)入一個(gè)文件,成為所謂的Bash腳本。當(dāng)Bash腳本執(zhí)行時(shí),Shell將逐行執(zhí)行腳本中的命令。編寫(xiě)B(tài)ash腳本,是我們開(kāi)始實(shí)現(xiàn)Bash代碼復(fù)用的第一步。
1)腳本的例子
用文本編輯器編寫(xiě)一個(gè)Bash腳本hello_world.bash:
#!/bin/bash #說(shuō)明了該腳本使用的shell的具體位置,這里的是/bin/bash即Bash程序 echo Hello echo World #這兩行代碼也可以一行 echo “Hello${IFS}World"腳本的第一行說(shuō)明了該腳本使用的Shell,即/bin/bash路徑的Bash程序。腳本正文是兩行echo命令。運(yùn)行腳本的方法有兩種:
# 方法1 bash hello_world.bash # 方法2 chmod u+x hello_world.bash ./hello_world.bash#需要注意的是,如果用戶不具有執(zhí)行Bash腳本文件的權(quán)限,那么他將無(wú)法執(zhí)行Bash腳本。 #此時(shí),用戶必須更換文件權(quán)限,或者以其他身份登錄,才能執(zhí)行腳本。 #當(dāng)腳本運(yùn)行時(shí),兩行命令將按照由上至下的順序依次執(zhí)行。Shell將打印兩行文本: Hello WorldBash腳本是一種復(fù)用代碼的方式。我們可以用Bash腳本實(shí)現(xiàn)特定的功能。由于該功能記錄在腳本中,因此我可以反復(fù)地運(yùn)行同一個(gè)文件來(lái)實(shí)現(xiàn)相同的功能,而不是每次想用的時(shí)候都要重新敲一遍命令。我們看一個(gè)簡(jiǎn)單的Bash腳本hw_info.bash,它將計(jì)算機(jī)的信息存入到名為log的文件中:
#!/bin/bash echo "Information of Vamei's computer:" > log #">"代表定向輸出到log文件 lscpu >> log # ">>"代表追加到log文件末尾 uname –a >> log free –h >> log2)腳本參數(shù)
和可執(zhí)行程序類似,Bash腳本運(yùn)行時(shí),也可以攜帶參數(shù)。這些參數(shù)可以在Bash腳本中以變量的形式使用。比如test_arg.bash:
#!/bin/bash echo $0 #顯示變量0 變量0一般就是腳本名 echo $1 #顯示變量1 變量1一般是腳本后的第一個(gè)參數(shù),之后依次類推 echo $2 #顯示變量2在Bash中,你可以用$0、$1、$2……的方式,來(lái)獲得Bash腳本運(yùn)行時(shí)的參數(shù)。我們用下面的方式運(yùn)行Bash腳本:
bash test_arg.bash hello world$0是命令的第一部分,也就是test_arg.bash。$1代表了參數(shù)hello,而$2代表了參數(shù)world。因此,上面程序?qū)⒋蛴?#xff1a;
test_arg.bash hello world如果變更參數(shù),同一段腳本將有不同的行為。這大大提高了Bash腳本的靈活性。上面的hw_info.bash腳本中,我們把輸出文件名寫(xiě)死成log。我們也可以修改腳本,用參數(shù)作為輸出文件的文件名:
#!/bin/bash echo "Information of Vamei's computer:" > $1 lscpu >> $1 uname –a >> $1 free –h >> $1借助參數(shù),我們就可以自由地設(shè)置輸出文件的名字:
bash hw_info.bash output.file3)腳本的返回代碼
和可執(zhí)行程序類似,腳本也可以有返回代碼。還是按照慣例,腳本正常退出時(shí)返回代碼0。在腳本的末尾,我們可以用exit命令來(lái)設(shè)置腳本的返回代碼。我們修改hello_world.bash:
其實(shí)在腳本的末尾加一句exit 0并不必要。一個(gè)腳本如果正常運(yùn)行完最后一句,會(huì)自動(dòng)的返回代碼0。在腳本運(yùn)行后,我們可以通過(guò)$?變量查詢腳本的返回代碼:
bash hello_world.bash echo $?如果在腳本中部出現(xiàn)exit命令,腳本會(huì)直接在這一行停止,并返回該exit命令給出的返回代碼。比如下面的demo_exit.bash:
#!/bin/bash echo hello exit 1 echo world你可以運(yùn)行該腳本,檢查其輸出結(jié)果,并查看其返回代碼。
總結(jié)
以上是生活随笔為你收集整理的apscheduler 脚本执行失败_Bash编程入门-3:数学运算及脚本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: td不允许自己扩展_一定要抱着大A不放手
- 下一篇: openssh升级sftp_CentOS