關(guān)于加強(qiáng)門(mén)戶(hù)網(wǎng)站建設(shè)ip域名解析查詢(xún)
文章目錄
- 一、shell參數(shù)傳遞
- 二、shell中的特殊變量
- 三、shell中的函數(shù)
- 四、shell函數(shù)中的參數(shù)
一、shell參數(shù)傳遞
運(yùn)行 Shell 腳本文件時(shí)我們可以給它傳遞一些參數(shù),這些參數(shù)在腳本文件內(nèi)部可以使用$n的形式來(lái)接收,例如,$1 表示第一個(gè)參數(shù),$2 表示第二個(gè)參數(shù),依次類(lèi)推。
#!/bin/bashecho "參數(shù)1 = $1"
echo "參數(shù)2 = $2"
xhh@cluo:~/study/shell$ ./shell-5.sh abcd 12346
參數(shù)1 = abcd
參數(shù)2 = 12346
二、shell中的特殊變量
變量 | 含義 |
---|---|
$0 | 當(dāng)前腳本的文件名 |
$n(n≥1) | 傳遞給腳本或函數(shù)的參數(shù)。n 是一個(gè)數(shù)字,表示第幾個(gè)參數(shù)。例如,第一個(gè)參數(shù)是 $1,第二個(gè)參數(shù)是 $2。 |
$# | 傳遞給腳本或函數(shù)的參數(shù)個(gè)數(shù)。 |
$* | 傳遞給腳本或函數(shù)的所有參數(shù)。 |
$@ | 傳遞給腳本或函數(shù)的所有參數(shù)。當(dāng)被雙引號(hào)" "包含時(shí),$@ 與 $* 稍有不同,我們將在《Shell ? 和 *和 ?和@的區(qū)別》一節(jié)中詳細(xì)講解。 |
$? | 上個(gè)命令的退出狀態(tài),或函數(shù)的返回值,我們將在《Shell $?》一節(jié)中詳細(xì)講解。 |
$$ | 當(dāng)前 Shell 進(jìn)程 ID。對(duì)于 Shell 腳本,就是這些腳本所在的進(jìn)程 ID |
#!/bin/bashecho "Process ID: $$"echo "File Name: $0"echo "First Parameter : $1"echo "Second Parameter : $2"echo "All parameters 1: $@"echo "All parameters 2: $*"echo "Total: $#"
xhh@cluo:~/study/shell$ ./shell-6.sh adcd 12346
Process ID: 52421
File Name: ./shell-6.sh
First Parameter : adcd
Second Parameter : 12346
All parameters 1: adcd 12346
All parameters 2: adcd 12346
Total: 2
三、shell中的函數(shù)
linux shell 可以用戶(hù)定義函數(shù),然后在shell腳本中可以隨便調(diào)用。
#!/bin/bashadd(){echo "輸入第一個(gè)數(shù)字: "read aecho "輸入第二個(gè)數(shù)字: "read becho "兩個(gè)數(shù)字分別為 $a 和 $b !"return $(($a+$b))
}
add
echo "輸入的兩個(gè)數(shù)字之和為 $? !"
這里需要注意的是
$? 顯示最后命令的退出狀態(tài)。0表示沒(méi)有錯(cuò)誤,其他任何值表明有錯(cuò)誤。
$? 僅對(duì)其上一條指令負(fù)責(zé),一旦函數(shù)返回后其返回值沒(méi)有立即保存入?yún)?shù),那么其返回值將不再能通過(guò) $? 獲得。
比如
#!/bin/bashfunction demoFun1(){echo "這是我的第一個(gè) shell 函數(shù)!"return `expr 1 + 1`
}demoFun1
echo $?
echo $?
執(zhí)行結(jié)果
這是我的第一個(gè) shell 函數(shù)!
2
0
可以看到第二個(gè) $? 并沒(méi)有正確的返回出函數(shù)的執(zhí)行結(jié)果,而是返回的一個(gè)0.證明函數(shù)沒(méi)有錯(cuò)誤。
四、shell函數(shù)中的參數(shù)
#!/bin/bashadd(){echo "第一個(gè)參數(shù)為 $1 !"echo "第二個(gè)參數(shù)為 $2 !"echo "第十個(gè)參數(shù)為 $10 !"echo "第十個(gè)參數(shù)為 ${10} !"echo "第十一個(gè)參數(shù)為 ${11} !"echo "參數(shù)總數(shù)有 $# 個(gè)!"echo "作為一個(gè)字符串輸出所有參數(shù) $* !"
}
add 1 2 3 4 5 6 7 8 9 34 73
打印結(jié)果
注意, 10 不能獲取第十個(gè)參數(shù),獲取第十個(gè)參數(shù)需要 10 不能獲取第十個(gè)參數(shù),獲取第十個(gè)參數(shù)需要 10不能獲取第十個(gè)參數(shù),獲取第十個(gè)參數(shù)需要{10}。當(dāng)n>=10時(shí),需要使用${n}來(lái)獲取參數(shù)。
如果使用 $10來(lái)表示 會(huì)識(shí)別為 $1 + 字符 0 所以這里顯示為 10
比如我這里修改下順序
#!/bin/bashadd(){echo "第一個(gè)參數(shù)為 $1 !"echo "第二個(gè)參數(shù)為 $2 !"echo "第十個(gè)參數(shù)為 $21 !"echo "第十個(gè)參數(shù)為 ${10} !"echo "第十一個(gè)參數(shù)為 ${11} !"echo "參數(shù)總數(shù)有 $# 個(gè)!"echo "作為一個(gè)字符串輸出所有參數(shù) $* !"
}
add 1 3 2 5 4 6 7 8 9 34 73