Shell腳本:Linux Shell腳本學習指南(第二部分Shell編程)二

第二部分:Shell編程(二)

十一、Shell數組:Shell數組定義以及獲取數組元素

和其他編程語言一樣,Shell 也支持數組。數組(Array)是若干數據的集合,其中的每一份數據都稱為元素(Element)。

Shell 并且沒有限制數組的大小,理論上可以存放無限量的數據。和C++、Java、C# 等類似,Shell 數組元素的下標也是從 0 開始計數。

獲取數組中的元素要使用下標[ ],下標可以是一個整數,也可以是一個結果為整數的表達式;當然,下標必須大于等于 0。

遺憾的是,常用的 Bash Shell 只支持一維數組,不支持多維數組。

1、Shell 數組的定義

在 Shell 中,用括號( )來表示數組,數組元素之間用空格來分隔。由此,定義數組的一般形式為:

array_name=(ele1 ?ele2 ?ele3 ... elen)

注意,賦值號=兩邊不能有空格,必須緊挨著數組名和數組元素。

下面是一個定義數組的實例:

nums=(29 100 13 8 91 44)

Shell 是弱類型的,它并不要求所有數組元素的類型必須相同,例如:

arr=(20 56 "http://c.biancheng.net/shell/")

第三個元素就是一個“異類”,前面兩個元素都是整數,而第三個元素是字符串。

Shell 數組的長度不是固定的,定義之后還可以增加元素。例如,對于上面的 nums 數組,它的長度是 6,使用下面的代碼會在最后增加一個元素,使其長度擴展到 7:

nums[6]=88

此外,你也無需逐個元素地給數組賦值,下面的代碼就是只給特定元素賦值:

ages=([3]=24 [5]=19 [10]=12)

以上代碼就只給第 3、5、10 個元素賦值,所以數組長度是 3。

2、獲取數組元素

獲取數組元素的值,一般使用下面的格式:

${array_name[index]}

其中,array_name 是數組名,index 是下標。例如:

n=${nums[2]}

表示獲取 nums 數組的第二個元素,然后賦值給變量 n。再如:

echo ${nums[3]}

表示輸出 nums 數組的第 3 個元素。

使用@*可以獲取數組中的所有元素,例如:

${nums[*]}

${nums[@]}

兩者都可以得到 nums 數組的所有元素

完整的演示:

#!/bin/bash

nums=(29 100 13 8 91 44)

echo ${nums[@]}? ? ?#輸出所有數組元素

nums[10]=66? ? ? ? ? ??#給第10個元素賦值(此時會增加數組長度)

echo ${nums[*]}? ? ? ?#輸出所有數組元素

echo ${nums[4]}? ? ? #輸出第4個元素

運行結果:

29 100 13 8 91 44
29 100 13 8 91 44 66
91

十二、Shell獲取數組長度

所謂數組長度,就是數組元素的個數。

利用@*可以將數組擴展成列表然后使用#來獲取數組元素的個數,格式如下:

