shell脚本基础和shell工具

目录

1.shell概述

2.shell脚本编程入门基础

3.shell工具


shell概述

shell是一个命令行解释器,它接收应用程序/用户命令,然后调用操作系统内核

shell基础语法 

脚本格式 

 脚本以#!/bin/bash开头(指定解析器)

helloword例子 

#!/bin/bash
echo "liuzhijie 你真帅"

echo "helloword"

 shell脚本执行命令

./test.sh 或者sh test.sh

方式1,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限;方式2,本质是脚本自己需要执行,所以需要执行权限

chmod 777 xxx.sh

 多命令处理

在linux /home/liuzhijie/目录下创建一个liuzhijie.txt并在文件中写入"I IOVE YOU"字符  

#!bin/bash
##进入/home/liuzhijie
cd /home/liuzhijie/
###创建文件
touch liuzhijie.txt
### 输出"I LOVE ZLS" 追加到liuzhijie.txt 文件中
echo "I LOVE ZLS" >> liuzhijie.txt

shell

shell中的变量

常用系统变量

$HOME $PWD $SHELL $USER

[root@LZJ-LINUX liuzhijie]# echo $HOME
/root    ###当前用户的家目录
[root@LZJ-LINUX liuzhijie]# 

[root@LZJ-LINUX liuzhijie]# echo $PWD
/home/liuzhijie   ### 当前路径
[root@LZJ-LINUX liuzhijie]# echo $SHELL
/bin/bash
[root@LZJ-LINUX liuzhijie]# echo $JAVA_HOME
/usr/java/jdk1.8.0_181   ##java安装目录
[root@LZJ-LINUX liuzhijie]# echo $USER
root     ## 当前用户
[root@LZJ-LINUX liuzhijie]# 

自定义变量

格式: 等号两边不能留有空格

变量=值

  1. 撤销变量:unset 变量

  2. 输出变量:echo $变量

[root@LZJ-LINUX liuzhijie]# A=1   ###定义一个变量A 并复制=1
[root@LZJ-LINUX liuzhijie]# echo $A
1
[root@LZJ-LINUX liuzhijie]# unset A

声明静态变量: readonly 变量,注意:不能unset

[root@LZJ-LINUX liuzhijie]# readonly B=3
[root@LZJ-LINUX liuzhijie]# echo $B
3
[root@LZJ-LINUX liuzhijie]# unset B
bash: unset: B: cannot unset: readonly variable

变量定义规则

  1. 变量名称可以由字母,数字和下划线组成,不能以数字开头,环境变量名建议大写

  2. 等号两侧不能有空格

  3. 在bash中,变量默认类型都是字符串类型,无法直接进行数值运算

  4. 变量的值如果有空格,需要使用双引号或单引号括起来

[root@LZJ-LINUX liuzhijie]$ D="A B C"
[root@LZJ-LINUX liuzhijie]$ echo $D
A B C

全局变量

可把变量提升为全局变量,可供其他shell程序使用

export 变量

例子

test3.sh 脚本内容

#! /bin/bash
echo "$0 $1 $2"
echo $LZJ

执行结果

[root@LZJ-LINUX liuzhijie]# export LZJ=6666 ##定义全局变量
[root@LZJ-LINUX liuzhijie]# sh test3.sh 
test3.sh  
6666  ### 输出全局变量
[root@LZJ-LINUX liuzhijie]#

特殊变量

  •  $n

$n (描述:n为数字,$0代表脚本名称,10以内参数用$1-9 表 示 , 10 以 上 的 需 要 用 大 括 号 包 含 , 9表示,10以上的需要用大括号包含,9表示,10以上的需要用大括号包含,{10})

例子

test4.sh脚本内容

##test4.sh脚本内容
#!/bin/bash

echo "============输出参数0============="

echo "参数0:"$0

echo "输出参数1"

echo "参数1:"$1

echo "输出参数2"

echo "参数2:"$2

echo "输出参数10"

echo "参数10:"${10}

echo "$0 $1 $2"

执行脚本 ./test4.sh

[root@LZJ-LINUX liuzhijie]# sh test4.sh 1 2
============输出参数0=============
参数0:test4.sh
输出参数1
参数1:1
输出参数2
参数2:2
输出参数10
参数10:s
test4.sh 1 2
  • $#

$# (功能描述:获取所有输入参数个数,常用于循环)

 

#!/bin/bash
echo "$0 $1 $2 $3"
echo $#   ###输出参数个数 4
  • $* 和$@

  • $* (描述:代表命令行中所有的参数,把所有参数看成一个整体)

  • $@ (描述:也代表命令行中所有的参数,不过把每个参数区分对待)

  • $?

