天天看點

Linux程式設計(6)第二章:shell程式設計(5)函數 幾個指令1. 函數2. 指令

Linux程式設計(6)第二章:shell程式設計(5)函數 幾個指令

  • 1. 函數
    • 1.1 函數相關概念
    • 1.2 例子
  • 2. 指令

1. 函數

1.1 函數相關概念

  1. shell函數必須在調用一個函數前先對它進行定義。
  2. 使用 local 聲明局部變量
  3. 如果局部變量和前面的全局變量重名,那在函數内,局部會覆寫全局變量
  4. 函數如果沒有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. 指令

  1. break 跳出循環(for while until)
  2. :冒号,是一個空指令,偶爾當做true的一個别名

    while : 等于 while true

  3. continue 跳到下一次循環
  4. .點指令,用于在目前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>
           

繼續閱讀