1. 程式人生 > >shell 的return exit continue break語句

shell 的return exit continue break語句

return num #函式返回語句
exit num #出當前shell程序
continue #提前結束本次迴圈,作用同於c語言中的continue
break num #跳出第num層迴圈,num不寫時預設num=1,此時等價於c語言裡的break語句
需要注意兩點:
01) return 和exit後的num必須是一個0-255之間的整數,也就是說它只接受一位元組無符號整數,如果是大於這個範圍的整數,會自動擷取最後一個位元組,並且將這個位元組解析為無符號數,如1023->255, -1->254;如果num不是整數型別,則會報錯。並且在shell中,預設是命令返回0代表執行成功,非0代表命令執行失敗。
02)網上一般都說exit是退出shell指令碼,但其實是退出執行exit這條命令的shell程序,而不一定是包含exit這條命令的shell指令碼檔案,有一個很好的例子解釋這一點:

#!/bin/bash
func()
{
	echo "hello!"
	exit
}
ls | func
echo "hi!"

輸出:
hello!
hi!
將上面的 ls | func改成func後輸出是:
hello!
這是因為ls | func這條命令的執行,因為經過了一個管道,會用一個新的shell程序(子shell)去執行func這個函式,所以在func中用exit實際上是退出這個子shell,而不會退出執行此指令碼的shell程序,而如果沒有用管道,那麼就是當前shell程序去執行func這個函式,此時func中的exit會直接退出當前shell程序。所以exit並不一定是退出當前指令碼,只有當執行exit語句的shell程序和執行shell指令碼程序是同一個時,exit才會退出shell指令碼,如果不相同,則當前指令碼還會繼續i執行。總之就是exit是退出執行此語句的shell程序,不一定是退出包含此exit語句的指令碼檔案的執行。