Shell基本入门(二)

Shell基本入门(二)

1、while语句:

Shell脚本提供了while命令,用于创建类似于C语言编程中while语句一样的循环,使用
格式:
while [ condition ]
do
Commands
done

另外,while命令允许在while语句行定义多条test命令,只有最后一条测试命令的退出状态
是用来决定循环是何时停止的

2、until语句:

until命令刚好与while命令相反,一旦测试条件返回0,循环停止,使用格式:
until [ condition ]
do
Commands
done

3、shift命令

使用shift命令时,默认是将每个参数变量左移一位,可选择左移第三位,移动后参数丢失,不可恢复
EG: shift 2

4、read命令

read命令接受标准输入的输入,或其它文件描述符的输入,得到输入后,将其放在一个变量中
使用选项p允许在read命令行中直接指定一个提示
read name
EG: read -p “please input your name:” name

使用read命令存在潜在危险,脚本很可能会停下来一直等待脚本用户输入数据,使用选项t可以
指定一个计时器(s),等计时器计时数满时,read命令返回一个非零退出命令

if read -t 25 -p “please input your name: ” name

使用选项n,后接一个数值,表示当输入的字符数目达到预定数目时,自动退出,不需回车键
if read -t 25 -n1 -p “do you want to continue [Y/N]?” answer

使用选项s,能够使read命令中输入的数据不显示在监视器上(实际上,数据是显示的,只是read
命令将文本颜色设置成了与背景相同的颜色)
read -s -p “Enter your password: “ pass

5、exec命令

永久重定向,通知shell在脚本执行期间重定向特定的文件描述符
exec 1>testout

保存文件描述符,例如,在重定向到文件之前,将STDIN文件描述符位置保存到另一个文件描述符, 然后在完成了文件读取操作后,将STDIN恢复为原来的位置
exec 6<&0 exec 0< testfile … exec 0<&6

关闭文件描述符 exec 3>&-

6、trap命令

trap命令可以指定能够通过shell脚本监控和拦截的Linux信号,由它来处理这些信号,使用格式:
trap commands signals
trap “echo HAHA” SIGINT SIGTERM trap “echo byebye” EXIT

移除捕获 trap - EXIT

7、函数

在bash shell脚本中创建函数可以使用两种格式,一种格式是使用关键字function:
function name{
commands }

另外一种格式,它更接近一般编程语言定义函数的方式:
name(){
commands }

向函数传递参数:函数可以使用标准参数环境变量来表示命令行传递给函数的参数:$#,$0,$1…
上述的参数不同于脚本的变量。在脚本中指定函数时,必须在函数所在命令行提供参数:
func1 $value1 10 func1 $1

Shell脚本中的变量默认是全局变量,可以使用local来声明局部变量
引用库文件 . ./myfuncs

8、正则表达式

正则表达式认可的特殊字符有:
.*[]^{}+?|()

另外,虽然正斜杠不是正则表达式的特殊字符,但如果在sed编辑器或gawk程序的正则表达式模式
使用它,必须先转义

反斜杠/:转义符号

脱字符^:定义从数据流中文本行开头开始的模式,只要该模式出现在新行的开始位置,脱字符定位符就会捕获它,如果将脱字符放在模式的其它位置,它就充当普通字符而不再作为特殊字符

查找结尾$:与在一行开始查找模式(脱字符)相反的是在行尾查找它

联合定位^KaTeX parse error: Expected group after '^' at position 33: …用来删除文件中的空行(即使用“^̲”匹配空行)

点字符.:点特殊字符用于匹配除换行符之外的任何单个字符,但点字符必须匹配第一个字符,如果在圆点位置没有字符,那么模式匹配失败

字符类[]:字符类可以定义一类来匹配文本模式的某个位置,如果该字符类中的字符之一在数据流中那它就和模式匹配。在单个表达式中可以使用多个字符类:
EG: echo “Yes” | sed -n ‘/[Yy][Ee][Ss]/p’
echo “Yes” | sed -n ‘/1[Ee]Ss]$/’

否定字符类:在正则表达式模式中,也可以颠倒字符类的作用。不是查找字符类中包含的字符,而是查找不在该字符类中的字符,为此只需在字符类范围的开头添加脱字符
EG: sed -n ‘/[^ch]at/p’ data.txt

使用范围-:通过使用短划线可以在字符类中使用一系列字符范围
EG: sed -n ‘/[a-ch-m]at/p’ data.txt

星号*:在某个字符之后加一个星号表示该字符必须在匹配字符的文本中不出现或出现多次,还可以将星号应用于字符类
EG: sed -n ‘/b[ae]*t/p’ data.txt

问号?:问号与星号相似,但略有变化,问号表示其前面的字符可以不出现或出现一次,但只能是这样它不匹配重复出现的字符

加号+:加号是与星号相似,但与问号不同的另一个模式符号,加号表示其前面的字符可以出现一次多次,但必须出现至少一次,如果该字符不存在,则模式不匹配

使用大括号:在ERE中可以使用大括号指定对可重复的正则表达式的限制,这通常称为间隔,可以使用两种格式表示间隔:
m:该正则表达式正好出现m次
m,n:该正则表达式出现最少m次,最多n次
EG: sed -n ‘/be{1}/p’ data.txt

管道符号|:管道符号允许你用逻辑OR公式指定正则表达式检查数据流时使用的两个或多个模式,如果任何一个模式与数据流文本匹配,该文本通过,如果没有一个模式匹配,数据流文本失败
将表达式分组():正则表达式模式也可以使用圆括号分组,在将正则表达式模式分组时,一个组合将作为一个标准字符处理,可以像将特殊字符应用于正常字符一样,将特殊字符应用于组合
EG: echo “Sat” | awk ‘/Sat(urdav)?/{print $0}’

9、Sed编辑器

Sed(Stream Editor):流式编辑器又名行编辑器,每次只编辑一行,使用格式如下:
sed [操作选项] ‘命令’ 文件名
(注意:命令是用单引号括起来的,双引号则可访问$1、$2等外部的变量)

常用操作选项:(没有的情况下会全部打印出来)
-n 指定处理后只显示该行
-e 进行多项编辑任务
-i 直接修改读取的文件内容,而不是由屏幕输出

常用命令选项:
p 打印匹配行
a 指定行后新增一行
i 指定行前新增一行
c 替代一行
d 删除定位行
g 表示用新文本替换现有文本的全部实例
w 表示将替换的结果写入文件
s 替代一行中的某些部分

10、awk分析器

Awk是一个强大的文本分析工具,它把文件逐行读入,以空格为默认分隔符将每行分割为多 个字段,使用方式:
awk ‘{pattern + action}’ filenames (特别提示:可以用-F指明分隔符)
pattern为要查找的内容(可以不要)
action为找到匹配内容时所执行的命令 内容放在{ }里面

选项 -F fs 指定描绘一行中数据字段的文件分隔符

-v var=value 定义awk程序中使用的变量和默认值

字符变量 $0 表示整行文本
字符变量 $1 表示文本行中的第一个数据字段
字符变量 $n 表示文本行中的第n个数据字段

EG:
last -n 5 | awk ‘{print $1}’
cat /etc/passwd | awk -F ‘:’‘{print $1}’
awk -F ‘:’ ‘$1 == “root” {print $0}’ /etc/passwd $0代表整行


  1. Yy ↩︎

猜你喜欢

转载自blog.csdn.net/weixin_38337616/article/details/88295926