方法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...