python全栈-shell编程

发布于:2025-03-08 ⋅ 阅读:(91) ⋅ 点赞:(0)

python全栈-shell编程

Shell编程

  • cat /etc/shells 查看Linuxcentos支持的shell解释器有哪些
  • echo $SHELL
    • echo 类似print,输出一个信息
    • $SHELL 这个美元符号,加上后面的变量,就可以查看系统的默认值
    • 这条语句就是输出当前系统的shell默认解释器

shell编写格式

  • 首行格式#!/bin/bash
    • 就是指定shell解释器
  • 创建文件的后缀是sh
    • test.sh
  • 单行注释,用一个#开头,后面写注释内容
  • 多行注释
    • 第一行:<<!
    • 多行注释内容
    • 结尾处!
  • 创建sh文件,使用touch 文件名.sh
  • 编写sh文件,使用vim 文件名.sh

创建第一个shell文件:

  1. 查看默认shell解释器,echo $SHELL
  2. 创建文件touch test1.sh
  3. 编辑文件vim test1.sh
  4. 编辑内容
    1. #!/bin/bash
      echo “第一个shell编程”
  5. 执行sh文件,sh test1.sh

执行sh文件,就是sh+文件名.sh

执行shell文件

有三种,前两种都是使用shell解释器去运行,最后一种是直接调用系统文件

  1. sh 脚本文件
  2. bash 脚本文件
  3. ./脚本文件

一般来说,第三种执行方式,有执行权限的问题,我们需要提升文件的权限,使用chmod命令

一般使用第一种就够了

在shell中创建文件

我们在Linux里面执行的命令可以直接写在sh文件里面

我们在Linux里面使用touch创建文件,shell里面也可以,使用echo把配合重定向,可以把信息写入创建好的文件里面

 \#!/bin/bash 
 touch test2.txt  # 创建空文件 
 test2.txt echo "nihao" >> test2.txt  # 将 "nihao" 写入 test2.txt

shell 变量

在 Shell 中,变量是一种用于存储数据的方式,可以是字符串、数字或其他数据类型。变量可以帮助用户存储和管理数据、设置参数、控制程序的执行流程等。下面是关于 Shell 变量的基本介绍,以及它们的作用。

输入env可以查看当前系统所有环境变量

使用set可以查看所有环境变量,包括系统变量

Shell 变量的类型

  1. 用户定义变量

    • 这些是用户创建的变量,通常由字母、数字和下划线组成。例如:

      my_var="Hello, World!"
      
  2. 环境变量

    • 这些是系统或用户环境中的变量,可以在整个操作系统中使用。常见的环境变量有 PATHHOMEUSER 等。例如:

      echo $HOME  # 输出当前用户的主目录
      

      LANG是当前系统语言环境

  3. 位置参数

    • 这些是由脚本或函数传递给变量的参数,使用 $1$2 等表示。例如,在脚本中 $1 表示第一个参数,$2 表示第二个参数。

变量的作用

  1. 数据存储

    • 变量可以用于存储各种数据并在脚本中重复使用。
  2. 控制程序的执行

    • 变量可以影响控制结构的行为,比如 if 语句、for 循环等。例如:

      count=10
      if [ $count -gt 5 ]; then
          echo "Count is greater than 5"
      fi
      
  3. 参数化脚本

    • 使用变量可以使脚本更具可复用性。通过使用位置参数,可以通过命令行向脚本传递不同的值。
  4. 信息传递

    • 变量可以在函数或脚本之间传递信息,从而使代码更具模块化。
  5. 动态构建命令

    • 通过变量,您可以动态构建和执行命令。例如:

      filename="myfile.txt"
      cat $filename
      

变量的创建和使用

变量的语法格式和其他语言基本类似

在变量名和值,等号中间不能有空格

  • 创建变量

    var_name=value  # 无空格,例如:name="John"
    
  • 访问变量

    • 使用 $ 符号前缀:
    echo $var_name  # 输出变量的值
    
  • 导出环境变量

    • 如果希望将变量传递给子进程,可以使用 export
    export var_name
    
  • 删除变量unset

    • 在unset后面跟变量名,就可以删除该变量

示例

以下是一个简单的示例,展示了如何使用变量:

#!/bin/bash

# 定义变量
name="Alice"
age=30

# 输出变量值
echo "Name: $name"
echo "Age: $age"

字符串拼接

我们在输出变量的时候,可以直接使用美元符号加变量的形式,比如,

