shell筆記(二):位置參數(類似於java或c的形參)及特殊變量($0、$#、$*、$@、$?、$$)

Shell 特殊變量及其含義
變量 含義
$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,獲取成功

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章