首页 > 系统相关 >Linux shell脚本需要用到的字符命令整理

Linux shell脚本需要用到的字符命令整理

时间:2022-11-29 13:32:19浏览次数:42  
标签:字符 shell 匹配 变量 expr 用到 str Linux var

1、&、&&、||、2>&1、&>、>&2 1 2、< > >> <<< 2 3、subshell与代码块 3 4、变量的设置规则: 3 5、变量的应用方式: 4 6、数组变量 5 7、变量内容的删除:"#""%" 5 8、变量内容的替换:"变量/old /new" 6 9、变量的测试与内容替换 6 10、通配符 7 11、通配符和正则表达式的区别 10 12、正则表达式 10 12.1、基础字符 10 12.2扩展字符 12 12.3特殊字符 13 13、特殊变量 15 14、算数运算 17 15、自定义函数 19 16、使用while读取文件内容 20 18、sed 21 19、printf 23 20、awk 25

1、&、&&、||、2>&1、&>、>&2 &:可以把现在工作的任务切换到后台; &&:逻辑与; ||:逻辑或;

标准输入:代码为0,使用<或<< 标准输出:代码为1,使用>或>> 标准错误输入:代码为2,使用2>或2>>

2>&1:把标准错误2像1一样输出; &>:全部输出;

&2:传送输出到标准错误 1>:正常输出 2、< > >> <<< <:从文件导入 :导入到文件

:追加导入 <<<:命令调用导入

标准输入:利用标准输入和键盘输入eof组合 cat > catfile << "eof"

d d eof <===输入此关键字,立刻就结束而不需要输入ctrl+d

