shell 之醬紫的變數
阿新 • • 發佈:2020-12-14
文章目錄
變數的型別
分為:預定義變數、環境變數、自定義變數、位置變數
預定義變數:預定義的特殊變數有著特殊的含義,使用者不可以更改,所有的預定義變數都由$符號和另外一個符號組成,常用的預定義特殊變數如下:
$$ 當前程序PID
$? 命令執行後的返回狀態.0 為執行正確,非 0 為執行錯誤
$# 位置引數的數量
$* 顯示所有的引數
[email protected] 顯示所有的引數
$! 上一個後臺程序的PID
拓展:$* 和 [email protected] 有什麼區別
如果不使用雙引號功能一樣
使用雙引號,[email protected] 獲取的就是引數的列表,每個引數都是獨立的字串
sleep 3000 & #符號"&"的意思是把命令放入後臺執行
全域性變數
a.sh 指令碼中執行 b.sh ,在 a.sh 中定義的變數,可以在 b.sh 中使用
可以讓當前shell和子shell都可以使用,成為全域性變數,必須使用 export 匯出
export 變數1 變數2 ...
常量
readonly aa=3
環境變數:shell在開始執行時已經定義好的,就是系統執行環境的一些設定
# env #env是 environment (環境) 的簡寫,所有的環境變數(包含自定義的環境變數)
# set #列出系統中所有的變數,包括自定義的變數
export 變數名 #使自定義的變數成為環境變數,才使用這個引數。環境變數擁有可繼承性:export之後就擁有繼承性環境變數可以被向下繼承
永久生效
寫到4個登陸指令碼中 ~/.bashrc ~/profile 更好放在/etc/profile.d/目錄下建立獨立的環境變數配置檔案
常用環境變數:USER UID HOME HOSTNAME PWD PS1 PATH
PATH:儲存所有命令所在的路徑
#子程序 僅會繼承父 shell 的環境變數, 不會繼承父 shell 的自定義變數
[[email protected] ~] # bash # 開啟一個子 shell
[[email protected] ~]# export a=hello # 在 子 shell 宣告一個環境變數
[[email protected] ~]# bash # 在子 shell 中再開啟一個 子 shell
[[email protected] ~]# echo $a # 變數可以生效
hello
[[email protected] ~]# exit # 退出 子 shell 的 子 shell
exit
[[email protected] ~]# exit # 退出 子 shell
exit
[[email protected] ~]# echo $a # 在 當前 shell 中, 其子 shell 宣告的環境變數是無效的
練習1
#!/usr/bin/bash
# 獲取主機基本資訊
time=`date +%F-%T`
ip=`ip a | grep ens33 | awk 'NR==2 {print $2}'`
echo "現在的時間是:" $time
echo "當前的使用者是:" $USER
echo "當前的使用者標識:" $UID
echo "當前的主機名稱是:" $HOSTNAME
echo "當前可用網絡卡IP是:" $ip
取當前系統分割槽剩餘空間:
df -Th | awk 'NR==6 {print $5}'
489M
取當前系統剩餘記憶體:
echo "現在的剩餘記憶體是:"`free -m |awk 'NR==2{print $4}'`
現在的剩餘記憶體是:16G
取當前cpu平均負載:
echo 現在cpu的`uptime | cut -d, -f4-` #-d指定分隔符,-f指定顯示區域,3-第三列以後(包括第三列)
現在cpu的 load average: 0.00, 0.01, 0.05
方式二:
echo 現在cpu的`uptime | awk -F "," '{print $3,$4,$5}'`
現在cpu的 load average: 0.00 0.01 0.05