bash-shell高级编程--退出和退出状态码
退出和退出狀態(tài)碼
大家都知道exit是用來退出一個(gè)腳本,既可以使用exit來結(jié)束一個(gè)腳本,像常用的C語言一樣,它也會返回一個(gè)值,這個(gè)值會傳遞給腳本的父進(jìn)程,父進(jìn)程會使用這個(gè)值做下一步的處理。
其實(shí)在linux中執(zhí)行任何一個(gè)命令都會返回一個(gè)退出碼,成功的命令返回0,而不成功的命令返回非零值,非零值通常通常都會解釋成一個(gè)錯(cuò)誤碼。
當(dāng)然腳本中的函數(shù)和腳本本身也會返回退出狀態(tài)碼,在腳本中最后執(zhí)行的命令決定腳本返回的狀態(tài)碼(就是exit之前的命令)
#!/bin/bashtldr ls. . .# 在執(zhí)行exit之前的一個(gè)命令決定腳本返回值狀態(tài)碼值 ls -l nameexit # exit $?不帶參數(shù)的exit命令和exit $?的效果是一樣的,就算你在腳本的末尾不寫exit效果也是一樣的
bash腳本中$?保存這最后執(zhí)行命令的退出狀態(tài)碼,當(dāng)函數(shù)返回之后,$?同樣保存函數(shù)中最后執(zhí)行的命令的退出狀態(tài)碼,這就是bash對函數(shù)返回值的處理方法,同樣,當(dāng)一個(gè)腳本退出$?保存了腳本的退出狀態(tài)碼,這個(gè)退出狀態(tài)碼就是腳本中最后執(zhí)行的命令的退出狀態(tài)碼。
#!/bin/bash echo hello echo $? # 退出狀態(tài)為0, 因?yàn)槊顖?zhí)行成功. lskdf # 無效命令. echo $? # 非零的退出狀態(tài), 因?yàn)槊顖?zhí)行失敗. echo exit 113 # 返回113退出狀態(tài)給shell. # 為了驗(yàn)證這個(gè)結(jié)果, 可以在腳本結(jié)束的地方使用"echo $?". # 執(zhí)行結(jié)果 andrew@andrew:/work/bash/src$ bash exit_example.sh hello 0 exit_example.sh: 行 5: lskdf: 未找到命令 127andrew@andrew:/work/bash/src$ echo $? 113使用$?測試腳本中命令執(zhí)行的結(jié)果,往往顯得特別的有用
!邏輯非操作,將會反轉(zhuǎn)命令或條件的測試結(jié)果,將會影響退出狀態(tài)碼
true # "true" 是內(nèi)建命令. echo "exit status of \"true\" = $?" # 0! true echo "exit status of \"! true\" = $?" # 1 # 注意: "!" 需要一個(gè)空格. # !true將導(dǎo)致"command not found"錯(cuò)誤# 如果一個(gè)命令以'!'開頭, 那么會啟用Bash的歷史機(jī)制.true !true # 這次就沒有錯(cuò)誤了, 也沒有反轉(zhuǎn)結(jié)果. # 它只是重復(fù)了之前的命令(true).總結(jié)
以上是生活随笔為你收集整理的bash-shell高级编程--退出和退出状态码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 医疗数据治理——构建高质量医疗大数据智能
- 下一篇: VS-code中的Postman替代品