${#array_name[@]}
${#array_name[*]}

其中 array_name 表示數組名。兩種形式是等價的,選擇其一即可。

如果某個元素是字符串,還可以通過指定下標的方式獲得該元素的長度,如下所示:

${#arr[2]}

獲取 arr 數組的第 2 個元素(假設它是字符串)的長度。

1、回憶字符串長度的獲取

回想一下 Shell 是如何獲取字符串長度的呢?其實和獲取數組長度如出一轍,它的格式如下:

${#string_name}

string_name 是字符串名。

2、實例演示

下面我們通過實際代碼來演示一下如何獲取數組長度。

#!/bin/bash


nums=(29 100 13)
echo ${#nums[*]}

#向數組中添加元素

nums[10]="http://c.biancheng.net/shell/"

echo ${#nums[@]}

echo ${#nums[10]}

#刪除數組元素

unset nums[1]

echo ${#nums[*]}

運行結果:

3
4
29
3

十三、Shell數組拼接,Shell數組合并

所謂 Shell 數組拼接(數組合并),就是將兩個數組連接成一個數組。

拼接數組的思路是:先利用@*,將數組擴展成列表,然后再合并到一起。具體格式如下:

array_new=(${array1[@]} ?${array2[@]})
array_new=(${array1[*]} ?${array2[*]})

兩種方式是等價的,選擇其一即可。其中,array1 和 array2 是需要拼接的數組,array_new 是拼接后形成的新數組。

下面是完整的演示代碼:

#!/bin/bash

array1=(23 56)

array2=(99 "http://c.biancheng.net/shell/")

array_new=(${array1[@]} ${array2[*]})

echo ${array_new[@]} #也可以寫作 ${array_new[*]}

運行結果:

23 56 99 http://c.biancheng.net/shell/

十四、Shell刪除數組元素(也可以刪除整個數組)

在 Shell 中,使用 unset 關鍵字來刪除數組元素,具體格式如下:

unset array_name[index]

其中,array_name 表示數組名,index 表示數組下標。

如果不寫下標,而是寫成下面的形式:

unset array_name

那么就是刪除整個數組,所有元素都會消失

下面我們通過具體的代碼來演示:

#!/bin/bash

arr=(23 56 99 "http://c.biancheng.net/shell/")

unset arr[1]

echo ${arr[@]}

unset arr

echo ${arr[*]}

運行結果:

23 99 http://c.biancheng.net/shell/
?

注意最后的空行,它表示什么也沒輸出,因為數組被刪除了,所以輸出為空。

十五、Shell關聯數組(下標是字符串的數組)

現在最新的 Bash Shell 已經支持關聯數組了。關聯數組使用字符串作為下標,而不是整數,這樣可以做到見名知意。

關聯數組也稱為“鍵值對(key-value)”數組,鍵(key)也即字符串形式的數組下標,值(value)也即元素值。

例如,我們可以創建一個叫做 color 的關聯數組,并用顏色名字作為下標。

declare -A color

color["red"]="#ff0000"

color["green"]="#00ff00"

color["blue"]="#0000ff"

也可以在定義的同時賦值:

declare -A color=(["red"]="#ff0000", ["green"]="#00ff00", ["blue"]="#0000ff")

不同于普通數組,關聯數組必須使用帶有-A選項的 declare 命令創建。

1、訪問關聯數組元素

訪問關聯數組元素的方式幾乎與普通數組相同,具體形式為:

array_name["index"]

例如:

color["white"]="#ffffff"

color["black"]="#000000"

加上$()即可獲取數組元素的值:

$(array_name["index"])

例如:

echo $(color["white"])

white=$(color["black"])

2、獲取所有元素的下標和值

使用下面的形式可以獲得關聯數組的所有元素值

${array_name[@]}
${array_name[*]}

使用下面的形式可以獲取關聯數組的所有下標值

${!array_name[@]}
${!array_name[*]}

3、獲取關聯數組長度

使用下面的形式可以獲得關聯數組的長度:

${#array_name[*]}
${#array_name[@]}

關聯數組實例演示:

#!/bin/bash

declare -A color

color["red"]="#ff0000"

color["green"]="#00ff00"

color["blue"]="#0000ff"

color["white"]="#ffffff"

color["black"]="#000000"

#獲取所有元素值

for value in ${color[*]}

do

????????echo $value

done

echo "****************"

#獲取所有元素下標(鍵)

for key in ${!color[*]}

do

????????echo $key

done

echo "****************"

#列出所有鍵值對

for key in ${!color[@]}

do

????????echo "${key} -> ${color[$key]}"

done

運行結果:

#ff0000
#0000ff
#ffffff
#000000
#00ff00
****************
red
blue
white
black
green
****************
red -> #ff0000
blue -> #0000ff
white -> #ffffff
black -> #000000
green -> #00ff00

十六、Shell內建命令(內置命令)

所謂 Shell 內建命令,就是由 Bash 自身提供的命令,而不是文件系統中的某個可執行文件。

例如,用于進入或者切換目錄的 cd 命令,雖然我們一直在使用它,但如果不加以注意很難意識到它與普通命令的性質是不一樣的:該命令并不是某個外部文件,只要在 Shell 中你就一定可以運行這個命令。

可以使用 type 來確定一個命令是否是內建命令

[root@localhost ~]# type cd
cd is a Shell builtin
[root@localhost ~]# type ifconfig
ifconfig is /sbin/ifconfig

由此可見,cd 是一個 Shell 內建命令,而 ifconfig 是一個外部文件,它的位置是/sbin/ifconfig

還記得系統變量$PATH?嗎?$PATH 變量包含的目錄中幾乎聚集了系統中絕大多數的可執行命令,它們都是外部命令。

通常來說,內建命令會比外部命令執行得更快,執行外部命令時不但會觸發磁盤 I/O,還需要 fork 出一個單獨的進程來執行,執行完成后再退出。而執行內建命令相當于調用當前 Shell 進程的一個函數。

下表列出了 Bash Shell 中直接可用的內建命令。

Bash Shell 內建命令

命令說明
:擴展參數列表,執行重定向操作
.讀取并執行指定文件中的命令(在當前 shell 環境中)
alias為指定命令定義一個別名
bg將作業以后臺模式運行
bind將鍵盤序列綁定到一個 readline 函數或宏
break退出 for、while、select 或 until 循環
builtin執行指定的 shell 內建命令
caller返回活動子函數調用的上下文
cd將當前目錄切換為指定的目錄
command執行指定的命令,無需進行通常的 shell 查找
compgen為指定單詞生成可能的補全匹配
complete顯示指定的單詞是如何補全的
compopt修改指定單詞的補全選項
continue繼續執行 for、while、select 或 until 循環的下一次迭代
declare聲明一個變量或變量類型。
dirs顯示當前存儲目錄的列表
disown從進程作業表中刪除指定的作業
echo將指定字符串輸出到 STDOUT
enable啟用或禁用指定的內建shell命令
eval將指定的參數拼接成一個命令,然后執行該命令
exec用指定命令替換 shell 進程
exit強制 shell 以指定的退出狀態碼退出
export設置子 shell 進程可用的變量
fc從歷史記錄中選擇命令列表
fg將作業以前臺模式運行
getopts分析指定的位置參數
hash查找并記住指定命令的全路徑名
help顯示幫助文件
history顯示命令歷史記錄
jobs列出活動作業
kill向指定的進程 ID(PID) 發送一個系統信號
let計算一個數學表達式中的每個參數
local在函數中創建一個作用域受限的變量
logout退出登錄 shell
mapfile從 STDIN 讀取數據行,并將其加入索引數組
popd從目錄棧中刪除記錄
printf使用格式化字符串顯示文本
pushd向目錄棧添加一個目錄
pwd顯示當前工作目錄的路徑名
read從 STDIN 讀取一行數據并將其賦給一個變量
readarray從 STDIN 讀取數據行并將其放入索引數組
readonly從 STDIN 讀取一行數據并將其賦給一個不可修改的變量
return強制函數以某個值退出,這個值可以被調用腳本提取
set設置并顯示環境變量的值和 shell 屬性
shift將位置參數依次向下降一個位置
shopt打開/關閉控制 shell 可選行為的變量值
source讀取并執行指定文件中的命令(在當前 shell 環境中)
suspend暫停 Shell 的執行,直到收到一個 SIGCONT 信號
test基于指定條件返回退出狀態碼 0 或 1
times顯示累計的用戶和系統時間
trap如果收到了指定的系統信號,執行指定的命令
type顯示指定的單詞如果作為命令將會如何被解釋
typeset聲明一個變量或變量類型。
ulimit為系統用戶設置指定的資源的上限
umask為新建的文件和目錄設置默認權限
unalias刪除指定的別名
unset刪除指定的環境變量或 shell 屬性
wait等待指定的進程完成,并返回退出狀態碼

接下來的幾節我們將重點講解幾個常用的 Shell 內置命令。

十七、Shell alias:給命令創建別名

alisa 用來給命令創建一個別名。若直接輸入該命令且不帶任何參數,則列出當前 Shell 進程中使用了哪些別名。現在你應該能理解類似ll這樣的命令為什么與ls -l的效果是一樣的吧。

下面讓我們來看一下有哪些命令被默認創建了別名:

[mozhiyan@localhost ~]$ alias
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

你看,為了讓我們使用方便,Shell 會給某些命令默認創建別名。

1、使用 alias 命令自定義別名

使用 alias 命令自定義別名的語法格式為:

alias new_name='command'

比如,一般的關機命令是shutdown-h now,寫起來比較長,這時可以重新定義一個關機命令,以后就方便多了。

alias myShutdown='shutdown -h now'

再如,通過 date 命令可以獲得當前的 UNIX 時間戳,具體寫法為date +%s,如果你嫌棄它太長或者不容易記住,那可以給它定義一個別名。

alias timestamp='date +%s'

《三、Shell命令替換》一節中,我們使用date +%s計算腳本的運行時間,現在學了 alias,就可以簡化代碼了。

#!/bin/bash

alias timestamp='date +%s'

begin=`timestamp`

sleep 20s

finish=$(timestamp)

difference=$((finish - begin))

echo "run time: ${difference}s"

運行腳本,20 秒后看到輸出結果:

run time: 20s

別名只是臨時的

在代碼中使用 alias 命令定義的別名只能在當前 Shell 進程中使用,在子進程和其它進程中都不能使用。當前 Shell 進程結束后,別名也隨之消失。

要想讓別名對所有的 Shell 進程都有效,就得把別名寫入 Shell 配置文件。Shell 進程每次啟動時都會執行配置文件中的代碼做一些初始化工作,將別名放在配置文件中,那么每次啟動進程都會定義這個別名。

2、使用 unalias 命令刪除別名

使用 unalias 內建命令可以刪除當前 Shell 進程中的別名。unalias 有兩種使用方法:

  • 第一種用法是在命令后跟上某個命令的別名,用于刪除指定的別名。
  • 第二種用法是在命令后接-a參數,刪除當前 Shell 進程中所有的別名。

同樣,這兩種方法都是在當前 Shell 進程中生效的。要想永久刪除配置文件中定義的別名,只能進入該文件手動刪除。

# 刪除 ll 別名
[mozhiyan@localhost ~]$ unalias ll
# 再次運行該命令時,報“找不到該命令”的錯誤,說明該別名被刪除了
[mozhiyan@localhost ~]$ ll
-bash: ll: command not found

十八、Shell echo命令:輸出字符串

echo 是一個Shell內建明命令?,用來在終端輸出字符串,并在最后默認加上換行符。請看下面的例子:

#!/bin/bash

name="Shell教程"

url="http://c.biancheng.net/shell/"

echo "讀者,你好! "? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#直接輸出字符串

echo $url #輸出變量

echo "${name}的網址是:${url}"? ? ? ? #雙引號包圍的字符串中可以解析變量

echo '${name}的網址是:${url}'? ? ? ? ?#單引號包圍的字符串中不能解析變量

運行結果:

讀者,你好!
http://c.biancheng.net/shell/
Shell教程的網址是:http://c.biancheng.net/shell/
${name}的網址是:${url}

1、不換行

echo 命令輸出結束后默認會換行,如果不希望換行,可以加上-n參數,如下所示:

#!/bin/bash

name="Tom"

age=20

height=175

weight=62

echo -n "${name} is ${age} years old, "

echo -n "${height}cm in height "

echo "and ${weight}kg in weight."

echo "Thank you!"

運行結果:

Tom is 20 years old, 175cm in height and 62kg in weight.
Thank you!

2、輸出轉義字符

默認情況下,echo 不會解析以反斜杠\開頭的轉義字符。比如,\n表示換行,echo 默認會將它作為普通字符對待。請看下面的例子:

[root@localhost ~]# echo "hello \nworld"
hello \nworld

我們可以添加-e參數來讓 echo 命令解析轉義字符。例如:

[root@localhost ~]# echo -e "hello \nworld"
hello
world

\c 轉義字符

有了-e參數,我們也可以使用轉義字符\c來強制 echo 命令不換行了。請看下面的例子:

#!/bin/bash

name="Tom"

age=20

height=175

weight=62

echo -e "${name} is ${age} years old, \c"

echo -e "${height}cm in height \c"

echo "and ${weight}kg in weight."

echo "Thank you!"

運行結果:

Tom is 20 years old, 175cm in height and 62kg in weight.
Thank you!

十九、Shell read命令:讀取從鍵盤輸入的數據

read 是Shell內置明命令用來從標準輸入中讀取數據并賦值給變量。如果沒有進行重定向,默認就是從鍵盤讀取用戶輸入的數據;如果進行了重定向,那么可以從文件中讀取數據。

后續我們會在《Linux Shell重定向》一節中深入講解重定向的概念,不了解的讀者可以不用理會,暫時就認為:read 命令就是從鍵盤讀取數據。

read 命令的用法為:

read [-options] [variables]

options表示選項,如下表所示;variables表示用來存儲數據的變量,可以有一個,也可以有多個。

optionsvariables都是可選的,如果沒有提供變量名,那么讀取的數據將存放到環境變量 REPLY 中。

Shell read 命令支持的選項

選項說明
-a array把讀取的數據賦值給數組 array,從下標?0 開始。
-d delimiter用字符串 delimiter 指定讀取結束的位置,而不是一個換行符(讀取到的數據不包括 delimiter)。
-e在獲取用戶輸入的時候,對功能鍵進行編碼轉換,不會直接顯式功能鍵對應的字符。
-n num讀取 num 個字符,而不是整行字符。
-p prompt顯示提示信息,提示內容為 prompt。
-r原樣讀取(Raw mode),不把反斜杠字符解釋為轉義字符。
-s靜默模式(Silent mode),不會在屏幕上顯示輸入的字符。當輸入密碼和其它確認信息的時候,這是很有必要的。
設置超時時間,單位為秒。如果用戶沒有在指定時間內輸入完成,那么 read 將會返回一個非 0 的退出狀態,表示讀取失敗。
-u fd使用文件描述符 fd 作為輸入源,而不是標準輸入,類似于重定向。

【實例1】使用 read 命令給多個變量賦值。

#!/bin/bash

read -p "Enter some information > " name url age

echo "網站名字:$name"

echo "網址:$url"

echo "年齡:$age"

運行結果:

Enter some information > C語言中文網 http://c.biancheng.net 7↙
網站名字:C語言中文網
網址:http://c.biancheng.net
年齡:7

注意,必須在一行內輸入所有的值,不能換行,否則只能給第一個變量賦值,后續變量都會賦值失敗。

本例還使用了-p選項該選項會用一段文本來提示用戶輸入。

【示例2】只讀取一個字符。

#!/bin/bash

read -n 1 -p "Enter a char > " char

printf "\n" #換行

echo $char

運行結果:

Enter a char > 1
1

-n 1表示只讀取一個字符。運行腳本后,只要用戶輸入一個字符,立即讀取結束,不用等待用戶按下回車鍵。

printf "\n"語句用來達到換行的效果,否則 echo 的輸出結果會和用戶輸入的內容位于同一行,不容易區分。

【實例3】在指定時間內輸入密碼。

#!/bin/bash

if

????????read -t 20 -sp "Enter password in 20 seconds(once) > " pass1 && printf "\n" && #第一次輸入密碼

????????read -t 20 -sp "Enter password in 20 seconds(again)> " pass2 && printf "\n" && #第二次輸入密碼

????????[ $pass1 == $pass2 ] #判斷兩次輸入的密碼是否相等

then

????????echo "Valid password"

else

????????echo "Invalid password"

fi

這段代碼中,我們使用&&組合了多個命令,這些命令會依次執行,并且從整體上作為 if 語句的判斷條件,只要其中一個命令執行失敗(退出狀態為非 0 值),整個判斷條件就失敗了,后續的命令也就沒有必要執行了。

如果兩次輸入密碼相同,運行結果為:
Enter password in 20 seconds(once) >
Enter password in 20 seconds(again)>
Valid password

如果兩次輸入密碼不同,運行結果為:
Enter password in 20 seconds(once) >
Enter password in 20 seconds(again)>
Invalid password

如果第一次輸入超時,運行結果為:
Enter password in 20 seconds(once) > Invalid password

如果第二次輸入超時,運行結果為:
Enter password in 20 seconds(once) >
Enter password in 20 seconds(again)> Invalid password

二十、Shell exit命令:退出當前進程

exit 是一個Shell內置明命令?,用來退出當前 Shell 進程,并返回一個退出狀態;使用$?可以接收這個退出狀態,這一點已在《七、Shell $?:獲取函數返回值或者上一個命令的退出狀態》一節中進行了講解。

exit 命令可以接受一個整數值作為參數,代表退出狀態。如果不指定,默認狀態值是 0。

一般情況下,退出狀態為 0 表示成功,退出狀態為非 0 表示執行失敗(出錯)了。

exit 退出狀態只能是一個介于 0~255 之間的整數,其中只有 0 表示成功,其它值都表示失敗。

Shell 進程執行出錯時,可以根據退出狀態來判斷具體出現了什么錯誤,比如打開一個文件時,我們可以指定 1 表示文件不存在,2 表示文件沒有讀取權限,3 表示文件類型不對。

編寫下面的腳本,并命名為 test.sh:

#!/bin/bash

echo "befor exit"

exit 8

echo "after exit"

運行該腳本:

[mozhiyan@localhost ~]$ bash ./test.sh
befor exit

可以看到,"after exit"并沒有輸出,這說明遇到 exit 命令后,test.sh 執行就結束了。

注意, exit 表示退出當前 Shell 進程,我們必須在新進程中運行 test.sh,否則當前 Shell 會話(終端窗口)會被關閉,我們就無法看到輸出結果了。

我們可以緊接著使用$?來獲取 test.sh 的退出狀態:

[mozhiyan@localhost ~]$ echo $?

8

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

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

相關文章

Navicat 技術指引 | GaussDB服務器對象的創建/設計(編輯)

Navicat Premium(16.2.8 Windows版或以上) 已支持對GaussDB 主備版的管理和開發功能。它不僅具備輕松、便捷的可視化數據查看和編輯功能,還提供強大的高階功能(如模型、結構同步、協同合作、數據遷移等),這…

【華為OD題庫-034】字符串化繁為簡-java

題目 給定一個輸入字符串,字符串只可能由英文字母(a ~ z、A ~ Z)和左右小括號()組成。當字符里存在小括號時,小括號是成對的,可以有一個或多個小括號對,小括號對不會嵌套,小括號對內可以包含1個或多個英文字母也可以不…

Jenkins Ansible 參數構建

首先在Jenkins中創建自由項目 在web端配置完成后在另一臺機子上下載nginx 在gitlab端創建項目并創建文件配置代碼 在有Jenkins的機器上下載Ansible [rootslave1 ~]# yum -y install epel-release [rootslave1 ~]# yum -y install ansible再進入下載nginx機器中克隆gitlab項目…

Android 框架層AIDL 添加接口

文章目錄 AIDL的原理構建AIDL的流程往凍結的AIDL中加接口 AIDL的原理 可以利用ALDL定義客戶端與服務均認可的編程接口,以便二者使用進程間通信 (IPC) 進行相互通信。在 Android 中,一個進程通常無法訪問另一個進程的內存。因此,為進行通信&a…

卷積神經網絡(AlexNet)鳥類識別

文章目錄 一、前言二、前期工作1. 設置GPU(如果使用的是CPU可以忽略這步)2. 導入數據3. 查看數據 二、數據預處理1. 加載數據2. 可視化數據3. 再次檢查數據4. 配置數據集 三、AlexNet (8層)介紹四、構建AlexNet (8層)網絡模型五、…

微信小程序image組件圖片設置最大寬度 寬高自適應

問題描述:在使用微信小程序image組件的時候,在不確定圖片寬高情況下 想給一個最大寬度讓圖片自適應,按比例,image的widthfiex和heightFiex并不能滿足(只指定最大寬/高并不會生效) 問題解決:使用…

居家適老化設計第二十九條---衛生間之花灑

無電源 燈光顯示 無障礙扶手型花灑 以上產品圖片均來源于淘寶 侵權聯系刪除 居家適老化衛生間的花灑通常具有以下特點和功能:1. 高度可調節:適老化衛生間花灑可通過調節高度,滿足不同身高的老年人使用需求,避免彎腰或過高伸展造…

【開源】基于Vue.js的固始鵝塊銷售系統

項目編號: S 060 ,文末獲取源碼。 \color{red}{項目編號:S060,文末獲取源碼。} 項目編號:S060,文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 數據中心模塊2.2 鵝塊類型模塊2.3 固…

qgis添加xyz柵格瓦片

方式1:手動一個個添加 左側瀏覽器-XYZ Tiles-右鍵-新建連接 例如添加高德瓦片地址 https://wprd01.is.autonavi.com/appmaptile?langzh_cn&size1&style7&x{x}&y{y}&z{z} 雙擊即可呈現 收集到的一些圖源,僅供參考,其中一…

【C++學習手札】模擬實現list

? 🎬慕斯主頁:修仙—別有洞天 ??今日夜電波:リナリア—まるりとりゅうが 0:36━━━━━━?💟──────── 3:51 🔄 ?? ? ??…

聊聊httpclient的staleConnectionCheckEnabled

序 本文主要研究一下httpclient的staleConnectionCheckEnabled staleConnectionCheckEnabled org/apache/http/client/config/RequestConfig.java public class RequestConfig implements Cloneable {public static final RequestConfig DEFAULT new Builder().build();pr…

【ARM 嵌入式 編譯 Makefile 系列 18 -- Makefile 中的 export 命令詳細介紹】

文章目錄 Makefile 中的 export 命令詳細介紹Makefile 使用 export導出與未導出變量的區別示例:導出變量以供子 Makefile 使用 Makefile 中的 export 命令詳細介紹 在 Makefile 中,export 命令用于將變量從 Makefile 導出到由 Makefile 啟動的子進程的環…

qgis添加wms服務

例如添加geoserver的wms服務 左右瀏覽器-WMS/WMTS-右鍵-新建連接 URL添加geoserver的wms地址 http://{ip}:{port}/geoserver/{workspace}/wms 展開wms目錄,雙擊相應圖層即可打開

Spark---基于Yarn模式提交任務

Yarn模式兩種提交任務方式 一、yarn-client提交任務方式 1、提交命令 ./spark-submit --master yarn --class org.apache.spark.examples.SparkPi ../examples/jars/spark-examples_2.11-2.3.1.jar 100 或者 ./spark-submit --master yarn–client --class org.apache.s…

三菱PLC應用[集錦]

三菱PLC應用[集錦] 如何判斷用PNP還是NPN的個人工作心得 10~30VDC接近開關與PLC連接時,如何判斷用PNP還是NPN的個人工作心得: 對于PLC的開關量輸入回路。我個人感覺日本三菱的要好得多,甚至比西門子等赫赫大名的PLC都要實用和可靠&#xff01…

vulnhub4

靶機地址: https://download.vulnhub.com/admx/AdmX_new.7z 信息收集 fscan 掃一下 ┌──(kali?kali)-[~/Desktop/Tools/fscan] └─$ ./fscan_amd64 -h 192.168.120.138 ___ _ / _ \ ___ ___ _ __ __ _ ___| | __ / /_\/____/ __|/ …

LeetCode | 622. 設計循環隊列

LeetCode | 622. 設計循環隊列 OJ鏈接 思路: 我們這里有一個思路: 插入數據,bank往后走 刪除數據,front往前走 再插入數據,就循環了 那上面這個方法可行嗎? 怎么判斷滿,怎么判斷空&#xff1…

模電知識點總結(二)二極管

系列文章目錄 文章目錄 系列文章目錄二極管二極管電路分析方法理想模型恒壓降模型折線模型小信號模型高頻/開關 二極管應用整流限幅/鉗位開關齊納二極管變容二極管肖特基二極管光電器件光電二極管發光二極管激光二極管太陽能電池 二極管 硅二極管:死區電壓&#xf…

今年注冊電氣工程師考試亂象及就業前景分析

1、注冊電氣工程師掛靠價格 # 2011年以前約為5萬一年,2011年開始強制實施注冊電氣執業制度,證書掛靠價格開始了飛漲,2013年達到巔峰,供配電15萬一年,發輸變電20-25萬一年,這哪里是證書,簡直就是…

Docker kill 命令

docker kill:殺死一個或多個正在運行的容器。 語法: docker kill [OPTIONS] CONTAINER [CONTAINER...]OPTIONS說明: -s:向容器發送一個信號 描述: docker kill子命令會殺死一個或多個容器。容器內的主進程被發送S…