Shell-->命令行解释器,接收用户程序命令,调用系统内核执行
脚本以#!/bin/bash开头(指定解析器)
脚本的常用执行方式:bash或sh+脚本的相对路径或绝对路径(不用赋予脚本+x权限)
输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x)
变量:常用系统变量-->$HOME、$PWD、$SHELL、$USER、$PATH等
自定义变量:定义变量:变量=值 撤销变量:unset 变量 声明静态变量:readonly变量,注意:不能unset
变量定义规则:变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
等号两侧不能有空格
在bash中,变量默认类型都是字符串类型,无法直接进行数值运算
变量的值如果有空格,需要使用双引号或单引号括起来
特殊变量:$n-->n为数字,$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
$#-->获取所有输入参数个数,常用于循环
$*-->这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
$@-->这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待
$?-->最后一次执行的命令的返回状态,值为0,证明上一个命令正确执行;值为非0证明上一个命令执行不正确
注:$*和$@都表示传递给函数或脚本的所有参数,不被双引号“”包含时,都以$1 $2 …$n的形式输出所有参数;
被双引号“”包含时,“$*”会将所有的参数作为一个整体,以“$1 $2 …$n”的形式输出所有参数;
“$@”会将各个参数分开,以“$1” “$2”…”$n”的形式输出所有参数
运算符: $((运算式)) 或 $[运算式]
条件判断: test condition [ condition ](注意condition前后要有空格)
判断条件: = 字符串比较 -lt 小于 -le 小于等于 -eq 等于 -gt 大于 -ge 大于等于 -ne 不等于
-r 有读的权限 -w 有写的权限 -x 有执行的权限
-f 文件存在并且是一个常规的文件file -e 文件存在 -d 文件存在并是一个目录
流程控制:
1、if
if [ 条件判断式 ];then
程序
fi
2、if
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
注:[ 条件判断式 ],中括号和条件判断式之间必须有空格 if后要有空格
3、case
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
注:(1)case行尾必须为单词“in”,每一个模式匹配必须以右括号“)”结束。
(2)双分号“;;”表示命令序列结束,相当于java中的break。
(3)最后的“*)”表示默认模式,相当于java中的default。
4、for
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
5、for
for 变量 in 值1 值2 值3…
do
程序
done
6、while
while [ 条件判断式 ]
do
程序
done
read读取控制台输入:read(选项)(参数) -p-->指定读取值时的提示符 -t-->指定读取值时等待的时间(秒)
函数:
系统函数:basename
basename [string / pathname] [suffix]-->basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉
例:basename /home/atguigu/banzhang.txt .txt-->banzhang
系统函数:dirname
dirname 文件绝对路径-->从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径
自定义函数
[ function ] funname[()]
{
Action;
[return int;]
}
funname
注:必须在调用函数地方之前,先声明函数,shell脚本是逐行运行。不会像其它语言一样先编译
函数返回值,只能通过$?系统变量获得,可以显示加:return返回,
如果不加,将以最后一条命令运行结果,作为返回值。return后跟数值n(0-255)
Shell工具
cut-->cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出,默认分隔符是制表符
cut [选项参数] filename -f-->列号,提取第几列 -d-->分隔符,按照指定分隔符分割列 -c-->指定具体的字符
sed:流编辑器,一次处理一行内容,处理完成后文件内容并没有改变
sed [选项参数] ‘command’ filename -e-->直接在指令列模式上进行sed的动作编辑 -i-->直接编辑文件
命令: a-->新增,a的后面可以接字串,在下一行出现 d删除 s-->查找并替换 g-->全部替换
awk:强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理
awk [选项参数] ‘pattern1{action1} pattern2{action2}...’ filename 只有匹配了pattern的行才会执行action
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令 -F-->指定输入文件折分隔符 -v-->赋值一个用户定义变量
BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。
awk的内置变量:FILENAME-->文件名 NR-->已读的记录数 NF-->浏览记录的域的个数(切割后,列的个数)
sort:将文件进行排序,并将排序结果标准输出
sort(选项)(参数) -n-->依照数值的大小排序 -r-->以相反的顺序来排序 -t-->设置排序时所用的分隔字符
-k-->指定需要排序的列
正则表达式入门:
^ 匹配一行的开头,^a-->匹配出所有以a开头的行
$ 匹配一行的结束,t$-->匹配出所有以t结尾的行
. 匹配一个任意的字符,一个.匹配一个字
* 不单独使用,他和上一个字符连用,表示匹配上一个字符0次或多次
[ ] 表示匹配某个范围内的一个字符
[6,8]------匹配6或者8
[a-z]------匹配一个a-z之间的字符
[a-z]*-----匹配任意字母字符串
[a-c, e-f]-匹配a-c或者e-f之间的任意字符
\ 表示转义,并不会单独使用