bash中函式的呼叫 變數的定義 函式遞迴 訊號

2021-09-08 17:26:44 字數 4686 閱讀 9861

方法1:

函式名()

方法2:

function 函式名()

1)呼叫函式列印「l like westos」

#!/bin/bash

function fun1()

fun1

2)

#!/bin/bash

function fun1()

count=1

while [ $count -le 5 ]

do fun1

count=$[ $count + 1 ]

done

echo "end of loop"

fun1

echo "end of script"

除錯 sh -x +函式名

#每次引用函式時,bash重新回到函式的定義

1)

#!/bin/bash

count=1

echo "before function definition"

function fun1()

while [ $count -le 5 ]

do fun1

count=$[ $count + 1 ]

done

echo "end of loop"

fun2

function fun2()

如果沒用定義函式就先使用 會出現報錯

2)

#!/bin/bash

function fun1()

fun1

function fun1()

fun1

function fun1()

echo "end"

1)預設退出狀態碼:預設情況下,函式的狀態碼時函式最後一條命令返回的退出狀態碼$?

就算前面的命令出錯 只要最後一條命令是對的 函式的退出碼就是對的

1)

#!/bin/bash

function fun1()

echo "test the function:"

fun1

echo "the exit status is : $?"

2)

#!/bin/bash

function fun1()

echo "test the function:"

fun1

echo "the exit status is : $?"

2)使用return命令

shell使用return命令來退出函式,並返回特定的退出狀態

#!/bin/bash

function db1()

db1echo "the new value is $?"

返回值在0–255之間

這個的函式值不會儲存到shell,即使後面繼續寫命令也沒用

3)使用函式輸出

將函式的輸出儲存在shell變數中,可以獲得任何型別的函式輸出並將其儲存到變數中

4)函式中使用變數

可以向函式中傳遞引數 函式名會在$0變數中定義,函式命令列上的任何引數都會通過$1,$2定義

$#來判斷傳給函式的引數專案

#!/bin/bash

#-1 $1 + $1 $1 + $2

function addem()

5)函式不能直接從命令列獲取指令碼的引數

1)

#!/bin/bash

function fun1()

if [ $# -eq 2 ];then

value=`fun1 $1 $2`

echo "the result is $value"

else

echo "usage:fun1 a b"

fi

任何地方都生效的變數,預設情況下,指令碼主體內定義全域性變數,函式內可以用,函式外也可以用

#!/bin/bash

function db1()

read -p "enter a value:" value

db1echo "the new value is:" $value

(函式外定義 函式內呼叫)

定義方法:local value

#!/bin/bash

function fun1()

temp=4

value=6

fun1

echo "the result is $result"

if [ $temp -gt $value ];then

echo "temp is larger"

else

echo "temp is smaller"

fi

(local定義區域性變數)

計算階乘

#!/bin/bash

read -p "請輸入數字:"num

result=1

for i in `seq $num`

do result=$[ $result * $i ]

done

echo "the result is:" $result

上面是沒有使用呼叫函式的**,若要使用函式呼叫,則**改為:

#!/bin/bash

read -p "請輸入數字:" num

function fun()

result=1

for i in `seq $num`

do fun

done

echo "the result is:" $result

換種思路

#!/bin/bash

function jc()

read -p "enter a value:" value

result=`jc $value`

echo "the jc of $value is: $result"

signal(前面有講過)

linux通過訊號來在執行系統上的程序之間通訊

也可以通過訊號來控制shell指令碼的執行

trap命令

#常用訊號 ctrl+c(終止程序) ctrl+z(暫停程序)

阻擋:trap 「echo westos」 2

取消:trap:2

檢視:stty -a

#列出中斷訊號與鍵盤的關係 : stty -a

#訊號遮蔽

trap 「」 2 #把2訊號置空

恢復:trap : 2

恢復方法2:trap - 2

trap 「echo -n 『you are typing ctrl+2』」 2

#!/bin/bash

echo "this is a test script~"

count=1

while [ $count -le 10 ]

do echo "loop #$count"

sleep 2

count=$[ $count + 1 ]

done

echo "this is the end of the script~"

trap - 2

echo "i just removed the trap"

2)捕捉指令碼的退出

#!/bin/bash

trap "echo byebye~" exit

count=1

while [ $count -le 5 ]

do echo "loop #$count"

sleep 2

count=$[ $count + 1 ]

done

xargs 獲取前面命令的執行結果

-exec

cat test | xargs

按ctrl+c 刪除檔案westos

touch /tmp/westos_$(date +%f-%n)

練習:先使用乙個虛擬機器當作跳板

使用被自動連線的兩個虛擬機器配鑰匙,把鑰匙分發給跳板機

使用另外一台測試機ssh跳板機

如果不是超級使用者 給乙個選單:1)172.25.254.100 2)172.25.254.200 3)exit

檢視uid是否為0 是0就是超級使用者

定義乙個遮蔽函式

先建立父程序:

cd /etc/profile.d

vim fu.sh

[ $uid -ne 0 ] && sh /mnt/tiaoban.sh

再建立子程序:

cd /mnt

vim tiaoban.sh

#!/bin/bash

trap "" int exit tstp term hup

}function main()

main

bash中的變數

bash變數型別 環境變數 本地變數 區域性變數 位置變數 特殊變數 內建 本地變數 varname value 作用域為整個bash程序可以使用 變數命名規範 1.只能含字母 數字和下劃線,並且以字母和下劃線開頭 2.最好不要跟系統已有的環境變數重名 3.見名知意 區域性變數 local varn...

Python函式中函式定義 呼叫 傳參 變數

1 定義函式的規則 2 定義函式語法 語法 def functionname parameters 函式文件字串 即函式說明 function suite 函式體 return expression 預設情況下,引數值和引數名稱是按函式宣告中定義的順序匹配起來的。3 函式呼叫 函式被定義後,本身是不...

bash中變數的巧用

鳥哥的私房菜 可以用乙個變數來代替長串的目錄,這樣即好記,也提高了效率。引用如下 若你有乙個常去的工作目錄名稱為 cluster server work taiwan 2005 003 如何 進行該目錄的簡化?答 在一般的情況下,如果你想要進入上述該目錄得要 cd cluster server wo...