>[success] # shell -- 位置參數變量
| 位置參數變量 | 作用 |
| --- | --- |
| $n | n為數字,$0代表命令本身,$1-$9代表第1到第9個參數,10以上的參數需要用大括號包含,如${10} |
| $\* | 這個變量代表命令中所有的參數,$\*把所有的變看數看成一個整體 |
| $@ | 這個變量也代表命令行中所有的參數,不過$@把每個參數進行區分 |
| $# | 這個變量代表命令行中所有參數的個數 |
| $? | 最后一次執行的命令的返回狀態。0表示正確執行,非0表示不正確執行 |
| $$ | 當前進程的進程號(PID) |
>[danger] ##### 案例
編寫下面的代碼,并保存為 test.sh:
~~~
#!/bin/bash
echo "Process ID: $$"
echo "File Name: $0"
echo "First Parameter : $1"
echo "Second Parameter : $2"
echo "All parameters 1: $@"
echo "All parameters 2: $*"
echo "Total: $#"
~~~
運行 test.sh,并附帶參數:
~~~
[mozhiyan@localhost demo]$ . ./test.sh Shell linux
Process ID: 5943
File Name: bash
First Parameter : Shell
Second Parameter : Linux
All parameters 1: Shell Linux
All parameters 2: Shell Linux
Total: 2
~~~
>[danger] ##### Shell $\*和$@之間的區別
[案例來自文章 Shell $\*和$@之間的區別 ](http://www.beylze.cn/shell/707.html)
~~~
$\* 和 $@ 都表示傳遞給函數或腳本的所有參數,我們已在《[shell](http://www.beylze.cn/shell/)特殊變量》一節中進行了演示,本節重點說一下它們之間的區別。
當 $\* 和 $@?不被雙引號`" "`包圍時,它們之間沒有任何區別,都是將接收到的每個參數看做一份數據,彼此之間以空格來分隔。
但是當它們被雙引號`" "`包含時,就會有區別了:
* `"$*"`會將所有的參數從整體上看做一份數據,而不是把每個參數都看做一份數據。
* `"$@"`仍然將每個參數都看作一份數據,彼此之間是獨立的。
比如傳遞了 5 個參數,那么對于`"$*"`來說,這 5 個參數會合并到一起形成一份數據,它們之間是無法分割的;而對于`"$@"`來說,這 5 個參數是相互獨立的,它們是 5 份數據。
如果使用 echo 直接輸出`"$*"`和`"$@"`做對比,是看不出區別的;但如果使用 for 循環來逐個輸出數據,立即就能看出區別來。
~~~
* 關于 for 循環的用法請猛擊:Shell for循環和for int循環詳解
編寫下面的代碼,并保存為 test.sh:
~~~
#!/bin/bash
echo?"print?each?param?from?\"\$*\""
for?var?in?"$*"
do
????echo?"$var"
done
echo?"print?each?param?from?\"\$@\""
for?var?in?"$@"
do
????echo?"$var"
done
~~~
運行 test.sh,并附帶參數:
~~~
\[mozhiyan@localhost demo\]$ . ./test.sh a b c d
print each param from "$\*"
a b c d
print each param from "$@"
a
b
c
d
~~~
從運行結果可以發現,對于`"$*"`,只循環了 1 次,因為它只有 1 分數據;對于`"$@"`,循環了 5 次,因為它有 5 份數據。
- 安裝-VMware 虛擬機
- 遠程連接
- Windows -- wsl
- Linux -- 認識 Linux 和操作系統
- Linux -- Linux 和 windows 對比
- Linux -- 命令提示符
- Linux -- 文件目錄
- Linux -- 文件類型
- Linux -- 絕對和相對路徑
- Linux -- 常用快捷鍵
- Linux -- 三種幫助命令
- 幫助命令 -- man
- 幫助命令 -- help
- 幫助命令 -- info
- Linux -- 指令
- alias -- 設置別名
- history -- 查看歷史命令
- cd -- 更改目錄(切換文件夾)
- pwd -- 打印目錄
- ls -- 列出文件內容
- mkdir -- 創建文件夾
- rmdir -- 刪除一個空的目錄
- touch -- 創建普通文件/修改時間
- cp -- 復制粘貼
- mv -- 移動和重名
- rm -- 刪除
- cat/tac -- 查看純文本文件
- more/less -- 分頁讀取信息
- head -- 從文本開頭查看
- tail -- 從文本結尾查看
- cut -- 提取片段
- sort -- 排序
- uniq -- 去重
- wc -- 統計文件的行數、單詞、字節數
- tr -- 替換、縮減或刪除字符
- find -- 文件查找
- grep -- 文件當中匹配字符
- 管道 -- |
- locate -- 第三方文件查找
- whereis -- 查找二進制/源代碼文件 路徑
- which -- 查找環境變量
- 壓縮和解壓
- ln -- 鏈接
- wget -- 下載指定的url資源
- 重定向 -- << /< />/> >
- 邏輯控制 -- &&
- echo -- 輸出指定內容
- date/cal -- 查看日期和日歷
- Linux -- 進程管理
- Linux-- ps 指令
- vi/vim - 文本編輯器
- 更多
- Linux-- 開關機命令
- Liunx -- 退出登錄
- Linux-- 查看登錄用戶信息
- Linux -- 環境變量
- Linux -- 用戶
- Linux -- 文件管理
- 文件權限設置 -- chmod
- 更改文件的擁有者 -- chown
- 默認權限 -- umask
- Linux -- 用戶
- 新建/刪除用戶 -- useradd/userdel
- 修改用戶屬性 -- usermod/chage
- 新建/刪除用戶組 -- groupadd/groupdel
- 用戶切換 -- su/sudo
- 用戶/用戶組的配置文件
- 用戶家目錄被刪除解決
- last、 lastlog命令查看用戶詳細的登錄信息
- Linux -- shell
- Linux -- 管道符號
- shell -- 執行
- shell -- 變量
- shell -- 字符串
- shell -- 數組
- Shell -- declare 設置變量屬性
- shell -- 數學計算
- shell -- 變量作用域
- shell -- 位置參數變量
- shell -- read
- shell - if 語句
- shell -- test
- shell -- case
- Linux -- 循環
- Linux -- 軟件包管理