$a

${a}

上面这两种格式都可以输出a的值

但是第一种形式不可以使用字符串拼接,比如$a123,这是错误的语法结构

但是可以使用${a}123,可以输出a的值和后面的123

自定义常量

  • 使用readonly,可以把变量定义成只读变量,也就是常量
    • readonly aaa

这个自定义变量只能在定义的时候被赋值,赋值之后不可以再次修改

这个变量在文件里面不可修改,在文件外面访问的时候,也不可以修改

自定义全局变量

父子shell环境

如果有两个sh文件,a文件中用到了b文件,a就是b的父shell环境

自定义全局变量,可以在当前文件中使用,也可以在子环境中使用

  • 自定义全局变量的语法:export 变量名=值

自定义系统环境变量

就是在/etc/profile这个文件里面定义的变量,就是自定义的系统环境变量

定义结束之后,需要重新加载一次这个文件,使用命令source /etc/profile

  • 在刚刚那个文件里面,写export 变量名=值
    • 就可以定义完了

特殊符号变量

$n 接收脚本文件执行时传入的参数
$# 传递脚本参数的个数
$* 以单个字符的格式,显示给脚本的参数
$@ 与上面的一样
$$ 显示脚本运行时的进程id
$? 显示脚本退出状态是否正常,如果是0,就是成功了,非0是失败。也可以接收函数的返回值
$0 当前脚本文件名

$n

向脚本文件里面传递参数

sh 脚本文件.sh 参数1 参数2 。。。。

sh test.sh 11 22 33 44

  • 在脚本文件中接收参数,$0获取脚本文件名
  • $1 接收第一个参数,因为我们输入了11,在文件中,11就替换了第一个参数的位置
  • 同理$4是第四个传进去的参数
  • 如果参数的数量大于9,我们需要用花括号括起来,即${11} 以这种方式接收第11个参数

$*和$@

在使用的时候,用法是一样的

都是以字符串的形式把参数输出

  • 不同点
    • 我们用双引号把这两种参数括起来
    • “$*” 输出的内容是双引号括起来的"参数1 参数2 …"
    • “$@” 这边的输出内容是“参数1” “参数2” 。。。。

字符串变量

单引号的字符串,不具有赋值操作,比如’a的值是$a’,这里面的a的值不会正常打印

双引号允许赋值操作,“a的值是$a”,可以把我们给a设定的值打印出来

这里面可能出现转义字符,是使用\反斜杠取消转义

如果我们想要输出一大段字符串,中间有空格,每一个空格后面的字符串内容都会被当命令去解析,为了避免这种情况,给每一个字符串尽可能的加上引号

