變量的定義和使用
變量類型
強類型:定義變量時必須指定類型、參與運算必須符合類型要求;調用未聲明變量會產生錯誤;
弱類型:無須指定類型,默認均爲字符型;參與運算會自動進行隱式類型轉換;變量無須事先定義可直接調用;
變量命名法則:
1、不能使程序中的保留字:例如if, for;
2、只能使用數字、字母及下劃線,且不能以數字開頭;
3、見名知義,
bash中的變量的種類:
根據變量的生效範圍等標準:
本地變量:生效範圍爲當前shell進程;對當前shell之外的其它shell進程,包括當前shell的子shell進程均無效;
環境變量:生效範圍爲當前shell進程及其子進程;
局部變量:生效範圍爲當前shell進程中某代碼片斷(通常指函數);
位置變量:$1, $2, ...來表示,用於讓腳本在腳本代碼中調用通過命令行傳遞給它的參數;
特殊變量:$?, $0, $*, $@, $#
本地變量:
變量賦值:name='value'
可以使用引用:
value:
(1) 可以是直接字串; name="username"
(2) 變量引用:name="$username"
(3) 命令引用:name=`COMMAND`, name=$(COMMAND)
變量引用:${name}, $name
"":弱引用,其中的變量引用會被替換爲變量值;
'':強引用,其中的變量引用不會被替換爲變量值,而保持原字符串;
顯示已定義的所有變量
set
銷燬變量:
unset name
環境變量:
變量聲明、賦值:
export name=VALUE
declare -x name=VALUE
變量引用:$name, ${name}
顯示所有環境變量:
export
env
printenv
銷燬:
unset name
bash有許多內建的環境變量:PATH, SHELL, UID, HISTSIZE, HOME, PWD, OLD, HISTFILE, PS1
只讀變量:
readonly name
declare -r name
位置變量:
在腳本代碼中調用通過命令行傳遞給腳本的參數;
$1, $2, ...:對應調用第1、第2等參數;
shift [n]
$0: 命令本身;
$* : 傳遞給腳本的所有參數;
$@: 傳遞給腳本的所有參數;
$#: 傳遞給腳本的參數的個數;
示例:判斷給出的文件的行數
#!/bin/bash
linecount="$(wc -l $1| cut -d' ' -f1)"
echo "$1 has $linecount lines."
bash的配置文件:
按生效範圍劃分,存在兩類:
全局配置:
/etc/profile
/etc/profile.d/*.sh
/etc/bashrc
個人配置:
~/.bash_profile
~/.bashrc
按功能劃分,存在兩類:
profile類:爲交互式登錄的shell提供配置
全局:/etc/profile, /etc/profile.d/*.sh
個人:~/.bash_profile
功用:
(1) 用於定義環境變量;
(2) 運行命令或腳本;
bashrc類:爲非交互式登錄的shell提供配置
全局:/etc/bashrc
個人:~/.bashrc
功用:
(1) 定義命令別名;
(2) 定義本地變量;
shell登錄:
交互式登錄:
直接通過終端輸入賬號密碼登錄;
使用“su - UserName”或“su -l UserName”切換的用戶
加載流程
/etc/profile --> /etc/profile.d/*.sh -->
~/.bash_profile --> ~/.bashrc --> /etc/bashrc //晚加載的會覆蓋掉先加載的相同變量
非交互式登錄:
su UserName
圖形界面下打開的終端
執行腳本
加載流程
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
編輯配置文件定義的新配置的生效方式:
(1) 重新啓動shell進程;
(2) 使用source或.命令進程