shell指令碼之函式
1.Shell 函式有兩種語法形式:
function name {
commands
return
}
and
name () {
commands
return
}
這裡的 name 是函式名,commands 是一系列包含在函式中的命令。
兩種形式是等價的,可以交替使用。下面我們將檢視一個說明 shell 函式使用方法的指令碼:
輸出:1 #!/bin/bash 2 3 # Shell function demo 4 5 function funct { 6 echo "Step 2" 7 return 8 } 9 10 # Main program starts here 11 12 echo "Step 1" 13 funct 14 echo "Step 3"
step1
step2
step3
補充1:想讓函式fsum返回字串,可以echo "${a}+${b}=${c}"輸出出來,通過sum=`fsum`來捕獲,給變數sum賦值
your_name='qinjx'
str="Hello, I know your are \"${your_name}aa\"! \n"
echo ${str}
function fsum(){
a=1
b=2
c=3
echo "${a}+${b}=${c}"
}
sum=`fsum`
echo ${sum}
your_name='qinjx'
str="Hello, I know your are \"${your_name}aa\"! \n"
echo ${str}
function fsum(){
a=1
b=2
c=3
echo "${a}+${b}=${c}"
}
sum=`fsum`
echo ${sum}
補充二:想讓函式fsum返回字串,可以給一個全域性變數賦值
your_name='qinjx'
str="Hello, I know your are \"${your_name}aa\"! \n"//全域性變數str
echo ${str}
function fsum(){
a=1
b=2
c=3
str="${a}+${b}=${c}"
}
fsum
echo ${str}
補充三,函式返回整形值,只能通過$? 系統變數獲得,否則為空
function fSum()
{
echo $1,$2;
return $(($1+$2));
}
fSum
5 7;
total=$(fSum
3 2);
echo $total,$?;
5,7
3,2
5
|
2.區域性變數
區域性變數只能在定義它們的 shell 函式中使用,並且一旦 shell 函式執行完畢,它們就不存在了。
擁有區域性變數允許程式設計師使用的區域性變數名,可以與已存在的變數名相同,這些變數可以是全域性變數, 或者是其它 shell 函式中的區域性變數,卻不必擔心潛在的名字衝突。
這裡有一個例項指令碼,其說明了怎樣來定義和使用區域性變數:
#!/bin/bash
# local-vars: script to demonstrate local variables
foo=0 # global variable foo
funct_1 () {
local foo # variable foo local to funct_1
foo=1
echo "funct_1: foo = $foo"
}
funct_2 () {
local foo # variable foo local to funct_2
foo=2
echo "funct_2: foo = $foo"
}
echo "global: foo = $foo"
funct_1
echo "global: foo = $foo"
funct_2
echo "global: foo = $foo"
正如我們所看到的,通過在變數名之前加上單詞 local,來定義區域性變數。這就建立了一個只對其所在的 shell 函式起作用的變數。在這個 shell 函式之外,這個變數不再存在。當我們執行這個指令碼的時候, 我們會看到這樣的結果:
[[email protected] ~]$ local-vars
global: foo = 0
funct_1: foo = 1
global: foo = 0
funct_2: foo = 2
global: foo = 0
我們看到對兩個 shell 函式中的區域性變數 foo 賦值,不會影響到在函式之外定義的變數 foo 的值。
這個功能就允許 shell 函式能保持各自以及與它們所在指令碼之間的獨立性。這個非常有價值,因為它幫忙 阻止了程式各部分之間的相互干涉。這樣 shell 函式也可以移植。也就是說,按照需求, shell 函式可以在指令碼之間進行剪下和貼上。
3.你的 .bashrc 檔案中的 shell 函式
Shell 函式完美地替代了別名,並且實際上是建立個人所用的小命令的首選方法。別名 非常侷限於命令的種類和它們支援的 shell 功能,然而 shell 函式允許任何可以編寫指令碼的東西。 例如,如果我們喜歡 為我們的指令碼開發的這個 report_disk_space shell 函式,我們可以為我們的 .bashrc 檔案 建立一個相似的名為 ds 的函式:
ds () {
echo “Disk Space Utilization For $HOSTNAME”
df -h
}