Linux 中變量的取用與設定

優質博文:IT-BLOG-CN

Linux是一個多人多任務的環境,每個人登錄系統都能取得一個bash shell,每個人都能夠使用bash下達mail這個指令來接收自己的郵箱等等。問題是,bash如何得知你的郵箱是那個文件?這就需要『變量』的幫助。

一、什么是變量

【1】變量的可變性與方便性: 簡單的說,變量就是讓一個特定的字符串代表不固定的內容。例如,每個賬號的郵件預設是以MAIL這個變量來進行存取的。當zzx用戶登錄時,他便會去MAIL這個變量,而這個變量的內容其實是/var/spool/mail/zzx,那如果 bird登錄,他的變量MAIL的內容就是/var/spool/mail/bird。而我們使用信件讀取指令mail來讀取自己的郵箱信件。

【2】影響bash環境操作的變量: 例如PATH變量,你能不能在任何目錄下執行某個指令,與PATH這個變量有很大關系。例如你下達ls這個指令時,系統就是通過PATH這個變量里面的內容所記錄的路徑順序來搜索指令的。如果搜索完PATH變量內的路徑還找不到ls這個指令時,就會在屏幕上顯示『 command not found 』的錯誤訊息了。在Linux System下,所有的線程都是需要一個執行碼,當正確登入Linux后,你就有一個bash執行程序,也才真正的經由bash來跟系統溝通。由于系統需要一些變量來提供他自己數據的存取(或者是一些環境的設定參數值,例如是否要顯示彩色等等),所以就有一些所謂的『環境變量』需要來讀入系統中,這些環境例如PATHHOMEMAILSHELL等等。為了區別與自定義變量的不同,環境變量通常以大寫字符來表示。

【3】腳本程序設計(shell script)的好幫手: 在個人設定方面,例如我們要寫一個大型script時,有些數據可能由于用戶習慣的不同而有差異,比如說路徑,由于路徑在script被使用的相當多,如果下次換一部主機,都要修改 script里面的所有路徑,那一定很low,這個時候就使用變量,而該變量的定義寫在最前面,后面相關的路徑名稱都以變量來取代,那到時候只需要修改一行就等于修改了全部路徑,相當方便。

二、變量的取用與設定

【1】變量的取用(echo) 利用echo就能夠讀取變量,只需要在變量前加上$符號,或者用${變量}的方式讀取內容。

[root@learnVM 桌面]# echo $PATH
:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin
[root@learnVM 桌面]# echo ${PATH}

【2】變量與變量內容之間如何設定與修改: 用等號(=)連接變量與他的內容就好。

[root@learnVM 桌面]# echo $username  <=  目前沒有查詢到任何數據,因為此變量為被設定。
[root@learnVM 桌面]# username=zzx
[root@learnVM 桌面]# echo $username
zzx     <=  為我們設定的username值。

【3】變量的設定規則:
①、等號兩邊不能直接接空格符。
②、變量名稱只能是英文字母與數字,但是開頭字符不能時數字。
③、變量內容若有空格符可使用雙引號『"』或單引號『'』將變量內容結合起來。

[root@learnVM 桌面]# test="i am is $username"   <= 雙引號的特殊字符如$等,可以保有原本的特性
[root@learnVM 桌面]# echo $test
i am is zzx    <= 對$username進行了解析[root@learnVM 桌面]# test='i am is $username'   <= 單引號的特殊字符,僅為一般字符,純文本。
[root@learnVM 桌面]# echo $test
i am is $username   <= 不對$username進行了解析

④、可以使用跳脫字符『 \ 』將特殊符號(如:[Enter]$\ ,空格符,’ 等)

[root@learnVM 桌面]# test=i\ am\ is\ zzx
[root@learnVM 桌面]# echo $test
i am is zzx

⑤、變量值是一串指令所提供的信息時,可以使用反單引號『指令』『$(指令) 』,例如想要取核心版本:

