Linux Shell程式設計(9)——特殊變數型別
區域性變數
區域性變數只在程式碼塊或一個函式裡有效 (參考函式裡的區域性變數)
環境變數
這種變數會影響Shell的行為和使用者介面
在大多數情況下,每個程式都會有一個"環境表", 它由一組由程式使用的環境變數組成。這樣看來,Shell看起來和其他的程式一樣。
每次一個Shell啟動時,它都會建立新的合適的環境變數。如果它增加或是更新一個環境變數,都會使這個Shell的環境表得到更新(譯者注:換句話說,更改或增加的變數會立即生效),並且這個Shell所有的子程式(即它執行的命令)能繼承它的環境變數。
分配給環境變數的總空間是有限的,如果建立太多的環境變數或有些環境變數的值太長而佔用太多空間會出錯。
如果一個指令碼要設定一個環境變數,則需要將它匯出(”exported”),也就是說要通知到指令碼的環境表。這就是export命令的功能。
一個指令碼只能匯出(export)變數到子程式,也就是說只能匯出到由此指令碼生成的命令或程式中。在一個命令列中執行的指令碼不能匯出一個變數影響到命令列的環境。子程式不能匯出變數到生成它的父程式中。
---
位置引數
命令列傳遞給指令碼的引數是: $0, $1, $2, $3 . . .
$0是指令碼的名字,$1是第一個引數,$2是第二個引數,$3是第三個,以此類推。[1] After $9, 在位置引數$9之後的引數必須用括號括起來,例如:${10}, ${11}, ${12}.
特殊變數$*和$@ 表示所有的位置引數。
例子:位置引數
由不同的執行名字來呼叫指令碼,一些指令碼能夠以不同的操作來執行。如果要能辦到這一點,指令碼需要檢查變數$0來確定指令碼是如何被呼叫的。也有可能存在符號連結的路徑來呼叫指令碼的情況。
區域性變數只在程式碼塊或一個函式裡有效 (參考函式裡的區域性變數)
環境變數
這種變數會影響Shell的行為和使用者介面
在大多數情況下,每個程式都會有一個"環境表", 它由一組由程式使用的環境變數組成。這樣看來,Shell看起來和其他的程式一樣。
每次一個Shell啟動時,它都會建立新的合適的環境變數。如果它增加或是更新一個環境變數,都會使這個Shell的環境表得到更新(譯者注:換句話說,更改或增加的變數會立即生效),並且這個Shell所有的子程式(即它執行的命令)能繼承它的環境變數。
分配給環境變數的總空間是有限的,如果建立太多的環境變數或有些環境變數的值太長而佔用太多空間會出錯。
如果一個指令碼要設定一個環境變數,則需要將它匯出(”exported”),也就是說要通知到指令碼的環境表。這就是export命令的功能。
一個指令碼只能匯出(export)變數到子程式,也就是說只能匯出到由此指令碼生成的命令或程式中。在一個命令列中執行的指令碼不能匯出一個變數影響到命令列的環境。子程式不能匯出變數到生成它的父程式中。
---
位置引數
命令列傳遞給指令碼的引數是: $0, $1, $2, $3 . . .
$0是指令碼的名字,$1是第一個引數,$2是第二個引數,$3是第三個,以此類推。[1] After $9, 在位置引數$9之後的引數必須用括號括起來,例如:${10}, ${11}, ${12}.
特殊變數$*和$@ 表示所有的位置引數。
例子:位置引數
#!/bin/bash
# 至少以10個引數執行這個指令碼,例如:
# ./scriptname 1 2 3 4 5 6 7 8 9 10
MINPARAMS=10
echo
echo "The name of this script is \"$0\"."
# 用./表示當前目錄
echo "The name of this script is \"`basename $0`\"."
# 去掉路徑名(檢視'basename'命令)
echo
if [ -n "$1" ] # 被測試的變數被雙引號引起
then
echo "Parameter #1 is $1" # 使用引號來使#被轉義
fi
if [ -n "$2" ]
then
echo "Parameter #2 is $2"
fi
if [ -n "$3" ]
then
echo "Parameter #3 is $3"
fi
# ...
if [ -n "${10}" ] # 大於 $9的引數必須用花括號括起來.
then
echo "Parameter #10 is ${10}"
fi
echo "-----------------------------------"
echo "All the command-line parameters are: "$*""
if [ $# -lt "$MINPARAMS" ]
then
echo
echo "This script needs at least $MINPARAMS command-line arguments!"
fi
echo
exit 0
由不同的執行名字來呼叫指令碼,一些指令碼能夠以不同的操作來執行。如果要能辦到這一點,指令碼需要檢查變數$0來確定指令碼是如何被呼叫的。也有可能存在符號連結的路徑來呼叫指令碼的情況。
相關文章
- Shell變數型別有哪些?linux運維shell程式設計變數型別Linux運維程式設計
- Linux Shell程式設計(4)——shell特殊字元(上)Linux程式設計字元
- Linux Shell程式設計(5)——shell特殊字元(下)Linux程式設計字元
- Linux Shell程式設計(10)——引用變數Linux程式設計變數
- Shell程式設計-shell變數1程式設計變數
- Linux Shell程式設計(6)——變數替換Linux程式設計變數
- Linux Shell程式設計(7)——變數賦值Linux程式設計變數賦值
- Linux Shell程式設計(8)——變數詳解Linux程式設計變數
- Linux Shell程式設計(14)——內部變數Linux程式設計變數
- Shell程式設計-02-Shell變數程式設計變數
- shell程式設計–bash變數程式設計變數
- shell程式設計(一)變數程式設計變數
- shell程式設計-高階變數程式設計變數
- Shell程式設計-04-Shell中變數數值計算程式設計變數
- Shell程式設計-shell變數2-位置變數和預定義變數程式設計變數
- Linux shell程式設計(一)shell指令碼中的變數詳解Linux程式設計指令碼變數
- shell程式設計–bash變數介紹程式設計變數
- Shell程式設計規範與變數程式設計變數
- Shell-變數高階用法 (3) 有型別變數變數型別
- Linux Shell程式設計(30)——別名Linux程式設計
- 01 shell程式設計之變數定義程式設計變數
- 01 shell程式設計規範與變數程式設計變數
- 9.bash shell程式設計程式設計
- Linux Shell程式設計(13)——數字常量Linux程式設計
- Shell常用的特殊位置引數變數說明變數
- Linux Shell程式設計(1)——shell程式設計簡介Linux程式設計
- shell程式設計學習筆記(二):Shell中變數的使用程式設計筆記變數
- shell中特殊變數$0 $1 $# $$ $! $?的涵義變數
- shell指令碼程式設計學習筆記——變數指令碼程式設計筆記變數
- shell程式設計之環境變數配置檔案程式設計變數
- Linux Shell變數Linux變數
- linux shell 程式設計Linux程式設計
- linux shell程式設計Linux程式設計
- Linux Shell程式設計(27)——子shellLinux程式設計
- Linux 程式設計之Shell程式設計(轉)Linux程式設計
- Linux之shell變數Linux變數
- Linux之shell程式設計Linux程式設計
- Linux Shell程式設計(1)Linux程式設計