3、subshell与代码块 结构 定界符 认可的位置 subshell () 行上的任何位置 代码块 {} 再换行字符、分号或关键字之后 4、变量的设置规则: ①变量与变量内容以一个等号"="来连接; ②等号两边不能直接接空格符; ③变量名称只能是英文字母与数字,但是开头字符不能是数字; ④变量内容若有空格符可使用双引号""或单引号''将变量内容结合起来,但是双引号内的特殊字符如$等,可以保有原本的特性; 单引号内的特殊字符则仅为一般字符(纯文本);将特殊符号(如[enter]、$、\、空格符、!等)变成一般字符 ⑥在一串命令中,还需要通过其他的命令提供的信息,可以使用反单引号"命令"或"$(命令)"。特别注意,反单引号是数字键1左边的按键,不是单引号! ⑦若该变量为了增加变量内容时,则可用"$变量名称"或${变量}累加内容; ⑧若变量需要在其他子进程执行,则需要以export来使变量变成环境变量:“export PATH” ⑨通常大写字符为系统默认变量,自行设置变量可以使用小写字符,方便判断。 ⑩取消变量的方法为使用“unset变量名称”。 5、变量的应用方式: ${file:0:5} 提取最左边的 5 个字节              ${file:5:5} 提取第 5 个字节右边的连续 5 个字节       ${file/dir/path} 将第一个 dir 提换为 path           ${file//dir/path} 将全部 dir 提换为 path             ${#file}   获取变量长度                  

(())重定义变量值;

$(( ))与整数运算; 在 $(( )) 中的变量名称,可于其前面加 $ 符号来替换,也可以不用。

$(( ))可以将其他进制转成十进制数显示出来;用法如下: echo $((N#xx)) 其中,N为进制,xx为该进制下某个数值,命令执行后可以得到该进制数转成十进制后的值。

${ }变量替换 一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围 $( )与`` 命令替换

6、数组变量 A="a b c def" # 定义字符串 A=(a b c def) # 定义字符数组 命令 解释 结果 ${A[@]} 返回数组全部元素 a b c def ${A[]} 同上 a b c def ${A[0]} 返回数组第一个元素 a ${#A[@]} 返回数组元素总个数 4 ${#A[]} 同上 4 ${#A[3]} 返回第四个元素的长度,即def的长度 3 A[3]=xzy 则是将第四个组数重新定义为 xyz

7、变量内容的删除:"#""%" 变量设置方式 说明 ${变量#关键字} 若变量内容从头开始的额数据符合"关键字",则将符合的最短数据删除 ${变量##关键字} 若变量内容从头开始的数据符合"关键字",则将符合的最长数据删除 ${变量%关键字} 若变量内容从尾向前的数据符合"关键字",则将符合的最短数据删除 ${变量%%关键字} 若变量内容从尾向前的数据符合"关键字",则将符合的最长数据删除

8、变量内容的替换:"变量/old /new" 变量设置方式 说明 ${变量/旧字符串/新字符串} 若变量内容符合"旧字符串",则将第一个旧字符串会被新字符串替换 ${变量//旧字符串/新字符串} 若变量内容符合"旧字符串",则全部的旧字符串会被新字符串替换

9、变量的测试与内容替换 在某些时候,我们需要经常“判断”某个变量是否存在,若变量存在则使用既有的设置,若变量不存在则给予一个常用的设置。 变量设置方式 str没有设置 str为空字符串 str已设置非为空字符串 var=${str-expr} var=expr var= var=$str var=${str:-expr} var=expr var=expr var=$str var=${str+expr} var= var=expr var=expr var=${str:+expr} var= var= var=expr var=${str=expr} str=expr var=expr str不变 var= str不变 var=$str var=${str:=expr} str=expr var=expr str=expr var=expr str不变 var=$str var=${str?expr} expr输出至stderr var= var=$str var=${str:?expr} expr输出至stderr expr输出至stderr var=$str

10、通配符 基本通配符 通配符 匹配 ? 任何的单一字符

  • 任何的字符字符串 [set] 任何在set里的字符 [!set] 任何不在set里的字符

符号 意义

  • 代表0个到无穷多个任意字符 ? 代表一定有一个任意字符 [] 同样代表一定有一个在中括号内的字符(非任意字符)。 [-] 若有减号在中括号内时,代表在编码顺序内的所有字符。 [^] 若中括号内的第一个字符为指数符号(^),那表示反向选择

批注符号,这个最常被使用在脚本当中

\ 转义符号,将"特殊字符或通配符"还原成一般字符 | 管道,分隔两个管道命令的界定 ; 连续命令执行分隔符,连续性命令的界定(与管道命令并不相同) ~ 用户的主文件夹 $ 使用变量前导符,既是变量之前需要加的变量替代值 & 作业控制,将命令变成后台下工作 ! 逻辑运算意义上的"非"的意思 / 目录符号,路径分隔的符号

,>> 数据流重定向,输出导向,分别是"替换"与“累加” <,<< 数据流重定向,输入导向 '' 单引号,不具有变量置换的功能 "" 具有变量置换的功能 `` 两个反引号中间为可以先执行的命令,也可使用$() () 在中间为子shell的起始与结束 {} 在中间为命令块的组合

使用set结构的通配符 表达式 匹配的单一字符 [abc] a、b、c [.,;] 句号、逗号,或分号 [-] 破折号或下划线 [a-c] a、b或c [a-z] 任何一个小写字母 [!0-9] 任何一个非数字字符 [0-9!] 任何一个数字或感叹号 [a-zA-Z] 任何一个小写或大写字母 [a-zA-Z0-9-] 任何一个字母、任何一个数字、下划线或破折号

11、通配符和正则表达式的区别 通配符和正则表达式不一样!!! 通配符代表的是bash操接口的一个功能, 正则表达式则是一种字符串处理的表达方式。

12、正则表达式 12.1、基础字符 RE字符 意义与范例 ^word 待查找的字符串在行首 word$ 待查找的字符串在行尾 . 代表一定有一个任意字符的字符 \ 转义字符,将特殊符号的特殊意义去除

  • 重复零个到无穷多个的前一个字符 [list] 匹配方括号内的任一字符 [n1-n2] 从字符集合的RE字符里面找出想要选取的字符范围 [^list] 从字符集合的RE字符里面找出不要的字符串或范围 {n,m} 连续n到m个的前一个RE字符,若为{n}则是连续N个的前一个RE字符,若为{n,}则是连续n个以上的前一个RE字符 () 将()间的表达式存储在特殊的“保留空间”。最多可以将9个独立的子表达式存储在单个模式中。匹配于子表达式的文本,可通过转义序列\1至\9,被重复使用在相同模式里。 \n 重复在()方括号内子表达式 匹配成功的字符 () \n 联合使用被称为后向引用

{start..end} {1..255} 1到255的意思

BRE运算符优先级,由高到低 运算符 表示意义 [...] [==] [::] 用于字符排序的方括号符号 \metacharacter 转义字符 [] 方括号表达式 () \digit 子表达式与后向引用 *{} 前置单个字符重现的正则表达式 无符号(no symbol) 连续 ^$ 锚点 12.2扩展字符 RE字符 意义与范例

  • 匹配前面正则表达式的一个或多个实例 ? 匹配前面正则表达式零个或一个实例 | 匹配于|符号前或后的正则表达式

() 匹配于方括号括起来的正则表达式群

()+ 对个重复组的判别 {n,m} 与BRE中的{n,m}一样

ERE运算符优先级,由高到低 运算符 表示意义 [...] [==] [::] 用于字符排序的方括号符号 \metacharacter 转义字符 [] 方括号表达式 () 分组 *+?{} 重复前置的正则表达式 无符号(no symbol) 连续 ^$ 锚点 | 交替

12.3特殊字符 特殊符号 代表意义 [:alnum:] 所有字母和数字,即0-9,A-Z,a-z [:alpha:] 所有字母,即A-Z,a-z [:blank:] 空格键与[tab]按键 [:cntrl:] 所有控制字符 [:digit:] 所有数字,即0-9 [:graph:] 所有可打印字符,不包括空格和[tab]按键 [:lower:] 所有小写字母

[:print:] 所有可打印字符,包括空格和[tab]按键 [:punct:] 所有标点符号 [:space:] 所有水平或垂直空白 [:upper:] 所有大写字母 [:xdigit:] 所有十六进制数字

\f 换页 \n 换行 \r 回车 \s 空白字符:空格、制表符、换页符 \S 非空白字符 \t 制表符 \d 一个数字字符0-9 \D 非数字字符 \w 匹配字母数字下划线,相当于[A-Za-z0-9_] \W匹配非字母数字下划线。相当于[^A-Za-z0-9_] \b 匹配起始或结尾处所找到的空字符串 \B 匹配两个单词组成字符之间的空字符串 < > 匹配单词的起始于结尾 ' ` 分别匹配emacs缓冲区的开始于结尾

13、特殊变量 变量 意义

目前进程的参数个数

@ 传递给当前进程的命令行参数。置于双引号内,会展开为个别的参数

  • 当前进程的命令行参数,至于双引号内,则展开为一单独参数
  • 在引用时给予shell的选项 ? 前一命令的退出状态 $ shell进程的进程编号 0 shell程序的名称 ! 最近一个后台命令的进程编号。以此方式存储的进程编号,可通过wait命令使用 ENV 交互式SHELL,为要读取和在启动时要执行的一个文件的完整路径名称。 HOME 登录目录 IFS 内部的字段分隔器 LANG 当前locale的默认名称,其他LC_*会覆盖其值 LC_ALL 当前locale的名称;会覆盖LANG与其他LC_*的变量 LC_CONLLATE 用来排序字符的当前locale名称 LC_CTYPE 在模式匹配期间,用来确定字符类别的当前locale的名称 LC_MESSAGES 输出信息的当前语言的名称 LINENO 刚执行的行在脚本或函数内的行编号 NLSPATH 在$LC_MESSAGES所给定的信息语言里,信息目录的位置。 PATH 命令的查找路径 PPID 父进程的进程编号 PS1 主要的命令提示字符串,默认为"$" PS2 行继续的提示字符串,默认为">" PS4 以set -x设置的执行跟踪的提示字符串。默认为"+" PWD 当前工作目录

14、算数运算 运算符 意义 顺序 ++ -- 增加及减少,可前置也可放在结尾 由左至右

    • ! ~ 一元的正与负号;逻辑与位的取反 由右至左
  • / % 乘法、除法,与余数 由左至右
    • 加法,减法 由左至右 << >> 向左位移、向右位移 由左至右 < <= > >= 比较 由左至右 == != 相等于不等 由左至右 & 位的AND 由左至右 ^ 位的Exclusive OR 由左至右 | 位的OR 由左至右 && 逻辑的AND 由左至右 || 逻辑的OR 由左至右 ?: 条件的表达式 由右至左 = += -= *= /= %= &= ^= <<=

= |= 赋值运算符 由右至左 可利用圆括号将子表达式块括起来。关系运算符产生数字结果中,1表示为真,0表示为假。 对逻辑的AND或OR运算符而言,任何的非0值函数都为真;

i=5

#echo $((i++)) $i 运算符出现在变量之后,在结果产生后,将旧值返回给变量,再执行变量加1的操作。
5 6 #echo $((++i)) $i 运算符放在变量的前面,先将变量加1,再返回新值给变量。 7 7

15、自定义函数 在shell脚本中存在两种格式的函数: 第一种:采用关键字function,后跟分配给该代码块的函数名。 语法: function name { commands } name定义了赋予函数的唯一名称。脚本中定义的每个函数都必须有一个唯一的名称。 commands是构成函数的一条或多条bash shell命令。在调用该函数时,bash shell会按命令在函数中出现的顺序依次执行。

第二种: name () { commands }

函数名后的空括号表明正在定义的是一个函数。

在函数体中,位置参数($1、$2、....、$#、$*,以及$@)都是函数的参数,父脚本的参数则临时地被函数参数所掩盖或隐藏。$0依旧是父脚本的名称 。当函数完成时,原来的命令行参数会恢复。 在shell函数里,return语句会返回一个退出值给调用者。 在shell函数体里使用exit,会终止整个shell脚本!

16、使用while读取文件内容 while read line do command done < filename

或 while read line do command done <空格 <command(例如:find $path -type f -print)

<command(例如:find $path -type f -print)等同于文件名。只不过它用子程序输出来代替文件名。注意,第一个<用于输入重定向,第二个<用于将子程序的输出装换成文件名。在两个<之间有一个空格。 或者: while read line do command done<<<"command"(例如"find $path -type f -print")

<<<可以让字符串作为输入文件。

17、shfit造成参数变量号码偏移 看结果可以知道,shift会移动变量,而且shift后面可以接数字,向左几个参数的意思。。

18、sed = 打印当前行号;

把注释扩展到下一个换行符以前;

sed替换标记 g 表示行内全面替换; p 表示打印行; w 表示把行写入一个文件; x 表示互换模板块中的文本和缓冲区中的文本; y 表示把一个字符翻译为另外的字符(但是不用于正则表达式); \1 子串匹配标记; & 已匹配字符串标记; sed元字符集 ^ 匹配行开始,如:/^sed/匹配所有以sed开头的行; $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行; . 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d;

  • 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行; [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed; [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行; (..) 匹配子串,保存匹配的字符,如s/(love)able/\1rs,loveable被替换成lovers; & 保存搜索字符用来替换其他字符,如s/love/&/,love这成love; < 匹配单词的开始,如:/
    > 匹配单词的结束,如/love>/匹配包含以love结尾的单词的行; x{m} 重复字符x,m次,如:/0{5}/匹配包含5个0的行; x{m,} 重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行; x{m,n} 重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行;

19、printf printf的标志

字符 意义 • 将字段里已格式化的值向左对齐 空白 在正值前置一个空格,在负值前置一个负号

  • 总是在数值之前放置一个正号或负号,即便是正值也是

下列形式选择其一:%o有一个前置的O;%x与%X分别前有前置的Ox与OX.

%e、%E与%f总是在结果中有一个小数点;%g与%G为没有结尾的零。 0 以零填补输出,而非空白。

printf格式指示符: 项目 说明 %b 相对应的参数被视为含有要被处理的转义序列之字符串,转义序列 %c ASCII字符。显示相对应参数的第一个字符 %d,%i 十进制整数 %e 符点格式([-]d.precisione[+-dd]) %E 符点格式([-]d.precisione[+-dd]) %f 符点格式([-]ddd.precisione) %g %e与%f转换,看哪一个较短,则删除结尾的零 %G %E与%f转换,看哪一个较短,则删除结尾的零 %o 不带正负号的八进制值 %s 字符串 %u 不带正负号的十进制值 %x 不带正负号的十六进制值。使用a至f表示10至15 %X 不带正负号的十六进制值。使用A至F表示10至15 %% 字面上的%

20、awk awk里一般常用到的内建标量变量: 变量 说明 FILENAME 当前输入文件的名称 FNR 当前输入文件的记录数 FS 字段分隔字符(正则表达式)(默认为: " ") NF 当前记录的字段数 NR 到目前为止看到的输入记录总数。 OFS 输出字段分隔字符(默认为: " ") ORS 输出记录分隔字符(默认为: “\n”) RS 输入记录分隔字符(默认为: “\n”),仅用于GAWK与MAWK里的正则表达式。 基础数值函数 函数 说明 atan2(y,x) 返回y/x的反正切,值介于-Π与+Π之间 cos(x) 返回x的余弦值,该值介于-1与+1之间 exp(x) 返回x的指数,ex int(x) 返回x的整数部分,截去前置的0 log(x) 返回x的自然对数 rand(x) 返回平均分布的虚拟随机r,0≤r≤1 sin(x) 返回x的正弦值,该值介于-1与+1之间 sqrt(x) 返回x的平方 srand(x)

标签:字符,shell,匹配,变量,expr,用到,str,Linux,var
From: https://blog.51cto.com/xxc2w/5894862

相关文章

  • 定时清除linux内存buff/cache缓存
    1.创建脚本文件       vimclean.sh2.在文件中输入以下脚本#!/bin/bash#每两小时清除一次内存buff/cache缓存echo"开始清除缓存"sync;sync;sync#写......
  • shell(条件测试)
    格式格式1:test条件表达式格式2:{条件表达式}格式3:{{条件表达式}}文件测试(文件或目录)test-d/home[-d/home][-edirfile][-ddir][-ffile]......
  • linux 下安装以及配置postgresql
    1、准备好资源 下载 PostgreSQL官网下载地址  ​​https://www.postgresql.org/ftp/source/v12.2/​​​  我这里下载的是 ​​postgresql-12.2.tar.gz​​ 压缩包......
  • mac使用ssh连接linux(ubuntu)GUI图形界面
    mac使用ssh连接linux(ubuntu)GUI图形界面1.linux服务端1.首先需要在linux服务端打开X11转发以ubuntu为例编辑/etc/ssh/sshd_config配置文件命令vim/etc/ssh/sshd_c......
  • Linux mke2fs命令
    1、功能Linuxmke2fs命令用于建立ext2文件系统。2、语法mke2fs[-cFMqrSvV][-b<区块大小>][-f<不连续区段大小>][-i<字节>][-N<inode数>][-l<文件>][-L<标签>][-......
  • 002 linux系统升级系统版本6升7
    在菜鸟教程上显示:Docker支持以下的64位CentOS版本:CentOS7CentOS8更高版本...查看服务器的版本是6  按照网上的centos6的安装步骤怎么都不能正确启动......
  • Linux(CentOS) Docker 部署Logstash (sqlserver 同步到Elasticsearch)
    网上搜了一下基本都是mysql同步到elasticsearch的案例,虽然没有Sqlserver得案例,但是想一下步骤也大致相同。1.拉取镜像使用以下命令拉去与elasticsearch版本一致logstas......
  • Linux查看cuda版本
    1.查看当前Cuda的版本,即实际安装的Cuda版本nvcc-V#或者cat/usr/local/cuda/version.txt2.查看当前NVIDIA驱动的版本和与此驱动相匹配的Cuda版本nvidia-smiCu......
  • 图解Linux进程间通信实现原理(1)
    为Linux应用程序的开发人员,对Linux的进程间通信方式肯定是了如指掌,平时的开发中应该会大量的使用到。当你迅速的在键盘上按下【CTRL+C】终止掉一个正在运行中的命令时,你有没......
  • Linux基础环境配置————新手篇
    在大家安装系统之后一些基础的命令是不存在的,这个时候需要我们配置环境首先大家可以设置静态的IP具体操作如下首先我们切换root权限su输入密码后切换root权限然后输......