[root@learnVM 桌面]# version=`uname -r`   
[root@learnVM 桌面]# echo $version
2.6.32-642.el6.x86_64

⑥、若該變量為擴展變量內容時,則可用 “$變量名稱” 或 ${變量} 累加內容,如下:

[root@learnVM 桌面]# test=i\ am\ is\ zzx
[root@learnVM 桌面]# test=${test}\ cool  <= 或者使用"$test"\ cool
[root@learnVM 桌面]# echo $test
i am is zzx cool

⑦、若該變量需要在其他子程序執行,則需要export來使變量編程環境變量:『 export 變量名 』
⑧、通常大寫的變量是系統默認的變量,自定義的變量一般都為小寫。(規則,不遵守也行)
⑨、取消變量的方法使用:unset

[root@learnVM 桌面]# unset test
[root@learnVM 桌面]# echo $test<= 變量已被取消,輸出的值為空

三、環境變量的功能

【1】用env觀察環境變量與常見環境變量說明: 列出目前的shell環境下的所有環境變量與其內容。

[root@learnVM 桌面]# env
ORBIT_SOCKETDIR=/tmp/orbit-root
HOSTNAME=learnVM                     <=這部主機的主機名
IMSETTINGS_INTEGRATE_DESKTOP=yes
SHELL=/bin/bash                      <=目前這個環境下,使用的shell是哪一個程序
TERM=xterm                           <=這個終端機使用的環境是什么類型
HISTSIZE=1000                        <=記錄指令的筆數,默認支持1000
USER=root                            <=使用者的名稱
......

envenvironment(環境)的簡寫,如下部分環境變量。如果使用export也會是一樣的內容。下面對環境變量進行介紹:
HOME:代表用戶的家目錄。我們可以通過cd ~去家目錄。有很多程序都可能會取用到這個變量的值。
SHELL:當前使用的SHELL是哪只程序,Linux預設使用/bin/bash
MAIL:當我們使用mail這個指令在收信時,系統會去讀取郵件郵箱文件(mailbox)
HISTSIZE:這個與『歷史命令』有關,我們曾下達過的指令可以被系統記錄下來,而記錄的『筆數』則是由這個值來設定的。
PATH:就是執行文件搜索的路徑,目錄與目錄之間以冒號分割,由于文件的搜索是依序由PATH的變量內的目錄來查詢的,所以,目錄的順序也是很重要的。
LANG:這個比較重要,很多訊息都會用到它,例如:當我們啟動某些 Perl 的程序語言文件時,他會主動的去分析語系數據文件,如果發現他無法解析的編碼語系,就可能產生錯誤。
RANDOM:隨機數的變量,目前大多數distributions都會有隨機數生成器,那就是/dev/random文件,在BASH環境下,這個RANDOM變量的內容,介于0~32767之間。如果要去0~9之間的數值,利用declare宣告數值類型,如下:

[root@learnVM 桌面]# declare -i number=$RANDOM*10/32768;echo $number
2         <= 此時會隨機取0~9之間的數值

【2】用set觀察所有變量(含環境變量與自定義變量):bash可不只有環境變量,還有一些與bash操作接口有關的變量,以及用戶自己定義的變量存在的。可通過set指令查看,set除了環境變量之外,還會將其他在bash內的變量統統顯示出來。

[root@learnVM 桌面]# set
BASH=/bin/bash          <=BASH 主程序放置路徑
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="release" [5]="x86_64-redhat-linux-gnu") <=bash 的版本
COLUMNS=80              <=在目前的終端機環境下,使用的字段有幾個字符長度
HISTFILE=/root/.bash_history     <=歷史命令記錄的放置位置,隱藏檔。
HISTFILESIZE=1000       <=存起來(與上個變量有關)的文件之指令的最大記錄筆數
HISTSIZE=1000           <=目前環境下,內存中記錄的歷史命令最大筆數
IFS=$' \t\n'            <=預設的分隔符
LINES=24                <=目前終端機下的最大行數
PS1='[\u@\h \W]\$ '     <=PS1 就是我們系統的命令提示符,例如我的是=[root@learnVM 桌面]
PS2='> '                <=如果你使用逃脫符號(\)第二行以后的提示字符

