售價 24.38 萬元,奧迪新款 Q2L e-tron 純電 SUV 正式上市,325 公里續航
Bash Shell 環境變數
變數 | 說明 |
---|---|
* | 含有所有命令列引數(以單個文字值的形式) |
@ | 含有所有命令列引數(以多個文字值的形式) |
# | 命令列引數數目 |
? | 最近使用的前臺程序的退出狀態碼 |
- | 當前命令列選項標記 |
$ | 當前shell的程序 ID (PID) |
! | 最近執行的後臺程序的 PID |
0 | 命令列中使用的命令名稱 |
_ | shell 的絕對路徑名 |
BASH | 用來呼叫 shell 的完整檔名 |
BASHOPTS | 允許冒號分隔列表形式的 Shell 選項 |
BASHPID | 當前 bash shell 的程序 ID |
BASH_ALIASED | 含有當前所用別名的陣列 |
BASH_ARGC | 當前子函式中的引數數量 |
BASH_ARGV | 含有所有指定命令列引數的陣列 |
BASH_CMDS | 含有命令的內部散列表的陣列 |
BASH_COMMAND | 當前正在被執行的命令名 |
BASH_ENV | 如果設定了的話,每個 bash 指令碼都會嘗試在執行前執行由該變數定義的起始檔案 |
BASH_EXECUTION_STRING | 在 -c 命令列選項中用到的命令 |
BASH_LINENO | 含有指令碼中每個命令的行號的陣列 |
BASH_REMATCH | 含有與指定的正則表示式匹配的文字元素的陣列 |
BASH_SOURCE | 含有 shell 中已宣告函式所在原始檔名的陣列 |
BASH_SUBSHELL | 當前 shell 生成的子 shell 數目 |
BASH_VERS INFO | 含有當前 bash shell 例項的主版本號和次版本號的陣列 |
BASH_VERS ION | 當前 bash shell 例項的版本號 |
BASH_XTRACEFD | 當設定一個有效的檔案描述符整數時,跟蹤輸出生成,並與診斷和錯誤資訊分離開檔案描述符必須設定 -x 啟動 |
COLUMNS | 含有當前 bash shell 例項使用的終端的寬度 |
COMP_CWORD | 含有變數 COMP_WORDS 的索引直,COMP_WORDS 包含當前游標所在的位置 |
COMP_KEY | 呼叫補全功能的按鍵 |
COMP_LINE | 當前命令列 |
COMP_POINT | 當前游標位置相對幹當前命令起始位置的索引 |
COMP_TYPE | 補全型別所對應的整數值 |
COMP_WORDBREAKS | 在進行單詞補全時閈作單詞分隔符的一組字元 |
COMP_WORDS | 含有當前命令列上所有單詞的陣列 |
COMPREPLY | 含有由 shell 函式生成的可能補全碼的陣列 |
COPROC | 含有若干匿名協程 I/O 的檔案描述符的陣列 |
DIRSTACK | 含有目錄棧當前內容的陣列 |
EMACS | 如果設定了該環境變數,則 shell 認為其使用的是 emacs shell 緩衝區,同時禁止行編輯功能 |
ENV | 當 shell 以 POSIX 模式呼叫時,每個 bash 指令碼在執行之前都會執行由該環境變數所定義的起始檔案 |
EUID | 當前使用者的有效使用者 ID(數字形式) |
FCEDIT | fc 命令使用的預設編輯器 |
FIGNORE | 以冒號分隔的字尾名列表,在檔名補全時會被忽略 |
FUNCNAME | 當前執行的 shell 函式的名稱 |
FUNCNEST | 巢狀函式的最髙層級 |
GLOBIGNORE | 以冒號分隔的模式列表,定義了檔名展開時要忽略的檔名集合 |
GROUPS | 含有當前使用者屬組的陣列 |
histchars | 控制歷史記錄展開的字元(最多可有3個) |
HISTCMD | 當前命令在歷史記錄中的編號 |
HISTCONTROL | 控制哪些命令留在歷史記錄列表中 |
HISTFILE | 儲存 shell 歷史記錄列表的檔名(預設是 .bash_history) |
HISTFILESIZE | 儲存在歷史檔案中的最大行數 |
HISTIGNORE | 以冒號分隔的模式列表,用來決定哪些命令不存進歷史檔案 |
HISTSIZE | 最多在歷史檔案中儲存多少條命令 |
HISTIMEFORMAT | 設定後,決定歷史檔案條目的時間戳的格式字串 |
HOSTFILE | 含有 shell 在補全主機名時讀取的檔案的名稱 |
HOSTNAME | 當前主機的名稱 |
HOSTTYPE | 當前執行 bash shell 的機器 |
IGNOREEOF | shell 在退出前必須收到連續的 EOF 字元的數量。如果這個值不存在,預設是 1 |
INPUTRC | readline 初始化檔名(預設是 .inputrc) |
LANG | shell 的語言環境分類 |
LC_ALL | 定義一個語言環境分類,它會覆蓋 LANG 變數 |
LC_COLLATE | 設定對字串值排序時用的對照表順序 |
LC_CTYPE | 決定在進行檔名擴充套件和模式匹配時,如何解釋其中的字元 |
LC_MESSAGES | 決定解釋前置美元符($)的雙引號字串的語言環境設定 |
LC_NUMERIC | 決定格式化數字時的所使用的語言環境設定 |
LINENO | 指令碼中當前執行程式碼的行號 |
LINES | 定義了終端上可見的行數 |
MACHTYPE | 用“cpu-公司-系統”格式定義的系統型別 |
MAILCHECK | Shell 多久檢視一次新郵件(以秒為單位,預設值是 60) |
MAPFILE | 含有 mapfile 命令所讀入文字的陣列,當沒有給出變數名的時候,使用該環境變數 |
OLDPWD | shell 之前的工作目錄 |
OPTERR | 設定為 1 時,bash shell 會顯示 getopts 命令產生的錯誤 |
OSTYPE | 定義了 shell 執行的作業系統 |
PIPESTATUS | 含有前臺程序退出狀態碼的陣列 |
POSIXLY_CORRECT | 如果設定了該環境變數,bash 會以 POSIX 模式啟動 |
PPID | bash shell 父程序的 PID |
PROMPT_COMMAND | 如果設定該環境變數,在顯示命令列主提示符之前會執行這條命令 |
PS1 | 主命令列提示符字串 |
PS2 | 次命令列提示符字串 |
PS3 | select 命令的提示符 |
PS4 | 如果使用了 bash 的 -x 選項,在命令列顯示之前顯示的提示符 |
PWD | 當前工作目錄 |
RANDOM | 返回一個 0~32 767 的隨機數,對其賦值可作為隨機數生成器的種子 |
READLINE_LINE | 儲存了 readline 行緩衝區中的內容 |
READLINE_POINT | 當前 readline 行緩衝區的插入點位置 |
REPLY | read 命令的預設變數 |
SECONDS | 自 shell 啟動到現在的秒數,對其賦值將會重置計時器 |
SHELL | shell 的全路徑名 |
SHELLOPTS | 已啟用 bash shell 選項列表,由冒號分隔 |
SHLVL | 表明 shell 層級,每次啟動一個新的 bash shell 時計數加 1 |
TIMEFORMAT | 指定了 shell 顯示的時間值的格式 |
TMOUT | select 和 read 命令在沒輸入的情況下等待多久(以秒為單位)。預設值為零,表示無限長 |
TMPDIR | 如果設定成目錄名,shell 會將其作為臨時檔案目錄 |
UID | 當前使用者的真實使用者 ID (數字形式) |
Shell解析器
Linux提供的Shell解析器
cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
預設的解析器
echo $SHELL
/bin/bash
Shell指令碼入門
指令碼格式
指令碼以#!/bin/bash開頭(指定解析器)
第一個Shell指令碼:helloworld
建立一個Shell指令碼,輸出helloworld
vim helloworld.sh
#!/bin/bash
echo "helloworld"
指令碼的常用執行方式
採用bash或sh+指令碼的相對路徑或絕對路徑
不用賦予指令碼+x許可權
sh+指令碼的相對路徑
sh helloworld.sh
helloworld
sh+指令碼的絕對路徑
sh /home/owenxuan/helloworld.sh
helloworld
bash+指令碼的相對路徑
bash helloworld.sh
helloworld
bash+指令碼的絕對路徑
bash /home/owenxuan/helloworld.sh
helloworld
採用輸入指令碼的絕對路徑或相對路徑執行指令碼
必須具有可執行許可權+x
首先要賦予helloworld.sh
sudo chmod 777 helloworld.sh
相對路徑執行指令碼
./helloworld.sh
helloworld
絕對路徑執行指令碼
/home/owenxuan/helloworld.sh
helloworld
- 第一種執行方法,本質是bash解析器幫你執行指令碼,所以指令碼本身不需要執行許可權。
- 第二種執行方法,本質是指令碼需要自己執行,所以需要執行許可權。
第二個Shell指令碼:多命令處理
在/home/owenxuan/目錄下建立一個cls.txt,在cls.txt檔案中增加“I love cls”
vim batch.sh
#!/bin/bash
cd /home/owenxuan
touch cls.txt
echo "I love cls" >>cls.txt
Shell中的變數
系統變數
echo $HOME
/home/owenxuan
自定義變數
基本語法
- 定義變數:變數=值
- 撤銷變數:unset 變數
- 宣告靜態變數:readonly變數,注意:不能unset
變數定義規則
- 變數名稱可以由字母、數字和下劃線組成,但是不能以數字開頭,環境變數名建議大寫。
- 等號兩側不能有空格
- 在bash中,變數預設型別都是字串型別,無法直接進行數值運算。
- 變數的值如果有空格,需要使用雙引號或單引號括起來。
案例實操
定義變數A
A=5
echo $A
5
給變數A重新賦值
A=8
echo $A
8
撤銷變數A
unset A
echo $A
宣告靜態的變數B=2,不能unset
readonly B=2
echo $B
2
B=9
-bash: B: readonly variable
在bash中,變數預設型別都是字串型別,無法直接進行數值運算
C=1+2
echo $C
1+2
變數的值如果有空格,需要使用雙引號或單引號括起來
D=I love you
-bash: world: command not found
D="I love you"
echo $A
I love you
可把變數提升為全域性環境變數,可供其他Shell程式使用
export 變數名
vim helloworld.sh
#!/bin/bash
echo "helloworld"
echo $B
sh /helloworld.sh
Helloworld
發現並沒有列印輸出變數B的值
export B
sh /helloworld.sh
helloworld
2
特殊變數
$n
基本語法
n為數字,$0代表該指令碼名稱,$1-\(9代表第一到第九個引數,十以上的引數,十以上的引數需要用大括號包含,如\){10}
案例實操
vim parameter.sh
#!/bin/bash
echo "$0 $1 $2"
sh parameter.sh cls xz
parameter.sh cls xz
$#
基本語法
獲取所有輸入引數個數,常用於迴圈
案例實操
vim parameter.sh
#!/bin/bash
echo "$0 $1 $2"
echo $#
sh parameter.sh cls xz
parameter.sh cls xz
2
$*
基本語法
這個變數代表命令列中所有的引數,$*把所有的引數看成一個整體
案例實操
vim parameter.sh
#!/bin/bash
echo "$0 $1 $2"
echo $#
echo $*
sh parameter.sh cls xz 1 2 3
parameter.sh cls xz
2
1 2 3
$@
基本語法
這個變數也代表命令列中所有的引數,過$@把每個引數區分對待
案例實操
vim parameter.sh
#!/bin/bash
echo "$0 $1 $2"
echo $#
echo $*
echo $@
sh parameter.sh cls xz 1 2 3
parameter.sh cls xz
2
1 2 3
1 2 3
$?
基本語法
最後一次執行的命令的返回狀態。如果這個變數的值為0,證明上一個命令正確執行;如果這個變數的值為非0(具體是哪個數,由命令自己來決定),則證明上一個命令執行不正確了
案例實操
sh parameter.sh cls xz 1 2 3
parameter.sh cls xz
2
1 2 3
1 2 3
echo $?
0
運算子
基本語法
- “\(((運算式))”或“\)[運算式]”
- expr + , - , *, /, % 加,減,乘,除,取餘
案例實操
計算3+2的值
expr 2 + 3
5
計算3-2的值
expr 3 - 2
1
計算(2+3)X4的值
expr一步完成計算
expr `expr 2 + 3` \* 4
20
採用$[運算式]方式
S=$[(2+3)*4]
echo $S
20
條件判斷
基本語法
[ condition ](注意condition前後要有空格)
注意:條件非空即為true,[ atguigu ]返回true,[] 返回false。
常用判斷條件
兩個整數之間比較
- = 字串比較
- -lt 小於(less than)
- -le 小於等於(less equal)
- -eq 等於(equal)
- -gt 大於(greater than)
- -ge 大於等於(greater equal)
- -ne 不等於(Not equal)
按照檔案許可權進行判斷
- -r 有讀的許可權(read)
- -w 有寫的許可權(write)
- -x 有執行的許可權(execute)
按照檔案型別進行判斷
- -f 檔案存在並且是一個常規的檔案(file)
- -e 檔案存在(existence)
- -d 檔案存在並是一個目錄(directory)
案例實操
23是否大於等於22
[ 23 -ge 22 ]
echo $?
0
helloworld.sh是否具有寫許可權
[ -w helloworld.sh ]
echo $?
0
/home/owenxuan/cls.txt目錄中的檔案是否存在
[ -e /home/atguigu/cls.txt ]
echo $?
0
多條件判斷(&& 表示前一條命令執行成功時,才執行後一條命令,|| 表示上一條命令執行失敗後,才執行下一條命令)
[ condition ] && echo OK || echo notok
OK
[ condition ] && [ ] || echo notok
notok
流程控制
if 判斷
基本語法
if [ 條件判斷式 ];then
程式
fi
或者
if [ 條件判斷式 ]
then
程式
fi
注意:
- [ 條件判斷式 ],中括號和條件判斷式之間必須有空格
- if後要有空格
案例實操
輸入一個數字,如果是1,則輸出banzhang zhen shuai,如果是2,則輸出cls zhen mei,如果是其它,什麼也不輸出
vim if.sh
#!/bin/bash
if test $1 -eq "1"
then
echo "banzhang zhen shuai"
elif [ $1 -eq "2" ]
then
echo "cls zhen mei"
fi
bash if.sh 1
banzhang zhen shuai
case 語句
基本語法
case $變數名 in
"值1")
如果變數的值等於值1,則執行程式1
;;
"值2")
如果變數的值等於值2,則執行程式2
;;
…省略其他分支…
*)
如果變數的值都不是以上的值,則執行此程式
;;
esac
注意:
- case行尾必須為單詞“in”,每一個模式匹配必須以右括號“)”結束。
- 雙分號“;;”表示命令序列結束,相當於java中的break。
- 最後的“*)”表示預設模式,相當於java中的default。
案例實操
輸入一個數字,如果是1,則輸出banzhang,如果是2,則輸出cls,如果是其它,輸出renyao
vim case.sh
#!/bin/bash
case $1 in
"1")
echo "banzhang"
;;
"2")
echo "cls"
;;
*)
echo "renyao"
;;
esac
bash case.sh 1
1
for 迴圈
基本語法 1
for (( 初始值;迴圈控制條件;變數變化 ))
do
程式
done
案例實操 1
從1加到100
vim for1.sh
#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
s=$[$s+$i]
done
echo $s
bash for1.sh
5050
基本語法 2
for 變數 in 值1 值2 值3…
do
程式
done
案例實操 2
列印所有輸入引數
vim for2.sh
#!/bin/bash
#列印數字
for i in $*
do
echo "ban zhang love $i "
done
bash for2.sh cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
比較\(*和\)@區別
\(*和\)@都表示傳遞給函式或指令碼的所有引數,不被雙引號“”包含時,都以$1 \(2 …\)n的形式輸出所有引數
vim for.sh
#!/bin/bash
for i in $*
do
echo "ban zhang love $i "
done
for j in $@
do
echo "ban zhang love $j"
done
bash for.sh cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
當它們被雙引號“”包含時,“$*”會將所有的引數作為一個整體,以“$1 \(2 …\)n”的形式輸出所有引數;“$@”會將各個引數分開,以“$1” “\(2”…”\)n”的形式輸出所有引數
vim for.sh
#!/bin/bash
for i in "$*"
do
echo "ban zhang love $i"
done
for j in "$@"
do
echo "ban zhang love $j"
done
bash for.sh cls xz bd
ban zhang love cls xz bd
ban zhang love cls
ban zhang love xz
ban zhang love bd
while 迴圈
基本語法
while [ 條件判斷式 ]
do
程式
done
案例實操
從1加到100
vim while.sh
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s
bash while.sh
5050
read讀取控制檯輸入
基本語法
read(選項)(引數)
選項:
-p:指定讀取值時的提示符;
-t:指定讀取值時等待的時間(秒)。
引數
變數:指定讀取值的變數名
案例實操
vim read.sh
#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds " NAME
echo $NAME
bash read.sh
Enter your name in 7 seconds owen
owen
函式
系統函式
basename基本語法
basename [string / pathname] [suffix]
功能描述:
basename命令會刪掉所有的字首包括最後一個(‘/’)字元,然後將字串顯示出來
選項:
suffix為字尾,如果suffix被指定了,basename會將pathname或string中的suffix去掉。
案例實操
擷取該/home/owenxuan/banzhang.txt路徑的檔名稱
basename /home/owenxuan/banzhang.txt
banzhang.txt
basename /home/owenxuan/banzhang.txt .txt
owenxuan
dirname基本語法
dirname 檔案絕對路徑
功能描述:
從給定的包含絕對路徑的檔名中去除檔名(非目錄的部分),然後返回剩下的路徑(目錄的部分)
案例實操
獲取banzhang.txt檔案的路徑
dirname /home/owenxuan/banzhang.txt
/home/owenxuan
自定義函式
基本語法
[ function ] funname[()]
{
Action;
[return int;]
}
funname
經驗技巧
- 必須在呼叫函式地方之前,先宣告函式,shell指令碼是逐行執行。不會像其它語言一樣先編譯。
- 函式返回值,只能通過$?系統變數獲得,可以顯示加:return返回,如果不加,將以最後一條命令執行結果,作為返回值。return後跟數值n(0-255)
案例實操
計算兩個輸入引數的和
vim fun.sh
#!/bin/bash
function sum()
{
s=0
s=$[ $1 + $2 ]
echo "$s"
}
read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;
bash fun.sh
Please input the number1: 2
Please input the number2: 5
7
Shell工具
cut
cut的工作就是“剪”,具體的說就是在檔案中負責剪下資料用的。cut 命令從檔案的每一行剪下位元組、字元和欄位並將這些位元組、字元和欄位輸出
基本用法
cut [選項引數] filename
說明:
預設分隔符是製表符
選項引數說明
選項引數 | 功能 |
---|---|
-f | 列號,提取第幾列 |
-d | 分隔符,按照指定分隔符分割列 |
案例實操
資料準備
vim cut.txt
dong shen
guan zhen
wo wo
lai lai
le le
切割cut.txt第一列
cut -d " " -f 1 cut.txt
dong
guan
wo
lai
le
切割cut.txt第二、三列
cut -d " " -f 2,3 cut.txt
shen
zhen
wo
lai
le
在cut.txt檔案中切割出guan
cat cut.txt | grep "guan" | cut -d " " -f 1
guan
選取系統PATH變數值,第2個“:”開始後的所有路徑:
echo $PATH
/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/owenxuan/bin
echo $PATH | cut -d: -f 2-
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/owenxuan/bin
切割ifconfig 後列印的IP地址
ifconfig eth0 | grep "inet addr" | cut -d: -f 2 | cut -d" " -f1
10.10.10.30
sed
sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”,接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有改變,除非你使用重定向儲存輸出。
基本用法
sed [選項引數] ‘command’ filename
選項引數說明
選項引數 | 功能 |
---|---|
-e | 直接在指令列模式上進行sed的動作編輯。 |
命令功能描述
命令 | 功能描述 |
---|---|
a | 新增,a的後面可以接字串,在下一行出現 |
d | 刪除 |
s | 查詢並替換 |
案例實操
資料準備
vim sed.txt
dong shen
guan zhen
wo wo
lai lai
le le
將“mei nv”這個單詞插入到sed.txt第二行下,列印
sed '2a mei nv' sed.txt
dong shen
guan zhen
mei nv
wo wo
lai lai
le le
cat sed.txt
dong shen
guan zhen
wo wo
lai lai
le le
注意:檔案並沒有改變
刪除sed.txt檔案所有包含wo的行
sed '/wo/d' sed.txt
dong shen
guan zhen
ni ni
lai lai
le le
注意:‘g’表示global,全部替換
將sed.txt檔案中的第二行刪除並將wo替換為ni
sed -e '2d' -e 's/wo/ni/g' sed.txt
dong shen
ni ni
lai lai
le le
awk
一個強大的文字分析工具,把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行分析處理。
基本用法
awk [選項引數] ‘pattern1{action1} pattern2{action2}...’ filename
- pattern:表示AWK在資料中查詢的內容,就是匹配模式
- action:在找到匹配內容時所執行的一系列命令
選項引數說明
選項引數 | 功能 |
---|---|
-F | 指定輸入檔案折分隔符 |
-v | 賦值一個使用者定義變數 |
案例實操
資料準備
sudo cp /etc/passwd ./
搜尋passwd檔案以root關鍵字開頭的所有行,並輸出該行的第7列。
awk -F: '/^root/{print $7}' passwd
/bin/bash
搜尋passwd檔案以root關鍵字開頭的所有行,並輸出該行的第1列和第7列,中間以“,”號分割。
awk -F: '/^root/{print $1","$7}' passwd
root,/bin/bash
注意:只有匹配了pattern的行才會執行action
只顯示/etc/passwd的第一列和第七列,以逗號分割,且在所有行前面新增列名user,shell在最後一行新增"dahaige,/bin/zuishuai"。
awk -F : 'BEGIN{print "user, shell"} {print $1","$7} END{print "dahaige,/bin/zuishuai"}' passwd
user, shell
root,/bin/bash
bin,/sbin/nologin
。。。
atguigu,/bin/bash
dahaige,/bin/zuishuai
注意:BEGIN 在所有資料讀取行之前執行;END 在所有資料執行之後執行。
將passwd檔案中的使用者id增加數值1並輸出
awk -v i=1 -F: '{print $3+i}' passwd
1
2
3
4
awk的內建變數
變數 | 說明 |
---|---|
FILENAME | 檔名 |
NR | 已讀的記錄數 |
NF | 瀏覽記錄的域的個數(切割後,列的個數) |
案例實操
統計passwd檔名,每行的行號,每行的列數
awk -F: '{print "filename:" FILENAME ", linenumber:" NR ",columns:" NF}' passwd
filename:passwd, linenumber:1,columns:7
filename:passwd, linenumber:2,columns:7
filename:passwd, linenumber:3,columns:7
切割IP
ifconfig eth0 | grep "inet addr" | awk -F: '{print $2}' | awk -F " " '{print $1}'
10.10.10.30
查詢sed.txt中空行所在的行號
awk '/^$/{print NR}' sed.txt
5
sort
sort命令是在Linux裡非常有用,它將檔案進行排序,並將排序結果標準輸出。
基本語法
sort(選項)(引數)
選項 | 說明 |
---|---|
-n | 依照數值的大小排序 |
-r | 以相反的順序來排序 |
-t | 設定排序時所用的分隔字元 |
-k | 指定需要排序的列 |
引數:指定待排序的檔案列表
案例實操
資料準備
vim sort.sh
bb:40:5.4
bd:20:4.2
xz:50:2.3
cls:10:3.5
ss:30:1.6
按照“:”分割後的第三列倒序排序。
sort -t : -nrk 3 sort.sh
bb:40:5.4
bd:20:4.2
cls:10:3.5
xz:50:2.3
ss:30:1.6