變量之間不能有空格 空格是顯示分別出命令和參數(shù)
雙引號(hào)不具有強(qiáng)烈引用 不會(huì)改變?cè)刑匦?br> 單引號(hào)是具有強(qiáng)引用會(huì)把引住的東西變成字符串
增加變量的內(nèi)容
PATH="$PATH":/home/bin
PATH=${PATH}:/home/bin
shell環(huán)境下所有的環(huán)境變量及其內(nèi)容
env 列出所有的環(huán)境
set 列出系統(tǒng)所有的變量
export 接變量名 使自己定義變量轉(zhuǎn)成環(huán)境變量 這個(gè)可以使子程序來執(zhí)行父進(jìn)程的程序
shell變量
預(yù)定義變量
echo $! 可以查到上一個(gè)后臺(tái)命令對(duì)應(yīng)的進(jìn)程號(hào)
echo $$ 查出當(dāng)前的進(jìn)程號(hào)PID
echo $? 查出上一個(gè)命令是否執(zhí)行成功 0代表成功 非0代表沒執(zhí)行成功
bash的環(huán)境變量
login shell會(huì)讀取下面兩個(gè)文件
1.·/etc/profile· :這是系統(tǒng)整體設(shè)定辱揭,最好不要修改
2.·/.bash_profile或/.bash_login或~/.profile` :屬于個(gè)人的配置文件
/etc/profile 會(huì)主動(dòng)依序調(diào)用以下腳本文件:
/etc/inputrc :定義快捷鍵
/etc/profile.d/*sh :定義bash操作接口顏色挺庞、語系箱沦、命令別名等
etc/locale.conf :定義系統(tǒng)的默認(rèn)語系
bash 在讀完 /etc/profile 后,接下來會(huì)讀取以下3個(gè)文件扒寄,且只會(huì)讀去一個(gè),會(huì)按照以下順序優(yōu)先讀取
~/.bash_profile //會(huì)調(diào)用 ~/.bashrc 拟烫,
也會(huì)有新的環(huán)境變量在下面的文件中被添加
~/.bash_login
~/.profile
最終该编,~/.bashrc 才是最后被讀入到系統(tǒng)環(huán)境中的文件
讓這些環(huán)境變量文件中的變量等設(shè)置及時(shí)在當(dāng)前 shell 終端中生效,有下兩種方式
source ~/.bashrc
或者
. ~/.bashrc
/ect/profile 針對(duì)所有用戶生效
/etc/profile.d/*.sh
~/.bashrc 針對(duì)當(dāng)前用戶
eg
vim .bashrc 進(jìn)入這個(gè)后進(jìn)行編輯 添加一個(gè)user=‘hello world’后保存退出
然后執(zhí)行echo $user 會(huì)發(fā)現(xiàn)啥都沒有 出現(xiàn)這個(gè)情況是沒有在shell終端生效
那么你就得現(xiàn)執(zhí)行 source ~/.bashrc或者. ~/.bashrc 在終端進(jìn)行編譯后
然后你在執(zhí)行echo $user 這樣會(huì)輸出剛才編寫的后面的值
其他的配置文件
? /etc/man.config
這個(gè)文件最重要的就是定義了MANPATH 這個(gè)變量硕淑,它定義了man page 的路徑课竣;在以tarball的方式安裝軟件時(shí)有用
? ~/.bash_history
歷史命令記錄文件;記錄的數(shù)量與HISTFILESIZE變量有關(guān)置媳。在/etc/profile里
? ~/.bash_logout
記錄了當(dāng)我注銷bash后于樟,系統(tǒng)再幫我做完什么動(dòng)作后才離開的。
read
read [-pt] " 語句 "
-p 后面接提示符
-t 后面接等待的秒數(shù) 不在規(guī)定的秒數(shù)后會(huì)退出這個(gè)程序
數(shù)組變量類型
索引之能是數(shù)字
var=(1 2 3 4 5 6)
echo ${var[]}
括號(hào)里輸入(0-5) 會(huì)輸出對(duì)應(yīng)的值
括號(hào)里輸入*會(huì)輸出全部
${#var(@)}這樣是輸出這個(gè)數(shù)組的長(zhǎng)度
declare聲明關(guān)聯(lián)數(shù)組
declare -A
declare -A info 聲明關(guān)聯(lián)數(shù)組
info[name]=shark 添加索引 name 其對(duì)應(yīng)的值是 shark
info=([age]=18 [hobby]="mv rmb") 一次添加多個(gè)索引和值
echo ${info[name]} 顯示出名字
echo ${info[@]} 顯示出所有的值
echo ${info[*]} 顯示所有值
echo ${!info[@]} 顯示所有的索引
有一種方法是如果一個(gè)變量沒有設(shè)定的話可以由系統(tǒng)自己自己去獲取也可以自己設(shè)定一個(gè)值然后去輸出
這個(gè)方法是
var=${(str:-expr)} str代表自己輸入的值 expr是這個(gè)程序自己獲取的
假設(shè)str沒有設(shè)定或者為空字符串var=expr 反之str設(shè)定的話var=$str
時(shí)間運(yùn)算
// 計(jì)算 3 小時(shí)之后是幾點(diǎn)幾分
date +%T -d '3 hours'
// 任意日期的前 N 天拇囊,后 N 天的具體日期
date +%F -d "20190910 1 day"
date +%F -d "20190910 -1 day"
// 計(jì)算兩個(gè)日期相差天數(shù), 比如計(jì)算生日距離現(xiàn)在還有多少天
d1=$(date +%s -d 20180728)
d2=$(date +%s -d 20180726)
echo $(((d1-d2)/86400))