$? (描述:最后一次执行命令的状态,0:正确执行)

 例子

 test4.sh

#!/bin/bash


echo "参数0:"$0

echo "输出参数1"

echo "参数1:"$1

echo "输出参数2"

echo "参数2:"$2


echo $#

echo $*

echo $@

echo $?

执行结果

[root@LZJ-LINUX liuzhijie]# sh test4.sh  1 2

参数0:test4.sh
输出参数1
参数1:1
输出参数2
参数2: 2

2
1 2
1 2
0

运算符

基本语法

  1. $((运算式)) 或 $[运算式]

  2. expr +,-,*,/,% 加减乘除取余 expr运算符间要有空格

 

 

[root@LZJ-LINUX liuzhijie]# expr 3+2
3+2
[root@LZJ-LINUX liuzhijie]# expr 3 + 2 
5
[root@LZJ-LINUX liuzhijie]# expr 4 - 2
2
[root@LZJ-LINUX liuzhijie]# expr `expr 2 + 3 ` \* 4   ## (2+3)*4
20
[root@LZJ-LINUX liuzhijie]# s=$[(2+3)*4]    ##### (2+3)*4

[root@LZJ-LINUX liuzhijie]# echo $s
20
[root@LZJ-LINUX liuzhijie]# 

条件判断

基本语法

[condition] (注意 condition前后要有空格)  

 

两个整数之间比较

符号描述
-lt(less than)小于
-le(less equal) 小于等于
-eq(equal)等于
-gt(greater than) 大于
-ge(greater equal) 大于等于
-ne(not equal) 不等

文件权限判断

符号描述
-r有读的权限
-w有写的权限
-x有执行的权限

文件类型判断

符号描述
-f文件存在并且是一个常规文件
-e文件存在
-d文件存在病是一个目录
[root@LZJ-LINUX ~]# [ 23 -le 24 ]
[root@LZJ-LINUX ~]# echo $?
0
[root@LZJ-LINUX ~]# [ 23 -ge 22 ]
[root@LZJ-LINUX ~]# echo $?
0
[root@LZJ-LINUX ~]# [ 23 -eq 24 ]
[root@LZJ-LINUX ~]# echo $?
1
[root@LZJ-LINUX liuzhijie]#  [ -w liuzhijie.txt ]
[root@LZJ-LINUX liuzhijie]# echo $?
0
[root@LZJ-LINUX liuzhijie]#  [ -e liuzhijie.txt ] 
[root@LZJ-LINUX liuzhijie]# echo $?              
0

 

多条间判断

&& 和||

&&表示前一条命令执行成功时,才执行后一条命令,

||表示上一条命令执行失败后,才执行下一条命令

 

[root@LZJ-LINUX liuzhijie]# [ 23 -eq 24 ] && echo ok || echo notok
notok
[root@LZJ-LINUX liuzhijie]# 

流程控制

if判断

基本语法

if [ 条件判断式 ];then
    程序
fi
或者
if [ 条件判断式 ]
then
    程序
fi

多条件判断
if [ 条件判断式 ]
then
    程序
elif [ 条件判断式 ]  
then 
    程序
fi

 

注意事项:

  1. 中括号和条件判断式之间必须有空格。

  2. if后要有空格。

 

 例子

shell脚本

#! bin/bash

if [ $1 -eq 1 ]
 then
    echo "liuzhijie"
elif [ $1 -eq 2 ]
 then
	echo "zenglishan"
fi	

 执行结果

[root@LZJ-LINUX liuzhijie]# sh test5.sh 1
liuzhijie
[root@LZJ-LINUX liuzhijie]# sh test5.sh 2
zenglishan

case语句

基本语法

case $变量名 in
"值1")
    程序1
    ;;
"值2")
    程序2
    ;;
*)
    变量都不是以上值,则执行此程序
    ;;
esac

注意事项

 

  1. case行尾必须为单词“in”,每个模式匹配必须以“)”结束。

  2. 双分号“;;”表示命令序列结束,相当于java的break。

  3. 最后的“*)”表示默认模式,相当于java中的default

例子 

shell脚本

#!/bin/bash
case $1 in
1)
	echo "liuzhijie"
	;;
2)
	echo "aaaaaaaa"
	;;
*)
	echo "bbbbbbb"
	;;
esac

 执行结果