【3】PS1(提示字符的設定):命令提示符,當我們每次按下Enter鍵去執行某個指令后,最后要在此出現提示字符時,就會去主動讀取這個變量值了,例如我本機的PS1='[\u@\h \W]\$ ' 顯示的是一種特殊符號,這些特殊符號可以顯示不同的信息,每個distributionbash默認的PS1變量內容可能有差異,但不要緊,可以通過man bash查詢PS1的相關說明,以理解底下的一些符號的意義。
? \d:可顯示出『星期 月 日』的日期格式,如:“Mon Feb 2”
? \H:完整的主機名。
? \h:僅取主機在第一個小數點之前的名字。
? \t:顯示時間,為24小時格式的『HH:MM:SS』
? \T:顯示時間,為12小時格式的『HH:MM:SS』
? \A:顯示時間,為24小時格式的『HH:MM』
? \@:顯示時間,為12小時格式的『am/pm』
? \u:目前使用者的賬號名稱
? \vBASE的版本信息
? \w:完整的工作目錄名稱,由根目錄寫起的目錄名稱,所以僅會列出最后一個目錄名。
? \#:下達的第幾個指令
? \$:提示字符,如果是root的話,提示字符為# ,否則為$

CentOS預設的PS1內容:PS1='[\u@\h \W]\$ ',這個反斜杠后的數據為PS1的特殊功能,與bash的變量設定沒有關系,現在我們應該都清楚為什么我的命令提示符是:『root@learnVM 桌面』,我們也可以修改自己的命令提示符:

