變量、條件、循環、函數、數組、sed、awk
function --> 函數
語法格式:
//函數名
function_name () {
//函數體,在函數中執行的命令行
commands…
//參數返回,return語句可選的
//如果使用return語句,後面跟的值0-255;
//如果未使用,則以函數的最後一條命令的運行結果作爲返回值。
return int :
}
function_name {
commands...
}
向函數中傳遞參數:
位置變量:
$0 :表示當前腳本的文件名
$# :顯示一共有多少個參數
$@ :顯示所有的參數
$1 :表示第一個參數
$2 :表示第二個參數
調用函數:
pass 函數名 one two three
執行結果:
pass.sh
3
one two three
one
two
one
局部變量和全局變量:
a=1
//全局變量
function a {
b=2
//這裏的b並不是局部變量,而是全局變量
//如何在函數體內定義局部變量:
local a=2
local b=3
//local命令 將全局變量變爲局部變量
echo $b
echo $a
}
a
echo $a
echo $b //輸出結果爲空,因爲b是在函數體內定義的
系統變量:$FUNCNAME:表示當前函數的名稱
Tom(){
echo $FUNCNAME
}
Jerry ( ) {
echo $FUNCNAME
Tom
}
Jerry
執行結果:
Jerry
Tom
//執行b函數的過程:
b ( ) {
echo $FUNCNAME
a ( ) {
echo $FUNCNAME
}
a
}
b
return:
//如果使用return語句,後面跟的值0-255;
//如果未使用,則以函數的最後一條命令的運行結果作爲返回值。
檢查一下某個進程是否存在?
checkpid ( ) {
local i
//定義了局部變量
for i in $*
do
[ -d "/proc/$i" ] && return 0
done
return 1
}
//進程存在返回0 不存在返回1
checkpid $pid1 $pid2
if [ $? = 0 ] ;then
echo "is running"
else
echo "not running"
fi
/proc 目錄 :虛擬目錄,系統內存的映射
屏蔽主機的Ping命令:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
函數調用的幾種特殊情況:
$$ : shell本身的PID,就是腳本運行的當前進程ID號
$! :後臺運行的最後一個進程的進程ID號
1.函數體中調用其他函數
2.將函數放入後臺
3.遞歸調用函數函數體內調用自己
fork炸彈: .(){.|.&};.