變量就是用來儲存信息的
1、自定義變量,本地變量
2、環境變量
3、位置變量
4、特殊變量
變量的命名規則
變量名由字母、數字、下劃線組成。不能夠以數字開頭
本地變量也稱爲自定義變量
1、變量賦值
變量名=值 //注意:等號兩邊一定不能有空格
# a=25
# echo $a
25
反例:
# b = 52
bash: b: command not found
2、變量的聲明(瞭解) declare
declare
-a:表示定義數組
-r:定義只讀變量
-i:定義整型變量
1)聲明一個數組:
# declare -a arr
# arr[1]=10
# arr[10]=100
2)定義一個只讀變量
# declare -r a=123
# echo $a
123
# a=456
bash: a: readonly variable
3、變量的分類
1)本地變量
2)環境變量
變量的作用域:也叫變量的作用範圍
局部變量:本地變量比較自私,只能作用於當前shell
全局變量:環境變量是無私的,能夠作用於當前shell及由他派生的子shell
a、顯示所有變量
# set
PS1='[\u@\h \W]\$ ' //命令提示符
PS2='> ' //命令未輸入完成的標識
b、查看環境變量
# env
(1)本地變量定義
變量名=值
(2)環境變量定義
export 變量名=值
對於已經賦值的變量,如何變爲環境變量?export
# a=250
# echo $a
250
# export a
查看當前是第幾級shell?
# echo $SHLVL
小實驗:
# uplook="hello"
# export uplook //導出爲環境變量
# ksh //打開一個子shell
# echo $uplook
hello
# uplook="ha" //在子shell中修改變量值
# echo $uplook
ha
# exit
# echo $uplook //父shell中值未改變
hello
小實驗說明:a、將變量導出成環境變量後,變量的值可以作用於當前shell及它的子shell;
b、若子shell中修改該變量的值,只會影響到子shell的子shell,並不會影響到它的父shell。
4、調用變量、查看變量的值
echo $PATH
5、取消變量
# unset 變量名
# a=250
# unset a
# echo $a
位置變量
# cat /etc/passwd /etc/group
cat:$0
/etc/passwd:$1
/etc/group:$2
小腳本
# vim posivar.sh
#!/bin/bash
echo '$0=' $0
echo '$1=' $1
echo '$2=' $2
echo '$3=' $3
echo '$4=' $4
echo '$5=' $5
echo '$6=' $6
echo '$7=' $7
echo '$8=' $8
echo '$9=' $9
echo '$10=' $10
echo '$10=' ${10}
echo '$#=' $#
echo '$@=' $@
echo '$*=' $*
# chmod +x posivar.sh
# ./posivar.sh a b c d e f g h i j k
$0= ./posivar.sh
$1= a
$2= b
$3= c
$4= d
$5= e
$6= f
$7= g
$8= h
$9= i
$10= a0
$10= j
$#= 11
$@= a b c d e f g h i j k
$*= a b c d e f g h i j k
$0 —— 表示當前運行的腳本或命令名
$1-${10} —— 表示腳本或命令的位置參數
$# —— 參數的個數
$@、$* —— 參數的列表
特殊變量:
$? —— 上一條命令的返回結果,退出狀態
如果返回值是0,命令執行成功
如果返回值非0,命令執行失敗
$$ —— 查看當前shell的PID
# echo $$
10273
!$和$_ —— 表示上一條命令的最後一個參數
# ls /tmp/
# cd !$
cd /tmp/
變量的引用
{}
爲了避免發生歧義,將變量括起來
username="abcd"
id ${username}f