變量 | 含義 |
---|---|
$0 | 當前腳本的文件名。 |
$n(n≥1) | 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是 $1,第二個參數是 $2。 |
$# | 傳遞給腳本或函數的參數個數。 |
$* | 傳遞給腳本或函數的所有參數。 |
$@ | 傳遞給腳本或函數的所有參數。當被雙引號" " 包含時,$@ 表示所有值的集合(多個), $* 表示所有值拼接以後的結果(一個) |
$? | 上個命令的退出狀態,或函數的返回值。 |
$$ | 當前 Shell 進程 ID。對於 Shell腳本,就是這些腳本所在的進程 ID。 |
位置參數
腳本文件傳入位置參數
- 創建demo.sh腳本文件
#!/bin/bash
echo "name: ${1}"
echo "age: ${2}"
- 執行test.sh並傳入參數
[root@centos shell]# ./demo.sh zhangshan 21
name:zhangshan
age:21
[root@centos shell]#
直接創建函數並傳入位置參數
- 創建fun1函數
[root@centos shell]# function fun1(){
> name=${1}
> age=${2}
> }
[root@centos shell]#
- 調用函數並傳入參數
注意:如果對應位置的參數沒有穿的話就爲空;
[root@centos shell]# fun1 zhangshan 21
name=zhangshan
age=21
[root@centos shell]#
特殊變量
腳本文件使用特殊變量(函數同理)
- 創建demo.sh腳本文件
#!/bin/bash
echo "第一個參數:${1}"
echo "第二個參數:${2}"
echo "參數個數:$#"
echo "所有參數:$*"
echo "所有參數(@符):$@"
echo "shell腳本名稱:$0"
echo "shell腳本進程ID:$$"
- 調用shell腳本文件
[root@centos shell]# ./demo.sh zhangshan 21
第一個參數:zhangshan
第二個參數:21
參數個數:2
所有參數:zhangshan 21
所有參數(@符):zhangshan 21
shell腳本名稱:./demo.sh
shell腳本進程ID:7674
- $*和$@的區別
首先都表示傳遞給函數或腳本的所有參數。
不同的是當$@被雙引號包圍時,$@相當於參數集合,$*則還是所有參數拼接成一個值
使用for循環可以直觀的看出來
- 編寫shell腳本(函數同理)
#!/bin/bash
echo "echo打印\"\$\*\":"${*}""
echo "循環\"\$\*\""
for param in "$*"
do
echo $param
done
echo "echo打印\"\$\@\":"${@}""
echo "循環\"\$\@\""
for param in "$@"
do
echo $param
done
- 結果
[root@centos shell]# sh demo.sh 第一個 第二個 第三個
echo打印"$\*":第一個 第二個 第三個
循環"$\*"
第一個 第二個 第三個
echo打印"$\@":第一個 第二個 第三個
循環"$\@"
第一個
第二個
第三個
從運行結果可以發現,對於"$*"
,只循環了 1 次,因爲它只有 1 分數據;對於"$@"
,循環了 3 次,因爲它有 3 份數據。
獲得方法返回值
- 編寫shell腳本
#!/bin/bash
function add(){
return `expr ${1} + ${2}`
}
add ${1} ${2}
echo $?
- 結果
[root@centos shell]# ./demo.sh 1 2
3
[root@centos shell]# ./demo.sh 22 33
55
[root@centos shell]#
輸入1和2放回3,輸入22和33返回55,獲取成功