變量是shell傳遞數據的一種方法。變量是用來表明每一個值的符號名,經過變量,能夠在內存中存儲數據,也能夠在腳本執行中進行修改和訪問存儲的數據。shell
A、變量名稱一般是大寫字母,它能夠由數字、字母(大小寫)和下劃線_組成。變量名區分大小寫;變量名稱不能以數字開頭;vim
B、等號 = 用於爲變量分配值,在使用過程當中等號兩邊不能有空格;bash
C、變量存儲的數據類型是整數值和字符串值;ssh
D、在對變量賦於字符串值時,建議你們用引號將其括起來。由於若是字符串中存在空格隔符號。須要使用單引號或雙引號;ide
E、要對變量進行調用,能夠在變量名稱前加美圓符號$;spa
F、若是須要增長變量的值,那麼能夠進行變量值的疊加。不過變量須要用雙引號包含「$變量名」或用${變量名}包含;命令行
按照變量的做用能夠分紅4類:orm
A、用戶自定義變量;進程
B、環境變量:這種變量中主要保存的是和系統操做環境相關的數據;圖片
C、位置參數變量:這種變量主要是用來向腳本當中傳遞參數或數據的,變量名不能自定義,變量做用是固定的;
E、預約義變量:是 Bash 中已經定義好的變量,變量名不能自定義,變量做用也是固定的。
按照變量做用範圍分爲2類:
A、局部變量是 shell 程序內部定義的,其使用範圍僅限於定義它的程序,對其它程序不可見。包括:用戶自定義變量、位置變量和預約義變量。
B、全局變量是環境變量,其值不隨 shell 腳本的執行結束而消失。
變量名命名規則:由字母或下劃線打頭,不容許數字開頭,後面由字母、數字或下劃線組成,而且大小寫字母意義不一樣。在使用變量時,在變量名前加$。
[root@test65-1 ~]# test=1 [root@test65-1 ~]# echo $test 1 [root@test65-1 ~]#
$name 是${name}的簡化版本,可是在某些狀況下,還必須使用花括號引發的方式來消除歧義並避免意外的結果。
[root@test65-1 ~]# test1=access [root@test65-1 ~]# echo test1 test1 [root@test65-1 ~]# echo $test1 access [root@test65-1 ~]# echo $test1.log access.log [root@test65-1 ~]#
Date命令:
date 命令是顯示或設置系統時間與日期。
-s<字符串>:根據字符串來設置日期與時間。字符串先後必須加上雙引號;
<+時間日期格式>:指定顯示時,使用特定的日期時間格式。
實例:
A、顯示當前時間年、月、日
[root@test65-1 ~]# date +"%Y-%m-%d" 2020-10-12
B、顯示當前時間年、月
[root@test65-1 ~]# date +"%Y-%m" 2020-10
#顯示日期及時間
date +"%Y-%m-%d %H:%M.%S"
#顯示日期及時間,使用/分割
date +"%Y/%m/%d %H/%M/%S"
#顯示日期及時間,使用-進行分割(備份通常使用該方式)
date +"%Y-%m-%d-%H-%M-%S"
Date命令加減操做:
#顯示當前時間(年、月、日)
date +"%Y%m%d"
#顯示明天的日期
date -d "+1 day" +%Y%m%d
#顯示昨天的日期
date -d "-1 day" +%Y%m%d
#顯示上一月的日期
date -d "-1 month" +%Y%m%d
#顯示下一月的日期
date -d "+1 month" +%Y%m%d
#顯示前一年的日期
date -d "-1 year" +%Y%m%d
#顯示下一年的日期
date -d "+1 year" +%Y%m%d
設定時間:
#設置成20201020,這樣會把具體時間設置成空 00:00:00
date -s 20201020
#設置具體時間,不會對日期作更改
date -s 15:10:20
#設置所有時間
date -s "2020-10-20 15:10:20"
A、命令中調用date命令
[root@test65-1 ~]# echo date #只顯示date值 date [root@test65-1 ~]# echo $date #date變量未賦值 [root@test65-1 ~]# echo `date` #調用date命令成功 Mon Oct 12 09:59:18 CST 2020 [root@test65-1 ~]# echo $(date) #調用date命令成功 Mon Oct 12 09:59:39 CST 2020 [root@test65-1 ~]# date Mon Oct 12 10:02:10 CST 2020
[root@test65-1 ~]# find /home/ -name *.log [root@test65-1 ~]# testtar=$(tar -zcvf home.tar.gz $(find /root/ -name *.txt)) [root@test65-1 ~]# echo $testtar
‘’ 在單引號中全部的字符包括特殊字符($,'',`和\)都將解釋成字符自己而成爲普通字符。
「」 在雙引號中,除了$, '', `和\之外全部的字符都解釋成字符自己,擁有「調用變量的值」、「引用命令」和「轉義符」的特殊含義。
注:\轉義符,跟在\以後的特殊符號將失去特殊含義,變爲普通字符。如\$將輸出「$」符號,而不當作是變量引用。
Eg:\轉義符做用
[root@test65-1 home]# test=1 [root@test65-1 home]# echo $test 1 [root@test65-1 home]# echo \#test #test [root@test65-1 home]# echo \$test $test [root@test65-1 home]#
A、雙引號與單引號區別
[root@test65-1 home]# test=1 [root@test65-1 home]# test1=2 [root@test65-1 home]# echo '$test+$test1' $test+$test1 [root@test65-1 home]# echo "$test+$test1" 1+2 [root@test65-1 home]#
注:單引號之間的內容原封不動賦值給變量,雙引號之間的內容若有特殊符號會保留它的特殊含義。
刪除變量:
[root@test65-1 home]# unset test [root@test65-1 home]# echo $test [root@test65-1 home]#
在 bash shell 中,變量分爲兩類:全局變量和局部變量
全局變量:對於shell會話和全部的子shell都是可見的
局部變量:它只在本身的進程當中使用
A、局部變量
[root@test65-1 home]# test=1 [root@test65-1 home]# vi 1.sh #!/bin/bash echo $test [root@test65-1 home]# sh 1.sh [root@test65-1 home]# echo $test 1
#執行1.sh 時,會使用另外一個bash去執行,就訪問不到$test的值
B、env 命令查看所全局變量
[root@test65-1 ~]# env [root@test65-1 ~]# env | grep PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
C、使用 export 把這個局部變量輸出爲全局變量
[root@test65-1 ~]# export test=1 [root@test65-1 ~]# echo $test 1 [root@test65-1 ~]# sh 1.sh 1 [root@test65-1 ~]#
D、讓變量永久生效,能夠把定義好的變量寫入配置文件
當登陸系統或新開啓一個 ssh 鏈接啓動 bash 進程時,必定會加載這 4 個配置文件:
#系統全局環境和登陸系統的一些配置
[root@test65-1 ~]# vim /etc/profile
#shell 全局自義配置文件,用於自定義 shell
[root@test65-1 ~]# vim /etc/bashrc
#用於單獨自定義某個用戶的 bash
[root@test65-1 ~]# vim /root/.bashrc
#用戶單獨自定義某個用戶的系統環境
[root@test65-1 ~]# vim /root/.bash_profile
Shell解釋執行用戶的命令時,將命令行的第一個字符做爲命令名,而其它字符做爲參數。
$0 獲取當前執行shell腳本的文件文件名,包括腳本路徑,命令自己
$n 獲取當前腳本的第n個參數 n=1,2.....n 當 n 大於 9 時 用${10}表示
Eg:
[root@test65-1 ~]# vim test.sh #!/bin/bash echo "本 shell 腳本的文件名: $0" echo "第 1 個參數: $1" echo "第 2 個參數: $2" echo "第 3 個參數: $3" echo "第 4 個參數: $4" [root@test65-1 ~]# chmod +x print.sh [root@test65-1 ~]# ./test.sh 1 2 3 4 本 shell 腳本的文件名: ./test.sh 第 1 個參數: 1 第 2 個參數: 2 第 3 個參數: 3 第 4 個參數: 4 [root@test65-1 ~]#
有些變量是一開始執行 Script 腳本時就會設定,且不能被修改,但咱們不叫它只讀的系統變量,而叫它特殊變量。這些變量當一執行程序時就有了,如下是一些特殊變量:
$* 以一個單字符串顯示全部向腳本傳遞的參數;如"$*"用雙引號括起來的狀況、以"$1 $2 … $n"的形式輸出全部參數 $n 第n個參數值,n=1..9 $# 傳遞到腳本的參數個數 $$ 當前進程的進程號 PID $? 顯示最後命令的退出狀態;0 表示沒有錯誤,其餘任何值代表有錯誤 $! 後臺運行的最後一個進程的進程號 pid
Eg:
[root@test65-1 ~] vim test.sh #!/bin/bash echo "$* 表示這個程序的全部參數" echo "$# 表示這個程序的參數個數" echo "$$ 表示程序的進程 ID" touch /tmp/b.txt & echo "$! 執行上一個後臺指令的 PID" echo "$$ 表示程序的進程 ID" echo "$? 表示上一個程序執行返回結果 " [root@test65-1 ~]# sh test.sh test test 表示這個程序的全部參數 1 表示這個程序的參數個數 1684 表示程序的進程 ID 1685 執行上一個後臺指令的 PID 1684 表示程序的進程 ID 0 表示上一個程序執行返回結果 [root@test65-1 ~]#
我的公衆號: