一.Shell概述
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
二.Shell脚本入门
脚本以 #!/bin/bash 开头(指定解析器):告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。
打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 helloworld.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行。
脚本的常用执行方式采用 bash 或 sh+脚本的相对路径或绝对路径,不用赋予脚本+x 权限
sh+脚本的相对路径:sh ./helloworld.sh;sh+脚本的绝对路径:
sh /home/shells/helloworld.sh
bash+脚本的相对路径:
bash ./helloworld.sh
bash+脚本的绝对路径:
bash /home/shells/helloworld.sh
这种执行方法,本质是 bash 解析器帮你执行脚本,所以脚本本身不需要执权限。
采用输入脚本的绝对路径或相对路径执行脚本,首先要赋予 helloworld.sh 脚本的+x 权限:
chmod +x helloworld.sh
相对路径:
./helloworld.sh
绝对路径:
/home/shells/helloworld.sh
这种执行方法,本质是脚本需要自己执行,所以需要执行权限
三.变量
变量类型:运行shell时,会同时存在三种变量:
局部变量: 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。】
环境变量: 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
shell变量: shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。
查看所有环境变量用env命令:
自定义变量
(1)定义变量:变量名=变量值,注意,=号前后不能有空格e
(2)撤销变量:unset变量名
(3)产明静态变量:readonly变量,注意:不能unset
变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
shell字符串字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号:任何字符都会原样输出,单引号字符串中的变量是无效的;不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号:双引号里可以有变量;双引号里可以出现转义字符。
四.运算符
基本语法
“$ ((运算式))”或“$[ 运算式 ]”
案例实操
计算(2+3)*4的值$ =$[(2+3)*4]echo $S
注意!如果都加空格,会把a当成一个命令来执行。如果不加空格,1+2会被认作视一个字符串,直接输出而不进行计算。
所以出现了expression的用法
expr 后面的加空格相当于传参数,它自己读取 第一个量 、符号、第二个量,然后进行运算,但是在处理乘法“*”的时候,需要加“/”因为“*"在运算中有特别的含义。但这样使用太过于繁琐,有了更加简单的用法——$
基本语法:
“$ ((运算式))” 或“$ [运算式]”
(运算式中无所谓加不加空格)
五.条件判断
在Linux中,返回值1为false,返回值为0为true.
(一) 基本语法
(1) test conditione
(2) [ condition ] (注意 condition 前后要有空格)
注意:条件非空即为true,[ ]返回 flse。
(二) 常用判断条件
(1)两个整数之间比较
-eq 等于(equal)
-lt 小于(less than)
-gt大于(greater than)
-ne 不等于(not equal)
-le 小于等于(less equal)
-ge 大于等于(greater equal)
如果是字符串之间的比较,用号“=”判断相等,用“!=”判断不等。
(2)按照文件权限进行判断-r有读的权限(read) -w有写的权限(write) -x有执行的权限(execute)
(3)按照文件类型进行判断-e文件存在(existence) -f文件存在并且是一个常规的文件(file) -d文件存在并且是一个目录(directory)
(4)多条件判断 :
[ ryan ] && echo ok || echo notok
(&&表示前一条命令执行成功时,才执行后一条命令,||表示上一条命令执行失败后,才执行下一条命令)类似于三目运算符:ryan?ok:notok
六.流程控制
(一) 单分支
if [ 条件判断式 ];then
程序
fi
if [ 条件判断式 ]
then
程序
fi
(二) 多分支
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
逻辑&& 也可以用 -a (and)代替,这样就只用写一个括号
(三) case 语句
基本语法case $变量名 in“值 1”) 如果变量的值等于值1,则执行程序1;;"值2”) 如果变量的值等于值2,则执行程序2;; ..省略其他分支...*) 如果变量的值都不是以上的值,则执行此程序;;esac
注意事项
Ⅰ:case 行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
Ⅱ:双分号“;;”表示命令序列结束,相当于java中的break。(3)最后的“*)”表示默认模式,相当于default。
(四) for 循环
基本语法:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
还有一种用法是:
for 变量 in 值1 值2 值3…
do
程序
done
(五) while循环
基本语法:
while [ 条件判断式 ]
do
程序
done
七.读取控制台
read 读取控制台输入
基本语法:
read (选项) (参数)
选项:
-p:指读取值时的提示符
-t:指定读取值时等待的时间 (秒),如果不加表示一直等待参数:
参数:指定读取值的变量名
八.函数
(一) 系统函数
1.basename
基本语法:
basename [ string /pathname ] [suffix]
功能描述:basename命令会删掉所有的前缀包括最后一个('/')字符,然后将字符串显示出来。
basename 可以理解为取路径里的文件名称
选项:suffix为后缀,如果 suffx被指定了,basename 会将 pathname 或 string 中的 suffx 去掉。
2.dirname
基本语法:
dirname 文件绝对路径
功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分) dimmame 可以理解为取文件路径的绝对路径名称
(二) 自定义函数基本语法
[ function ] funname [()]{ Action; [ return int; ]}
1.必须在调用函数地方之前,先声明函数,shell 脚本是逐行运行。不会像其它语言样先编译。
2.函数返回值,只能通过$?系统变量获得,可以显示加:return返回。如果不加,将以最后一条命令运行结果,作为返回值。
return后跟数值n(0-255)
九.正则入门
正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在imnux中,grep,sed,awk等文本处理工具都支持通过正则表达式进行模式匹配。
常规匹配 一串不包含特殊字符的正则表达式匹配它自己。
(一) 常用特殊字符
1.特殊字符:^
匹配一行的开头,例如:
cat /etc/passwd | grep ^a
会匹配出所有以a开头的行。
2.特殊字符:$
匹配一行的结束,例如:
cat /etc/passwd | grep a$
会匹配出所有以a结尾的行
3.特殊字符:.
匹配一个任意的字符,例如:
cat /etc/passwd l grep r..t
会匹配包含 rabt,rbbt.rxdt,root 等的所有行
4.特殊字符:*
不单独使用,他和上一个字符连用,表示匹配上一个字符0次或多次,例如:
cat /etc/passwdgrep ro*t
会匹配 rt, rot,root,rooot,roooot 等所有行
5.字符区间(中括号):[]
[]表示匹配某个范围内的一个字符,例如:
[6,8]匹配6或者8;
[0-9]匹配一个 0-9的数字;
[0-9]*匹配任意长度的数字字符串;
[a-z]匹配一个 a-z之间的字符;
[a-z]*:匹配任意长度的字母字符串
十。文本处理工具
(一) cut
cut 的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut 命令从文件的每行剪切字节、字符和字聚并将这些字节、字符和字段输出。
1.基本用法
cut [ 选项参数 ] flenamee(默认分隔符是制表符)
2.选项参数说明
-f :列号,提取第几列
-d:分隔符,按照指定分隔符分割列,默认是制表符“\t”
-c:按字符进行切割后,加n表示取第几列,比如-c l
(二) awk
awk是一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
1.基本用法
awk [ 选项参数 ] '/pattern1/{actionl} /pattern2/faction2} ...' filename
pattern表示 awk 在数据中查找的内容,就是匹配模式action表示在找到匹配内容时所执行的一系列命令
2.选项参数
-F:指定输入文件分隔符
-v:赋值一个用户定义变量
3.awvk 的内置变量
FILENAME:文件名
NR:已读的记录数(行号)
NF:浏览记录的域的个数(切割后,列的个数)
标签:脚本,shell,匹配,变量,编程,sh,Shell,字符串,速查 From: https://blog.csdn.net/qq_39209622/article/details/140517885