[root@LZJ-LINUX liuzhijie]# sh test6.sh 
bbbbbbb
[root@LZJ-LINUX liuzhijie]# sh test6.sh 1
liuzhijie
[root@LZJ-LINUX liuzhijie]# sh test6.sh 2
aaaaaaaa
[root@LZJ-LINUX liuzhijie]# 

for 循环

基本语法

for((初始值;循环控制;条件变量变化))
do
    程序
done

for 变量 in 值1 值2 值3
do
    程序
done 

例子 

shell脚本

### for1
#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
	s=$[$s+$i]
done

echo $s	

 

for2
#!/bin/bash
s=0
for i in $*
do
	echo "liuzhjie aa $i"
done

执行结果

for1
[root@LZJ-LINUX liuzhijie]# sh for.sh
5050


for2
[root@LZJ-LINUX liuzhijie]# sh for2.sh 1 2 3
liuzhjie aa 1
liuzhjie aa 2
liuzhjie aa 3

while循环

基本语法

while [ 条件判断式 ]
do
    程序
done 

例子 

shell脚本

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
	s=$[$s+$i]
	i=$[$i+1]
done

echo $s	

 执行结果

[root@LZJ-LINUX liuzhijie]# sh while.sh 
5050

read读取控制台输入

基本语法

read(选项)(参数)  

  • 选项

    • -p:指定读取时的提示符。

    • -t:指定读取值时等待的时间(秒)

  • 参数:变量(指定读取值的变量名)

例子

 shell脚本

#!/bin/bash
read -t 7 -p "请在7秒内输入你的名字" NAME
echo $NAME

执行结果

[root@LZJ-LINUX liuzhijie]# sh read.sh 
请在7秒内输入你的名字lll
lll

函数

系统函数

基本语法

basename命令:删掉所有的前缀包括最后一个'/'字符,然后将字符串显示出来。

  • 基本语法:basename [string/pathname][suffix]

注意事项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

dirname命令:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径。

  • 基本语法:dirname 文件绝对路径

例子 

[root@LZJ-LINUX liuzhijie]# basename /home/liuzhijie/for.sh
for.sh    ####删掉所有的前缀包括最后一个'/'字符
[root@LZJ-LINUX liuzhijie]# basename /home/liuzhijie/for.sh .sh
for      ###去掉 .sh 


[root@LZJ-LINUX liuzhijie]# dirname /home/liuzhijie/for.sh
/home/liuzhijie    ### dirname 获取绝对路径

 

自定义函数

基本语法  

[function] funname[()]
{
    Action;
    [return int;]
}
funname

例子 

shell脚本 

#!/bin/bash
function sum()
{
	s=0;
	s=$[$1+$2]
	echo $s
}

read -p "输入第一个参数:" P1
read -p "输入第二个参数:" P2

sum $P1 $P2

 执行结果

[root@LZJ-LINUX liuzhijie]# sh function.sh 
输入第一个参数:1
输入第二个参数:2
3

shell工具

cut

基本语法

cut:从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。

  • 基本用法:cut[选项参数] filename(默认分隔符是制表符)

  • 选项参数:

    • -f:列号,提取第几列。

    • -d:分隔符,按照指定分隔符分割列。

 

例子 

shell脚本 

##cut.txt文件
aa bb cc
liuzhijie zenglishan
zz dd

 执行结果

[root@LZJ-LINUX liuzhijie]# cut -d " " -f 1 cut.txt   ### 指定空格分割,取第一例
aa
liuzhijie
zz
[root@LZJ-LINUX liuzhijie]# cut -d " " -f 1,2 cut.txt ### 指定空格分割,取第1,2例
aa bb
liuzhijie zenglishan
zz dd

[root@LZJ-LINUX liuzhijie]# cat cut.txt
 aa bb cc
 liuzhijie zenglishan
 zz dd
 ### cat cut.txt | grep liuzhijie 获取到liuzhijie所在的行的内容
[root@LZJ-LINUX liuzhijie]# cat cut.txt | grep liuzhijie | cut -d " " -f 2
liuzhijie
[root@LZJ-LINUX liuzhijie]#


[root@LZJ-LINUX liuzhijie]# grep -rn liuzhijie cut.txt   #查找liuzhjie 在第几行  
2: liuzhijie zenglishan
[root@LZJ-LINUX liuzhijie]# grep -rn liuzhijie cut.txt | cut -d " " -f 1
2:
[root@LZJ-LINUX liuzhijie]# grep -rn liuzhijie cut.txt | cut -d " " -f 2
liuzhijie
[root@LZJ-LINUX liuzhijie]# 