获取字符串长度 ${#字符串变量名}

字符串拼接

  • $字符串变量1$字符串变量2
  • “$字符串变量1 $字符串变量2” 有引号包裹的时候,中间可以有引号
  • $字符串变量1’,'$字符串变量2 在变量1的结尾和变量2的开头都有引号,引号中间可以写一些字符,起分隔的效果

使用这三种格式都可以把两个字符串拼接,一起输出

截取字符串

就是python里面的字符串,搭配序列

  • ${字符串变量名:start:length}
    • 从字符串的第start位开始,截取length个字符
    • 如果没有length,就是从开始的位置一直截取到最后
    • 如果start是负数的话,就是从右往左数,截取最后几位。需要0-start这种格式,不可以是-start
    • 当start是负数的时候,length的长度大于负数的绝对值,也不会超出字符串的内容,和没有length的效果一样
  • ${变量名#*chars}
    • 从左边开始,第一个chars的位置截取后面的所有字符
  • ${变量名##*chars}
    • 从左数,最后一个*chars出现的位置开始向右截取
  • ${变量名%*chars} 就是从右数第一个
  • ${变量名%%*chars} 从右数最后一个

数组

shell里面只支持一维数组,不支持多维数组

数组类型不限,数组大小不限,下标从0开始

定义数组

array_name=(value1 value2 value3 value4 …)

使用空格分开每个元素

也可以不连续给变量赋值

array_name=([0]=value1 [4]=value2 [7]value3 [11]value4 …)

数组操作

  • ${arr[0]} 需要使用花括号括起来
  • ${arr[@]} ${arr[*]} 这两种方式都可以直接获取数组的所有元素
  • ${#arr[@]} ${#arr[*]} 在上面的数组名前面加个#号,就可以获取数组的长度/个数了
  • ${#arr[0]} 获取数组第0个元素的字符长度

数组拼接new_arr=(${arr1[@]}${arr2[@]}…)

删除数组

  • unset 数组名[下标] 制定了数组的下标,就是删除这个元素
  • unset 数组名 没有指定下标,就是删除整个数组

shell内置命令

  • tpye 命令
    • 一般有两种返回类型:
    • 一种是shell内嵌
    • 一种是文件路径 如果是文件路径就是文件

文件路径也能当命令使用,但是使用这个命令之前,需要调用磁盘io接口,才可以调用,速度要比内置命令慢一些

  • 常用内置命令
语句 作用
alias 给命令起别名
echo 将字符串输出到终端
read 读取数据给变量
exit 强制退出
declare 声明一个变量或者变量类型
  • alias 别名=‘命令语句’

    • 给命令起别名,就行’ll‘是‘ls -l --color=auto’的缩写一样
    • 直接输入alias就可以看到所有的别名命令
  • unalias 别名

    • 就是删除别名
  • echo -n 字符串

    • 有了参数n,就不会自动换行了,会把下一条语句紧贴本行的字符串后面
    • -e 这个也是参数,没有e的时候,不可以使用转义字符,比如\n。有了参数e,才可以使用
  • read [参数] [变量]

    • 没有参数和变量,read将把用户输入的内容放在环境变量REPLY里面,我们使用$REPLY获取到输入的信息

    • 如果只有变量名,read将把输入的内容传给变量,我们使用echo打印变量,可以看到输入的信息

    • 选项 作用
      -a 把读取到的数据赋值给数组,从0开始
      -n 读取n个字符,不是整行字符。自动获取n个字符,当拿到n个字符之后,自动执行后面的命令
      -p 显示输入的信息
      -s 静默输入,就像输密码一样,看不到输入的内容
      -t 等待时间,避免等待用户输入的时间过长
    • read -p ‘提示信息’ 变量

      • 这条语句,就向input一样,前面的提示信息,是提醒用户的。后面的变量来接收输入的值
    • read -n 2 -p ‘提示信息’ 变量

      • 获取到两个字符之后,就赋值给变量
    • exit

      • 用来退出当前的shell脚本
      • 同时返回一个状态码,使用$?可以接收
      • 退出状态码只能在0~255之间
      • 只有0是成功退出的意思
    • declare [+/-] [参数] [变量名]

      • -是设置属性

      • +是取消设置

      • -f 列出函数体函数名

      • -a 声明变量是普通数组

      • -A 变量是关联数组,数组元素是键值对,可以访问键,获取值

        • 普通方式不可以创建关联数组,普通方式创建的数组,在执行的时候,只能访问最后一个键值对的值。就是访问所有的键,都只能拿到最后一个值
      • -i 整型

        • 只有变量被声明成整型,才可以进行算术运算
      • -r 只读

        • delare -r pi=3.14 类似定义常量
      • -x 全局变量

shell运算符

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 文件测试运算符(shell独有的运算符)

原生shell不支持数学运算,需要使用expr命令实现

expr只支持整数运算

  • 语法:expr 算术运算表达式
    • 在算术表达式前后需要有一个空格
  • 获取结果的表达式:result=`expr 算术表达式`
    • 需要使用反引号括住

算术运算符

  • 加法

    • expr 10 + 10 输出20
    • expr 10+10 输出10+10,没有正常计算
    • result=`expr 10 + 10`
  • 减法和加法一样

  • 乘法,因为*是转义字符,需要取消转义,即 \*才可以使用

  • 其他的用法一样

  • 一个等号是赋值,等号两边不能有空格

  • 两个等号是比较,需要有空格,判断不等,也要两边加空格

比较运算符

运算符 作用
-eq 判断相等==
-ne 不相等!=
-gt 大于>
-lt 小于<
-ge 大于等于>=
-le 小于等于<=

如果是的话,返回0。否则返回1

也可以直接使用==<>

使用运算符的时候:

  • 使用命令:[ a -eq b ] 必须有空格
  • 使用等号:((a==b)) 需要有两圆括号,等号两边可以有空格,也可以没有

字符串比较运算符

可以比较字符串,也可以比较整数和小数

可以使用两个中括号,或者一个中括号里面

运算符 作用
==或者= 都可以判断相等
!=
< 使用一个中括号的时候需要使用反斜杠,反转义。两个中括号就不用了,也不能使用反斜杠
> 和小于的规则一样,[ a \< b ],[[a < b]]
-z 返回字符串长度,空字符串是0
-n 判断字符串是否不为空,不空就返回0.[-n “$a”]
$ 字符串不空,就返回0,[$a],和-n一样

两个中括号,即可以比较字符串,也可以比较整数小数

两个圆括号,只能比较整数

使用一个中括号来比较字符串的时候,不允许任何一个字符串中间有空格,如果有空格就会报错,提示参数太多。

使用两个中括号可以避免这个问题

布尔运算符,一个中括号

! 非 [!a]
-o 或[a -o b]
-a 与[ x -a y ]

逻辑运算符,两个中括号

  • && 与
  • || 或

文件测试运算符

检查文件,是否存在,可读,可执行,为空,可写,为目录,为普通文件

-d 目录
-f 普通文件
-r 可读
-w 可写
-x 可执行
-s 为空
-e 是否存在

是的话,返回true

计算命令

(()) 用于整数运算
let 和(())类似
$[] 不如(())灵活
expr 比较麻烦,需要注意各种转义
bc 处理整数和小数

expr

  • expr length 字符串 返回字符串长度
  • expr substr 字符串 start len 截取字符串,和之前的数组用法一样。这里是从1开始
  • expr index 字符串 字符 返回第一个字符在字符串的下标
  • expr match 字符串 正则表达式 返回符合表达式的字符长度,hello.* 返回以hello开头的字符串长度
  • expr 字符串:正则表达式 和上面的一样

(())

进行数学运算。把表达式放在括号里面就可以了。使用$ 可以得到结果。在括号里面可以任意添加空格

  • ((a=10+9))
  • a=$((10+9))
  • ((a=10+5,b=a-6)) 可以多个表达式一起运算
  • ((a>3 && a<7)) 条件判断

let 表达式

和双括号以及expr的功能一样,只能用于赋值和运算,不可以判断和直接输出

可以一个let关键词后面跟着一堆表达式

$[表达式]

和let类似,但是只能对单个表达式计算与输出

bc [选项] [参数]

可以进行进制转换。

可以进行基本的算术运算,加减乘除,指数,取余等等

  • 选项:
  • -l 使用内置函数
  • -q 去掉提示信息

直接输入bc开启计算器

[root@localhost ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.

这一大堆都是提示信息,我们只需要在刚刚的bc后面加上参数-q就可以不显示这些信息了

进入bc环境之后,就是一个计算器了,我们输入表达式10+20,然后回车就可以得到结果,其他的算术运算也是一样的

  • scale=n;表达式 n是保留的小数位数
    • 不写scale的时候,哪怕表达式的计算结果有小数,也不显示,有了这参数,可以看到小数了
  • ibase=n; 指定输入的数字的进制,默认是十进制
    • ibase=2;110 就是6 .是把二进制的表达式,转换成十进制的结果
  • obase=2; 10
    • 是把十进制的表达式,输出为2进制的格式
  • last或者.
    • 输出最近一次表达式计算的结果

因为我们打开了bc环境之后,一次只能进行一个表达式运算。我们可以提前把多个表达式写在文件里面,使用bc命令去执行

  • bc -q test.txt
    • 首先是把txt文件的表达式算出来,然后进入了bc环境
  • quit 退出bc环境

bc内置数学函数

想要使用这些内置函数,需要在调用bc命令的时候加参数-l再进入bc环境,即bc -l

  • s(x) 计算正弦
  • c(x) 余弦
  • a(x) 反正切值
  • l(x) 计算x的对数
  • e(x) 求e的x次方
  • j(n,x) 贝塞尔函数,计算n到x的阶数

bc非互动式执行

刚刚我们使用bc的命令,都是进入的bc环境,进入bc环境就是互动了。

我们也可以不进入bc环境,还能使用bc的语法

  • echo “表达式” | bc 参数
    • 写了-l参数,才可以使用内置函数
    • 表达式就是刚刚在bc环境里面运行的表达式

使用这种方式可以不进入bc环境

获取bc的计算结果

  • 正常的bc表达式:echo “10+20” | bc
  • 获取他们的值:
    • result=`echo “10+20” | bc` 使用反引号直接括起来
    • result=$(echo “10+20” | bc) 使用美元符号和小括号,也能获取计算的结果

非互动式获取多行表达式结果

我们可以在不编辑文件的前提下,也能编辑多行表达式

result=`bc 参数 << EOF

第一行表达式

第二行表达式

。。。

EOF

`

方式二:

result=$(bc 参数 << EOF

表达式1

表达式2

。。。

EOF

)

使用echo可以一次性输出所有表达式的计算结果

输出结果:echo $result

控制语句

if 条件语句

  • 单分支

结构:
if 条件表达式

then # 如果条件成立就执行then后面的语句

​ 语句1

​ 语句2

fi 需要使用fi结尾,结束这个if的判断

如果语句比较短,可以简写成一行

  • if 条件表达式;then 命令语句; fi

    • 注意里面的两个分号
  • 多分支判断语句

结构:

if 条件语句

then

​ 条件成立的语句

else

​ 条件不成立的语句

fi

也可以单行使用

  • if 条件表达式;then 成立的语句;else 不成立语句;fi

if 条件表达式

then

语句1

elif 条件表达式

then

语句2

else

语句3

fi

有if判断的语句后面需要跟一个then

这里面的if也可以嵌套,把if写在语句的位置就可以了

test命令

用于测试条件是否成立

返回值是布尔值,适合作为if的表达式

测试类型包括数值,字符串,文件

  • if + test + shell运算符表达式

case语句

case…esac结尾

用法类似switch。。case

case $aaa in

正则表达式1) 这里是正则表达式,如果值能匹配上就执行下面的语句

​ 语句1

​ ;; 两个分号,类似break

正则表达式2)

​ 语句2

​ ;;

正则表达式3) 正则表达式可以是数字,也可以是字符串

​ 语句3

​ ;;

*) 星号是可以匹配任意内容的,也就是说,上面的正则表达式都没匹配上,最后这个星号也能接收

​ 语句n

​ ;;

esac case语句的结尾

while语句

while 循环条件

do 循环体开始

循环体语句

done 循环体结束

#!/bin/bash
i=1
sum=0
while ((i<10))
do
   sum=$((sum+i))
   i=$((i+1))  就是i自增
done
echo $sum

这是一个累加程序

如果遇到了无限循环,可以使用CTRL+c,结束

我们在设计循环的时候,也可以使用break和continue

until 语句

和while语句完全相反,是条件不成立则循环

until 语句 === while !语句

for 循环

for i in [序列]

do

循环体

done

  • 也可以简化序列

for i in {start…end} 必须是整数格式,从开始到结束的序列

do

循环体

done

  • C语言版的循环

for((i=start;i<=end;i++)) 注意双括号

do

循环体

done

select 循环语句,shell独有

会把in后面的内容制作成选项,选项前面带有编号,输入编号就是选择相应的内容

适合有交互的场景

#!/bin/bash
echo “您最喜欢的季节是什么?”
select i in “春” “夏” “秋” “冬”
do
echo “您最喜欢的是:${i}”
break 必须有这个break,不然会一直困在这个循环里面
done

  • 执行示例

[root@localhost ~]# sh test1.sh
您最喜欢的季节是什么?


  1. #? 1 这里是我手动输入的1
    您最喜欢的是:春
    [root@localhost ~]#

shell函数

系统函数

  1. basename [路径] [后缀]

如果使用basename+路径,就会把文件名打印出来

如果使用的是basename+路径+文件名的后缀,会打印不包含文件后缀的文件名

  1. dirname 绝对路径

使用这个命令,可以从绝对路径中拿到文件的目录路径。就是绝对路径的上级路径

自定义函数

格式:
[function] funname [()]

{

​ 函数体;

​ [return int;]

}

中括号里面的都是可有可无的

function test1(){
	echo "test1"
}
test2(){
	echo "test2"
}
test1
test2
  • 传参:把参数写在函数名后面就可以
#!/bin/bash
test1(){
echo "1:$1"
echo "3:$3"
echo "2:$2"
echo "6:$6"
}
test1 11 66 33 99 55 你好

没有参数类型的限制

  • $$ 查看进程id,这里的id类似地址,函数也有id,文件也有id

基本概念

  • 标准输入

从键盘输入的就是标准输入

  • 标准输出

输出到屏幕上的内容,就是标准输出

  • 输入输出重定向

把本来该往屏幕上打印的输出,流向其他地方,比如文件,等等,就是输出重定向

从除了键盘外的地方输入进来的数据就是输入重定向

  • 输入重定向

经常与wc命令配合使用

wc的参数:

  1. -c 字符数量
  2. -w 单词数量
  3. -l 行数
  • wc -c << test.txt 统计test文件的字符数量

文本处理工具

grep 文本搜索工具

在一个文件或者多个文件中搜索含有关键词的行

  • 格式:grep [参数] ‘关键字’ 文件命
  • 参数:
    • c 输出行数,含有关键词的行有几个
    • i 不区分大小写找关键词
    • v 显示不含关键词的所有行
    • w 按单词搜索
    • o 打印匹配关键词,就是关键词出现几次,就打印几次
    • A after显示匹配行以及后面的几行
    • B before显示匹配行以及前面的几行
    • C 显示匹配行前后几行
    • n 显示匹配行及行号
    • ^key 以关键字开头
    • key$ 以关键字结尾
    • ^$ 匹配空行

cut 按列切分文本

格式:cut [参数] 文件

  • 参数:
    • f 列号,因为是按列去获取内容,第二列可以是单字符,可以是长字符串
    • c 以字符为单位分隔
    • b 以字节为单位分隔,因为是按字节去获取内容,如果当前字节是中文,就无法获取。因为中文不能拆开
    • d 自定义分隔符
    • n 与b连用,不分隔多字节,因为中文一个字符占好几个字节,算是保护汉字
  • 提取范围:
    • n- 从第n行及后面
    • n-m 第n行到第m行
    • -m 从开头到第m行
    • n1,n2… 指定行
  • 示例:cut -d " " -f 2 test.txt
    • 提取test文件中第2列的所有内容,以空格分开
  • 示例:cut -d " " -f 2,5 test.txt
    • 获取第2列和第5列的字符串,因为是按列去获取内容,第二列可以是单字符,可以是长字符串

sed文本编辑器

就像记事本一样,对文件增删查改都可以,还能按行按列,正则表达式去使用

  • 格式:sed [参数] [匹配模式|sed程序命令] [文件]

  • 参数:

    • r 使用正则表达式
    • i 直接对文件进行修改,如果不加这个参数就不能对文件修改
  • 命令:

    • a 追加在匹配行后面
    • c 更改
    • d 删除
    • i 插入,在匹配行前面
    • s 替换每行的第一个关键词
    • p 打印
    • = 显示行号
    • n 读下一行
    • r,w 读写操作
  • 示例: sed -i ‘3a你好’ test.txt

    • 在test文件的第三行后面,也就是第四行追加字符串‘你好’
    • 没有i的话,不能修改源文件
  • 示例:sed ‘/hello/chi’ test.txt

    • 第一个斜杠后面是要匹配的关键字
    • 第二个斜杠后面的第一个字符,就是我们的命令,这里是c,也就是更改
    • 在命令后面是要替换的字符串,也就是把文件中hello的字符串改成hi

awk文本分析

  • 格式:awk 选项 ’命令‘ 文件

  • 选项:

-F 指定分隔符,不写是空格

-v 定义用户变量

  • 命令:

    • $n 第n行
    • $NF 最后一列
    • ARGC 参数的个数
    • ARGV 包含参数的数组
    • NR 行号
  • print和printf

    • print类似echo,换行输出

    • printf 是echo -n,不换行输出,可以使用占位符%s%d

      • %15s 表示占15个字符空间的字符串,右对齐
      • %-12d 表示占12字符空间的数值,左对齐
  • BEGIN。。。END

用法:`‘BEGIN{想要先处理的内容};{正常处理的内容};END{之后处理的内容}’`

sort [参数] 文件

以行为单位对文本排序

从每一行的第一个字符开始,按照ascll码值比较大小.升序输出

  • 选项:
    • u 如果有相同的行,就删除,只留一个
    • r 降序输出
    • o 配合重定向,把排序后的内容写入源文件
    • n 按数值大小排序,因为是默认按字符排序,10和2的首字符是1和2,排好序,10在2的前面
    • t 指定分隔符,把原来的一行字符串,拆成小段
    • k 指定段排序,按第k段排序

tee [参数] 文件

类似重定向,但撒不太一样.

既输出到屏幕,也能输出到文件,相当于是拷贝一份到屏幕

  • 参数:
    • a 追加,没有a参数,就是覆盖文件

批量修改文件名

包括修改文件后缀

  • 批量创建文件 touch /file{1~10}.txt
    • 创建出file1.txt file2.txt…
  • 修改文件名 rename 旧文件名 新文件名 旧文件路径/* 一定要有*号

网站公告

今日签到

点亮在社区的每一天
去签到