[zzx@learnVM home]$ PS1='[\u@\h \w \A #\#]\$'  <= \#表示第2次下達的命令,每執行一次命令累加1
[zzx@learnVM /home 06:34 #2]$  

【4】$(關于本shellPID):錢字號本身也是個變量,表示當前Shell的線程代號,既所謂的PID(Process ID)。想要知道自己shellPID可以通過echo $$獲取PID號碼。

[zzx@learnVM /home 06:34 #2]$echo $$
3405

【5】(關于上個執行指令的回傳值):問號也是一個特殊的變數,在 bash 中這個變量很重要,表示上一個執行的指令所回傳的值,當執行某指令時,這些指令都會回傳一個執行后的代碼。一般來說,如果成功的執行該指令,則會回傳一個0值,如果執行過程發生錯誤,就會回傳『錯誤代碼』,一般就是以非為0的數值來取代。

[zzx@learnVM /home 06:37 #3]$12name=ddd
bash: 12name=ddd: command not found
[zzx@learnVM /home 06:44 #4]$echo $?
127     <=錯誤代碼回傳值依據軟件而有不同,我們可以利用這個代碼來搜索錯誤的原因

【6】export(自定義變量轉成環境變量):環境變量與自定義變量的區別,就是該變量能夠被子程序繼續引用的就是環境變量,反之則為自定義變量。簡單介紹下子程序與父程序:當登錄Linux后,會獲取一個bash(獨立的程序),這個程序的識別使用的是一個稱為程序標識符PID。接下來在bash底下所下達的任何指令都是由這個bash所衍生的,那些被下達的指令被稱為子程序。
在這里插入圖片描述

如上所示,我們在原本的bash底下執行另一個bash,結果操作的環境接口就會跑到第二個bash去(就是子程序),原本的bash就是sleep這個指令運行的環境就是實現部分,若要回到原本的bash去,就只有將第二個bash結束掉(下達exit或者logout)指令。因為子程序僅會繼承父程序的環境變量,所以 bash的自定義變量在進入子程序后就會消失,一直到離開子程序并回到原父程序后,變量才會有生效。那么如何將自定義的變量轉化為環境變量啦,就是通過export指令實現。

[zzx@learnVM home]$ export 變量名稱

如果下達export指令就會將所有的『環境變量』繡出來:

[zzx@learnVM home]$ export
declare -x CLASS_PATH=".:/usr/install/jvm/jdk1.8.0_121/lib/dt.jar:/usr/install/jvm/jdk1.8.0_121/lib/tools.jar:/usr/install/jvm/jdk1.8.0_121/jre/lib"
declare -x COLORTERM="gnome-terminal"
declare -x CVS_RSH="ssh"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-2vt9iZbym4,guid=3aeb40487b94bd413a26d22f0000003a"
declare -x DESKTOP_SESSION="gnome"
declare -x DISPLAY=":0.0"
declare -x GDMSESSION="gnome"
declare -x GDM_KEYBOARD_LAYOUT="us"
...........

四、影響顯示結果的語系變量(locale)

當我們使用man command的方式去查詢某個數據的說明文件時,該說明文檔的內容可能會因為我們使用的語系不同而產生亂碼。另外,利用ls查詢文件的時間時,也可能會有亂碼出現在時間部分。這個問題其實就是語系的問題。目前大多數的Linux系統都支持萬國碼了,也支持大部分的國家語系。我們可以通過locale指令查詢自己的Linux支持多少語系。

[root@learnVM 桌面]# locale -a
zh_TW.big5     <= 大五碼的中文編碼
zh_TW.euctw
zh_TW.utf8     <= 萬國碼的中文編碼
......

正體中文語系至少支持了兩種以上的編碼,一種是目前還是很常見的big5,另一種則是越來越熱門的utf-8編碼。我們可以通過以下逐一設定每個語系有關的數據變量,但事實是, 如果其他語系變量都沒設置,且你有設置LANG 或者是LC_ALL時,則其他的語系變量就會被這兩個變量所取代!這也是為什么在Linux當中,通常說僅設定LANGLC_ALL兩個變量而已。在Linux主機的終端機接口(tty1~tty6)的環境下,如果設定『 LANG=zh_TW.utf8 』這個設定值生效后,使用 man 或者其他訊息輸出時,都會出現一堆亂碼,尤其是ls -l這個參數。Linux主機的終端機接口環境下是無法顯示像中文這么復雜的編碼文字,所以就會產生亂碼了。

[root@learnVM 桌面]# locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

五、變量的有效范圍

變量也有使用的范圍,則『變量』可否被引用與export有關。被export后的變量為『環境變量』。為什么環境變量的數據可以被子程序所引用,是因為內存配置的關系。
? 當啟動一個shell,操作系統會分配一記憶區塊給 shell 使用,此內存內之變量可讓子程序取用。
? 若在父程序中利用export功能,可以讓自定義變量的內容寫到上述的記憶區塊當中(環境變量)
? 當加載另一個 shell 時,子shell可以將父shell的環境變量所在的記憶區塊導入自己的環境變量區塊中。

六、變量鍵盤讀取、數組與宣告(read、array、declare)

除了提到的變量設定功能,我們也可以通過鍵盤輸入。就類似于我們執行某些程序時,會提示使用這輸入“yes/no”之類的訊息。我們還可以宣告這個變量的屬性,例如:數組或者是數字等等。
? read:讀取來自鍵盤輸入的變量。這個指令最常被用在shell script的撰寫當中,想要跟使用者對談就使用該指令。

[root@learnVM /]# read [-pt] variable
選項與參數:-p : 后面可以接提示符-t : 后面可以接等待的『秒數』這個比較有趣,不會一直等待使用者。范例一:讓用戶由鍵盤輸入一內容,將該內容編程名為 atest 的變量
[root@learnVM /]# read atest
this is a test       <= 此時光標會等待你輸入
[root@learnVM /]# echo $atest
this is a test       <= 你剛剛輸入的數據已經變成一個變量內容范例二:提示使用者 30 秒內輸入自己的大名,將該輸入字符串作為名為 named 的變量內容
[root@learnVM /]# read -p "pelse you name" -t 30 names
pelse you name zzx  <= 會有提示字符
[root@learnVM /]# echo $names
zzx                 <= 輸入的數據又變成一個變量的內容

? declare/typeset:宣告變量的類型。如果使用declare后面并沒有接任何參數,那么bash就會主動將所有的變量名稱與內容統統叫出來,就好像使用 set一樣。

[root@learnVM /]# declare [-aixr] variable
選項與參數:
-a : 將后面名為 variable 的變量定義成為數組(array)類型
-i : 將后面名為 variable 的變量定義為整數數字(integer)類型
-x :用法與 export 一樣,就是將后面的 variable 變成環境變量。
-r : 將變量設定成為 readonly 類型,該變量不可被更改內容,也不能unset。范例一:讓sum 進行 1+2+3 的加和
[root@learnVM /]# sum=1+2+3
[root@learnVM /]# echo $sum
1+2+3
[root@learnVM /]# declare -i sum=1+2+3
[root@learnVM /]# echo $sum
6

由于在默認的情況底下bash對于變量有幾個基本的定義:
● 變量類型默認為『字符串』,所以若不指定變量類型,則1+2為一個『字符串』而不是『計算式』。
bash環境中的數值運算,預設最多僅能達到整數形態,所以1/3結果是 0
如果需要非字符串類型的變量,那就得要進行變量的宣告才行。如下繼續接受declare功能。

范例二:將sum 變為環境變量
[root@learnVM 桌面]# declare -x sum
[root@learnVM 桌面]# export |grep sum
declare -ix sum="6"              <= 會出現 i 與 x 的宣告范例三:將sum 變為只讀屬性,不可更改
[root@learnVM 桌面]# declare -r sum
[root@learnVM 桌面]# sum=test
bash: sum: readonly variable     <=不允許修改此屬性范例四:將sum 更改為非環境變量的自定義變量
[root@learnVM 桌面]# declare +x sum   <= 將-變成+ 表示【取消】功能,這里 x 表示環境變量
[root@learnVM 桌面]# declare -p sum   <= -p 可以單獨列出變量的類型
declare -ir sum="6"                  <= 只剩下i,r的類型,不具有x(環境變量)類型。

需要注意的是,如果不小心將變量設定為『只讀』,通常得要注銷再登入才能復原該變量的類型。

? 數組(array)變量類型:var[index]=content:表示數組名為var,我們假定數組的內容為var[1]=1,var[2]=2,var[3]=3等等,那么index就是一些數字。

范例:設定上面提到的 var[1] ~ var[3] 的變數
[root@learnVM 桌面]# var[1]="1"
[root@learnVM 桌面]# var[2]="2"
[root@learnVM 桌面]# var[3]="3"
[root@learnVM 桌面]# echo "${var[1]},${var[2]},${var[3]}"
1,2,3

七、與文件系統及程序的限制關系(ulimit)

我們知道Linux可以同時登陸十個人,如果同時啟動十個文件每個文件的大小約10 MBytes,主機的內存就需要10*100*10= 10000MBytes=10GBytes,系統就會掛點。為了要預防這個情況的發生,所以我們的bash是可以『限制用戶的某些系統資源』的,包括可以開啟的文件數量,可以使用的CPU時間,可以使用內存總量等等。可以用ulimit進行設置。

[root@learnVM 桌面]# ulimit [-SHacdfltu] [配額]
選項與參數:-H : hard limit ,嚴格的設定,必定不能超過這個設定的數值;-S :soft limit ,警告的設定,可以超過這個設定值,但是若超過則有警告信息。在設定上,通常 soft 會比 hard 小,例如 soft 80,而hard 100-a :后面不接任何選項與參數,可以列出所有的限制額度-c : 當某些程序發生錯誤時,系統可能會將該程序的內存中的信息寫成文件(除錯用),這種文件就被稱為核心文件(core file)。此為限制每個核心文件的最大容量。-f : 此 shell 可以建立的最大文件容量(一般可能設定為2GB)單位為 Kbytes-d : 程序可使用的最大斷裂內存(segment)容量。-l : 可用于鎖定的內容容量-t : 可使用的最大CPU時間(單位為秒)-u : 單一用戶可以使用的最大程序(process)數量

范例:列出你目前身份(假設為一般賬號)的所有限制數據數值

[root@learnVM 桌面]# ulimit -a
core file size          (blocks, -c) 0              <=只要是0就代表么有限制
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited      <=可建立的單一文件大小
pending signals                 (-i) 7334
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024           <=同時可開啟的文件數量
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7334
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

想要復原ulimit的設定最簡單的方法就是注銷再登入,否則就是得要重新以 ulimit設定才行。需要注意的是,一般身份使用者如果要以ulimit設定-f的文件大小,那么他『只能繼續減小文件容量,不能增加文件容量』。

八、變量內容的刪除、取代與替換(Optional)

【1】變量內容的刪除與取代: 具體舉例說明:

[root@learnVM 桌面]# test=1234567890
[root@learnVM 桌面]# echo ${test#*5}  <= test是變量名稱,#表示從變量的最前面開始向右刪除,且僅刪除最短的那個
67890[root@learnVM 桌面]# echo ${test//8/44}  <= 將8 替換為 44
12345674490

(*)表示通配符,取0到無窮多個任意字符。從上面 的案例可以看出刪除了5之前的所有元素。上面的一個 # 表示刪掉最短的那個,那么兩個 ## 表示刪除最長的那個數據。那么除了上述從前面開始刪除#之外,還有重后面開始刪除的%。上述取掉實例中,兩個斜線中間的是舊字符串,后面的是新字符串。那么兩個雙斜線表示的是替換所有符號條件的內容。

【2】變量的測試與內容替換: 通常我們會判斷某變量是否存在,如存在使用以有的,若不存在則給予一個常用的設定。舉例:

[root@learnVM 桌面]# echo ${username}<= 空白表示username變量不存在
[root@learnVM 桌面]# username=${username-root}
[root@learnVM 桌面]# echo $username
root                                           <= 因為username不存在所以賦默認root值
[root@learnVM 桌面]# username=zzx               <=當給其手動賦值zzx后,再是用 *-root
[root@learnVM 桌面]# username=${username-root}
[root@learnVM 桌面]# echo $username          
zzx                                             <=會發現默認的 root 不會生效

在大括號內冒號【:】的作用,被測試的變量如果設定為空字符串時,就可以用*-root中的root來替換設定的空字符串的值:

變量設定方式str 沒有設定str 為空字符串str 已設定非為空字符串
var=${str-expr}var=exprvar=var=$str
var=${str:-expr}var=exprvar=exprvar=$str
var=${str+expr}var=var=exprvar=expr
var=${str:+expr}var=var=var=expr
var=${str=expr}str=expr var=exprstr不變 var=str不變 var=$str
var=${str:=expr}str=expr var=exprstr=expr var=exprstr不變 var=$str

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36232.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36232.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36232.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ubuntu noble】docker 容器無法使用 nvidia gpu

運行ai模型的時候提示 no GPU available 執行 nvidia-smi 提示 Failed to initialize NVML: Unknown Error 解決方案 一. 宿主機執行sudo docker info&#xff0c;確保 runtime 字段中有 nvidia 字樣 Runtimes: nvidia runc io.containerd.runc.v2 Default Runtime: runc 注…

從0開始學習pyspark--pyspark的核心概念[第0節]

在學習 PySpark時會遇到很多新的關鍵詞,理解這些概念,對我們學習PySpark有極大的幫助,以下是一些PySpark的關鍵概念及其詳細解釋&#xff1a; 1. PySpark PySpark是Apache Spark的Python API。Spark是一個用于大規模數據處理的開源分布式計算系統&#xff0c;支持內存計算和基…

基于Java的寵物領養管理系統【附源碼】

摘 要 近些年來&#xff0c;隨著科技的飛速發展&#xff0c;互聯網的普及逐漸延伸到各行各業中&#xff0c;給人們生活帶來了十分的便利&#xff0c;寵物管理系統利用計算機網絡實現信息化管理&#xff0c;使整個寵物領養的發展和服務水平有顯著提升。 本文擬采用IDEA開發工具…

《分析模式》漫談07-怎樣把一張圖從不嚴謹改到嚴謹

DDD領域驅動設計批評文集 做強化自測題獲得“軟件方法建模師”稱號 《軟件方法》各章合集 下圖是《分析模式》原書第2章的圖2.10&#xff0c;里面有一些錯誤和考慮不周的地方&#xff1a; 2004中譯本和2020中譯本的翻譯如下&#xff1a; 基本上都是照搬&#xff0c;沒有改過…

【02-02】SpringMVC基于注解的應用

一、請求處理 1、常用注解 RequestMapping 作用&#xff1a;用來匹配客戶端發送的請求&#xff08;用來處理URL映射&#xff0c;將請求映射到處理方法中&#xff09;&#xff0c;可以在類或者方法上使用。 用在類上&#xff0c;可以將請求模塊化&#xff0c;避免請求方法中的…

【Java Web】三大域對象

目錄 一、域對象概述 二、三大域對象 三、域對象使用相關API 一、域對象概述 一些可用于存儲數據和傳遞數據的對象被稱為域對象&#xff0c;根據傳遞數據范圍的不同&#xff0c;我們稱之為不同的域&#xff0c;不同的域對象代表不同的域&#xff0c;共享數據的范圍也不同。 二、…

【小紅書標題打造】規則+底層邏輯解析|輔助工具|爆款必備

前言 大家好&#xff0c;我是一名自媒體工具人&#xff0c;今天不是教大家去自己寫標題&#xff08;現在這個時代自己寫真沒必要&#xff09;而是教大家了解爆款標題的相關知識以及辨別。后面會附贈 安裝此文規則生成標題的輸出工具。在這個工具發展龐大的時代&#xff0c;如果…

【知識圖譜系列】一步步指導:安裝與配置JDK和Neo4j的完美搭配

本文將提供詳細的步驟&#xff0c;介紹如何下載、安裝和配置Java開發工具包&#xff08;JDK&#xff09;以及流行的圖形數據庫Neo4j。將從選擇合適的JDK版本開始&#xff0c;然后是下載和配置環境變量&#xff0c;接著以同樣的方式處理Neo4j。最后&#xff0c;會通過一些檢查步…

Windows應急響應靶機 - Web3

一、靶機介紹 應急響應靶機訓練-Web3 前景需要&#xff1a;小苕在省護值守中&#xff0c;在靈機一動情況下把設備停掉了&#xff0c;甲方問&#xff1a;為什么要停設備&#xff1f;小苕說&#xff1a;我第六感告訴我&#xff0c;這機器可能被黑了。 這是他的服務器&#xff…

【CSS in Depth 2 精譯】1.6 本章小結

1.6 本章小結 瀏覽器遵循層疊規則來確定哪些樣式在哪些元素上生效&#xff1b;選擇器優先級由選擇器中的 id 數、class 類的個數以及標簽名的個數來共同確定。優先級更高的聲明將覆蓋較低聲明&#xff1b;當某些屬性沒有層疊值時&#xff0c;它們會從父元素繼承一個樣式值。這…

YouCompleteMe插件安裝方法簡述

一、前言 YouCompleteMe是VIM中進行C/C 開發的重要工具&#xff0c;可以極大提升linux下C/C開發效率。 YCM需要高版本的gcc (8.0以上版本&#xff0c;支持C17) 和 vim&#xff08;8.0以上&#xff0c;支持python3.6以上&#xff09; 二、編譯gcc_8.3 1. 獲取源碼 wget https:…

Shopee API接口——獲取商家店鋪商品列表

一、引言 在跨境電商領域&#xff0c;Shopee作為東南亞地區領先的電商平臺&#xff0c;為眾多商家提供了廣闊的市場和豐富的銷售機會。本文將詳細介紹如何通過Shopee API獲取商家店鋪商品列表&#xff0c;并探討其應用場景。 二、核心功能介紹 Shopee API獲取商家店鋪商品列…

HarmonyOS NEXT Developer Beta1中的Kit

從HarmonyOS NEXT Developer Preview1&#xff08;API 11&#xff09;版本開始&#xff0c;HarmonyOS SDK以Kit維度提供豐富、完備的開放能力&#xff0c;涵蓋應用框架、系統、媒體、圖形、應用服務、AI六大領域&#xff0c;例如&#xff1a; 應用框架相關Kit開放能力&#xff…

轉行大數據開發:知識、能力及學習路線詳解

引言 隨著數據量的爆炸性增長&#xff0c;大數據開發已經成為IT行業中的熱門職業。對于希望轉行進入大數據開發領域的專業人士來說&#xff0c;了解需要掌握的知識和技能&#xff0c;并制定清晰的學習路線至關重要。本文將詳細解析轉行大數據開發所需的知識體系、能力要求及學…

Studying-代碼隨想錄訓練營day21| 669.修建二叉搜索樹、108.將有序數組轉換為二叉搜索樹、538.把二叉搜索樹轉換為累加樹、二叉樹總結

第21天&#xff0c;二叉樹最后一篇&#xff0c;沖&#x1f4aa; 目錄 669.修建二叉搜索樹 108.將有序數組轉換為二叉搜索樹 538.把二叉搜索樹轉換為累加樹 二叉樹總結 669.修建二叉搜索樹 文檔講解&#xff1a;代碼隨想錄修建二叉搜索樹 視頻講解&#xff1a;手撕修建二叉…

【PySide6】Repeater 子控件分析

文章目錄 前言分析 前言 修改 Column 控件下使用 Repeater 生成的子控件&#xff0c;但是沒有 id 無法操作&#xff0c;使用 children 層層遞歸分析 分析 QML 代碼 // https://doc.qt.io/qt-6/qml-qtquick-column.htmlColumn {id: columnspacing: 2// 定義模型property var …

代碼隨想錄算法訓練營刷題復習10:二叉樹、二叉搜索樹復習2

二叉樹、二叉搜索樹 力扣題復習 110. 平衡二叉樹257. 二叉樹的所有路徑404. 左葉子之和513. 找樹左下角的值112.路徑之和113.路經總和ii450. 刪除二叉搜索樹中的節點701. 二叉搜索樹中的插入操作 110. 平衡二叉樹 左右子樹高度差要小于1 ->遞歸調用&#xff08;need新的函…

API-元素尺寸與位置

學習目標&#xff1a; 掌握元素尺寸與位置 學習內容&#xff1a; 元素尺寸與位置仿京東固定導航欄案例實現bilibili點擊小滑塊移動效果 元素尺寸與位置&#xff1a; 使用場景&#xff1a; 前面案例滾動多少距離&#xff0c;都是我們自己算的&#xff0c;最好是頁面滾動到某個…

[leetcode]圓圈中最后剩下的數字/ 破冰游戲

. - 力扣&#xff08;LeetCode&#xff09; class Solution {int f(int num, int target) {if (num 1) {return 0;}int x f(num - 1, target);return (target x) % num;} public:int iceBreakingGame(int num, int target) {return f(num, target);} };

程序猿大戰Python——Python與MySQL交互一

pymysql模塊的安裝 目標&#xff1a;了解如何安裝pymysql模塊&#xff1f; 當要使用Python和MySQL數據庫進行交互&#xff0c;需要借助一個第三方模塊&#xff1a;pymysql。 在使用pymysql模塊前&#xff0c;先進行安裝&#xff1a; pip install pymysql 有時使用pip instal…