[root@LZJ-LINUX ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@LZJ-LINUX ~]# echo $PATH | cut -d : -f 2- ## 根据:截取参数,取第二例到最后
/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@LZJ-LINUX ~]#





### 截取ip地址
[root@LZJ-LINUX ~]# ifconfig eth0 ### ifconfig内容取一半
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.28.58.158  netmask 255.255.240.0  broadcast 172.28.63.255
        ether 00:16:3e:06:bd:1b  txqueuelen 1000  (Ethernet)
        RX packets 99806  bytes 70318197 (67.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 61050  bytes 8913368 (8.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@LZJ-LINUX ~]# ifconfig eth0 | grep "inet" ## 查找ifconfig一半内容中"inet"所在行
        inet 172.28.58.158  netmask 255.255.240.0  broadcast 172.28.63.255
[root@LZJ-LINUX ~]# ifconfig eth0 | grep "inet" | cut -d " " -f 10
172.28.58.158
[root@LZJ-LINUX ~]# 

sed 

 基本语法

sed:一种流编辑器,一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,不断重复直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。

  • 基本语法:sed[选项参数] 'command' filename

  • 选项参数:

    • -e:直接在指令列模式上进行sed的动作编辑。

  • 命令功能:

    • a:新增,a的后面可以接字串,在下一行出现。

    • d:删除。

    • s:查找并替换。

例子 

[root@LZJ-LINUX liuzhijie]# cat sed.txt 
aa aa aa
bb bb bb
cc cc cc
dd dd dd
ee ee ee

##将“mei nv”这个单词插入到sed.txt第二行下,打印。 2a表示第二行
[root@LZJ-LINUX liuzhijie]# sed '2a mei nv' sed.txt 
aa aa aa
bb bb bb
mei nv
cc cc cc
dd dd dd
ee ee ee

##删除sed.txt文件所有包含dd的行,/d表示删除
[root@LZJ-LINUX liuzhijie]# sed '/dd/d' sed.txt 
aa aa aa
bb bb bb
cc cc cc
ee ee ee

### s/dd/zz/g 表示将sed.txt文件中的dd替换为zz ,
##注意事项:加g(global)表示全部替换,不加只替换第一个。
[root@LZJ-LINUX liuzhijie]# sed 's/dd/zz/g' sed.txt 
aa aa aa
bb bb bb
cc cc cc
zz zz zz
ee ee ee


## sed 操作,文件内容不会变化
[root@LZJ-LINUX liuzhijie]# cat sed.txt 
aa aa aa
bb bb bb
cc cc cc
dd dd dd
ee ee ee

## 将sed.txt文件中的第二行删除并将cc替换为zz
## -e:直接在指令列模式上进行sed的动作编辑。
[root@LZJ-LINUX liuzhijie]# sed -e '2d' -e  's/cc/zz/g' sed.txt    
aa aa aa
zz zz zz
dd dd dd
ee ee ee

 

awk

 基本语法

awk:一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。

  • 基本用法:awk[选项参数] ‘pattern1{action1} pattern2{action2}···' filename

    • pattern:表示AWk在数据中查找的内容,就是匹配模式。(正则表达式匹配)

    • action:在找到匹配内容时所执行的一系列命令。

    注意:只有匹配了pattern的行才会执行action。

  • 选项参数:

    • -F:指定输入文件折分隔符。

    • -v:赋值一个用户定义变量。

  • action内置变量:

    • FILENAME:文件名。

    • NR:已读的记录数。

    • NF:浏览记录的域的个数。

例子 

文件准备

sudo cp /etc/passwd ./

语句意思:将etc目录下的passwd拷贝到当前路径下

 

[root@LZJ-LINUX liuzhijie]# cat passwd   ##passwd文件内容
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
[root@LZJ-LINUX liuzhijie]# cat passwd |grep ^root ## 获取以root开头的行
root:x:0:0:root:/root:/bin/bash、


##根据 “:”截取 ,/^root/配置以root开头的行  ,{print $7}:输出第7列,passwd 文件名
[root@LZJ-LINUX liuzhijie]# awk -F : '/^root/ {print $7}' passwd 
/bin/bash
##根据 “:”截取 ,/^root/配置以root开头的行  ,{print $1 ","$7}:输出第一列和第7列,以,隔开
[root@LZJ-LINUX liuzhijie]# awk -F : '/^root/ {print $1 ","$7}' passwd   
root,/bin/bash



[root@LZJ-LINUX liuzhijie]# cat sed.txt 
aa aa aa
bb bb bb
cc cc cc
dd dd dd
ee ee ee


## 根据空格截取以aa开头的行内容,并取出第一列
[root@LZJ-LINUX liuzhijie]# awk -F " " '/^aa/ {print $1}' sed.txt 
aa

##第一个变量S
[root@LZJ-LINUX liuzhijie]# s="a:b:c"
[root@LZJ-LINUX liuzhijie]# echo $s
a:b:c
## 根据冒号:截取a:b:c,并输出第一列
[root@LZJ-LINUX liuzhijie]# echo $s | awk -F : '{print $1}'
a


##只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell,在最后一行添加“hello,world”

##BEGIN在所有数据读取行之前执行,END在所有数据读取行之后执行
[root@LZJ-LINUX liuzhijie]# awk -F : 'BEGIN{print "use,shell"}{print $1 ","$7} END{print "hello,world"}' passwd 
use,shell
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
lp,/sbin/nologin
sync,/bin/sync
shutdown,/sbin/shutdown
halt,/sbin/halt
mail,/sbin/nologin
operator,/sbin/nologin
games,/sbin/nologin
ftp,/sbin/nologin
nobody,/sbin/nologin
systemd-network,/sbin/nologin
dbus,/sbin/nologin
polkitd,/sbin/nologin
sshd,/sbin/nologin
postfix,/sbin/nologin
chrony,/sbin/nologin
nscd,/sbin/nologin
tcpdump,/sbin/nologin
hello,world


### 将passwd文件中的第三列的值增加数值1并输出。

## -v i=1 定义一个参数i

## print $3+i 输出第三列的值增加数值1



[root@LZJ-LINUX liuzhijie]# awk -F : -v i=1 '{print $3+i}' passwd 
1
2
3
4
5
6
7
8
9
12
13
15
100
193
82
1000
75
90
999
29



##action内置变量:

## FILENAME:文件名。
## NR:已读的记录数。
## NF:浏览记录的域的个数(切割后,列的个数)。

[root@LZJ-LINUX liuzhijie]# 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
fileName:passwd,lineNumber:4,columns:7
fileName:passwd,lineNumber:5,columns:7
fileName:passwd,lineNumber:6,columns:7
fileName:passwd,lineNumber:7,columns:7
fileName:passwd,lineNumber:8,columns:7
fileName:passwd,lineNumber:9,columns:7
fileName:passwd,lineNumber:10,columns:7
fileName:passwd,lineNumber:11,columns:7
fileName:passwd,lineNumber:12,columns:7
fileName:passwd,lineNumber:13,columns:7
fileName:passwd,lineNumber:14,columns:7
fileName:passwd,lineNumber:15,columns:7
fileName:passwd,lineNumber:16,columns:7
fileName:passwd,lineNumber:17,columns:7
fileName:passwd,lineNumber:18,columns:7
fileName:passwd,lineNumber:19,columns:7
fileName:passwd,lineNumber:20,columns:7
fileName:passwd,lineNumber:21,columns:7

##查询sed.txt中空行所在的行号。
[root@LZJ-LINUX liuzhijie]# awk '/^$/ {print NR}' sed.txt  
###截取ip
[root@LZJ-LINUX liuzhijie]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.28.58.158  netmask 255.255.240.0  broadcast 172.28.63.255
        ether 00:16:3e:06:bd:1b  txqueuelen 1000  (Ethernet)
        RX packets 147700  bytes 79856931 (76.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 106458  bytes 15763818 (15.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@LZJ-LINUX liuzhijie]# ifconfig eth0 |grep "inet"   ## 查找inet所在的行
        inet 172.28.58.158  netmask 255.255.240.0  broadcast 172.28.63.255
[root@LZJ-LINUX liuzhijie]# ifconfig eth0 |grep "inet" |awk -F " " '{print $1}'
inet
[root@LZJ-LINUX liuzhijie]# ifconfig eth0 |grep "inet" |awk -F " " '{print $2}'
172.28.58.158
[root@LZJ-LINUX liuzhijie]#

 

 

sort

基本语法

sort:将文件进行排序,并将排序结果标准输出。

  • 基本语法:sort(选项)(参数)

  • 选项:

    • -n:依照数值的大小排序。

    • -r:以相反的顺序排序。

    • -t:设置排序时所用的分隔字符。

    • -k:指定需要排序的列。

 

例子 

bb:40:5.4
bd:20:4.2
xz:50:2.3
sx:10:3.5
ss:30:1.6

[root@LZJ-LINUX liuzhijie]# sort -t : -nrk 2 sort.txt 
xz:50:2.3
bb:40:5.4
ss:30:1.6
bd:20:4.2
sx:10:3.5

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值