【基本知識補充】mysql
一句話歸納:變量是用來臨時保存數據的,該數據是能夠變化的數據。sql
【注意】shell
*變量名=====變量值*vim
變量名:用來臨時保存數據的數組
變量值:就是臨時的可變化的數據bash
[root@MissHou ~]# A=hello 定義變量A [root@MissHou ~]# echo $A 調用變量A,要給錢的,不是人民幣是美圓"$" hello [root@MissHou ~]# echo ${A} 還能夠這樣調用,無論你的姿式多優雅,總之要給錢 hello [root@MissHou ~]# A=world 由於是變量因此能夠變,移情別戀是常事 [root@MissHou ~]# echo $A 無論你是誰,只要調用就要給錢 world [root@MissHou ~]# unset A 不跟你玩了,取消變量 [root@MissHou ~]# echo $A 今後,我單身了,你能夠給我介紹任何人
雖然能夠給變量(變量名)賦予任何值;可是,對於變量名也是要求的!😒app
[root@MissHou ~]# A=hello [root@MissHou ~]# a=world [root@MissHou ~]# echo $A hello [root@MissHou ~]# echo $a world
[root@MissHou ~]# *A=hello -bash: *A=hello: command not found [root@MissHou ~]# ?A=hello -bash: ?A=hello: command not found [root@MissHou ~]# @A=hello -bash: @A=hello: command not found 特別說明:對於有空格的字符串給變量賦值時,要用引號引發來 [root@MissHou ~]# A=hello world -bash: world: command not found [root@MissHou ~]# A="hello world" [root@MissHou ~]# A='hello world'
[root@MissHou ~]# 1A=hello -bash: 1A=hello: command not found [root@MissHou ~]# A1=hello 注意:不能以數字開頭並不表明變量名中不能包含數字呦。
[root@MissHou ~]# A =123 -bash: A: command not found [root@MissHou ~]# A= 123 -bash: 123: command not found [root@MissHou ~]# A = 123 -bash: A: command not found [root@MissHou ~]# A=123 [root@MissHou ~]# echo $A 123
NTP_IP=10.1.1.1 DIR=/u01/app1 TMP_FILE=/var/log/1.log ... 說明:通常變量名使用大寫(小寫也能夠),不要同一個腳本中變量全是a,b,c等不容易閱讀
直接賦值給一個變量函數
[root@MissHou ~]# A=1234567 [root@MissHou ~]# echo $A 1234567 [root@MissHou ~]# echo ${A:2:4} 表示從A變量中第3個字符開始截取,截取4個字符 3456 說明: $變量名 和 ${變量名}的異同 相同點:均可以調用變量 不一樣點:${變量名}能夠只截取變量的一部分,而$變量名不能夠
[root@MissHou ~]# B=`date +%F` [root@MissHou ~]# echo $B 2019-04-16 [root@MissHou ~]# C=$(uname -r) [root@MissHou ~]# echo $C 2.6.32-696.el6.x86_64
目的:讓用戶本身給變量賦值,比較靈活。命令行
語法:read [選項] 變量名
調試
常見選項:
選項 | 釋義 |
---|---|
-p | 定義提示用戶的信息 |
-n | 定義字符數(限制變量值的長度) |
-s | 不顯示(不顯示用戶輸入的內容) |
-t | 定義超時時間,默認單位爲秒(限制用戶輸入變量值的超時時間) |
舉例說明:
用法1:用戶本身定義變量值,即在變量前加read [root@MissHou ~]# read name harry [root@MissHou ~]# echo $name harry #在自定義變量時添加提示語句: [root@MissHou ~]# read -p "Input your name:" name Input your name:tom [root@MissHou ~]# echo $name tom 用法2:變量值來自文件 [root@MissHou ~]# cat 1.txt 10.1.1.1 255.255.255.0 [root@MissHou ~]# read ip mask < 1.txt [root@MissHou ~]# echo $ip 10.1.1.1 [root@MissHou ~]# echo $mask 255.255.255.0 用法3:位置變量 例如$1/$2...,此時從交互命令行輸入多個數值按照定義變量的數字表示索引來決定調用那個位置的數值
目的:給變量作一些限制,固定變量的類型,好比:整型、只讀
用法:declare 選項 變量名=變量值
經常使用選項:
選項 | 釋義 | 舉例 |
---|---|---|
-i | 將變量當作整數 | declare -i A=123 |
-r | 定義只讀變量 | declare -r B=hello |
-a | 定義普通數組;查看普通數組 | |
-A | 定義關聯數組;查看關聯數組 | |
-x | 將變量經過環境導出 | declare -x AAA=123456 等於 export AAA=123456 |
舉例說明:
[root@MissHou ~]# declare -i A=123 [root@MissHou ~]# echo $A 123 [root@MissHou ~]# A=hello [root@MissHou ~]# echo $A 0 [root@MissHou ~]# declare -r B=hello [root@MissHou ~]# echo $B hello [root@MissHou ~]# B=world -bash: B: readonly variable [root@MissHou ~]# unset B -bash: unset: B: cannot unset: readonly variable
本地變量:當前用戶自定義的變量。當前進程中有效,其餘進程及當前進程的子進程無效。
定義方式:變量名=變量值
查看進程父子關係 [ipnet@localhost ~]$ ps -auxf |grep bash ipnet 19447 0.0 0.0 115440 2000 pts/0 Ss 10:29 0:00 \_ -bash ipnet 20741 0.0 0.0 115440 1984 pts/1 Ss 10:43 0:00 \_ -bash root 20844 0.0 0.0 115440 2008 pts/1 S 10:44 0:00 | \_ -bash ipnet 22356 0.0 0.0 115440 2028 pts/2 Ss 11:14 0:00 \_ -bash ipnet 27420 0.0 0.0 115440 1984 pts/2 S 23:50 0:00 | \_ bash ipnet 27448 0.0 0.0 112708 948 pts/2 S+ 23:50 0:00 | \_ grep --color=auto bash ipnet 23420 0.0 0.0 115440 2016 pts/3 Ss+ 11:29 0:00 \_ -bash
env
查看當前用戶的環境變量set
查詢當前用戶的全部變量(臨時變量與環境變量)export 變量名=變量值
或者 變量名=變量值;export 變量名
[root@MissHou ~]# export A=hello 臨時將一個本地變量(臨時變量)變成環境變量 [root@MissHou ~]# env|grep ^A A=hello 永久生效: vim /etc/profile 或者 ~/.bashrc export A=hello 或者 A=hello export A 說明:系統中有一個變量PATH,環境變量 export PATH=/usr/local/mysql/bin:$PATH
全局變量:全局全部的用戶和程序都能調用,且繼承,新建的用戶也默認能調用.
解讀相關配置文件
文件名 | 說明 | 備註 |
---|---|---|
$HOME/.bashrc | 當前用戶的bash信息,用戶登陸時讀取 | 定義別名、umask、函數等 |
$HOME/.bash_profile | 當前用戶的環境變量,用戶登陸時讀取 | |
$HOME/.bash_logout | 當前用戶退出當前shell時最後讀取 | 定義用戶退出時執行的程序等 |
/etc/bashrc | 全局的bash信息,全部用戶都生效 | |
/etc/profile | 全局環境變量信息 | 系統和全部用戶都生效 |
$HOME/.bash_history | 用戶的歷史命令 | history -w 保存歷史記錄 history -c 清空歷史記錄 |
說明:以上文件修改後,都須要從新source讓其生效或者退出從新登陸。
/etc/profile
$HOME/.bash_profile
$HOME/.bashrc
/etc/bashrc
$HOME/.bash_logout
內置變量 | 含義 |
---|---|
$? | 上一條命令執行後返回的狀態;狀態值爲0表示執行正常,非0表示執行異常或錯誤 |
$0 | 當前執行的程序或腳本名 |
$# | 腳本後面接的參數的個數 |
$* | 腳本後面全部參數,參數當成一個總體輸出,每個變量參數之間以空格隔開 |
$@ | 腳本後面全部參數,參數是獨立的,也是所有輸出 |
$1~$9 | 腳本後面的位置參數,$1表示第1個位置參數,依次類推 |
${10}~${n} | 擴展位置參數,第10個位置變量必須用{}大括號括起來(2位數字以上擴起來) |
$$ | 當前所在進程的進程號,如echo $$ |
$! | 後臺運行的最後一個進程號 (當前終端) |
!$ | 調用最後一條命令歷史中的參數 |
$1~${n}
#!/bin/bash #瞭解shell內置變量中的位置參數含義 echo "\$0 = $0" echo "\$# = $#" echo "\$* = $*" echo "\$@ = $@" echo "\$1 = $1" echo "\$2 = $2" echo "\$3 = $3" echo "\$11 = ${11}" echo "\$12 = ${12}"
$*
:表示將變量當作一個總體
$@
:表示變量是獨立的
#!/bin/bash for i in "$@" do echo $i done echo "======我是分割線=======" for i in "$*" do echo $i done [root@MissHou ~]# bash 3.sh a b c a b c ======我是分割線======= a b c
${-}
號的做用${:-}
的做用${+}
,${:+}
,${=}
,${:=}
,${?}
,${:?}
的做用