Linux程式設計(6)第二章:shell程式設計(5)函數 幾個指令
- 1. 函數
-
- 1.1 函數相關概念
- 1.2 例子
- 2. 指令
1. 函數
1.1 函數相關概念
- shell函數必須在調用一個函數前先對它進行定義。
- 使用 local 聲明局部變量
- 如果局部變量和前面的全局變量重名,那在函數内,局部會覆寫全局變量
- 函數如果沒有return顯示傳回值,那麼函數傳回值就是最後一條指令的退出碼
1.2 例子
[[email protected] hani]# vi footest.sh
#!/bin/sh
var="hani good"
foo(){
local var="hani handsome"
echo "$var"
}
foo
echo "$var"
exit 0
結果:
[[email protected]lhost hani]# ./footest.sh
hani handsome
hani good
例子2: 參數的例子
[[email protected] hani]# cat myname
#!/bin/sh
if_yes_or_no(){
echo "Is your name "$*" ?"
while true
do
echo -n "Enter yes or no: "
read x
case "$x" in
y | yes) return 0;;
n | no) return 1;;
*) echo "Your enter is error,enter yes or no"
esac
done
return 0
}
echo "para are $*"
if if_yes_or_no "$1"
then
echo "Hi $1,nice name"
else
echo "never mind"
fi
exit 0
結果:
[[email protected] hani]# ./myname hani pick
para are hani pick
Is your name hani ?
Enter yes or no: y
Hi hani,nice name
[[email protected] hani]# ./myname hani pick
para are hani pick
Is your name hani ?
Enter yes or no: n
never mind
2. 指令
- break 跳出循環(for while until)
-
:冒号,是一個空指令,偶爾當做true的一個别名
while : 等于 while true
- continue 跳到下一次循環
-
.點指令,用于在目前shell中執行指令
如 . ./test.sh
通常一個腳本執行一個外部指令或腳本時,它都會建立一個新的shell環境,指令将在
這個新的shell環境中執行,在指令執行完後,這個環境被丢棄,留下退出碼傳回給父shell。
但是使用點.指令或者source指令,使用的是調用該腳本的同一個shell。
例子:
兩個包含環境設定的檔案classic_set latest_set
他們分别對應兩個不同的開發環境。
[email protected] hani]# cat classic_set
#!/bin/sh
version=classic
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PS1="classic> "
[[email protected] hani]# cat latest_set
#!/bin/sh
version=latest
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PS1="latest version> "
結果:
每個腳本都是在目前shell中執行。
這使得腳本程式可以改變目前shell中的環境變量,即使腳本程式執行結束後,這些改變仍然有效。
[[email protected] hani]# . ./classic_set
classic> echo $version
classic
classic> ./latest_set
classic> echo $version
classic
classic> . ./latest_set
latest version> echo $version
latest
latest version>