1、Shell概述
1.1 Linux提供的Shell解释器都有哪些
[root@hadoop100 ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh
1.2 bash和sh的关系
[root@hadoop100 ~]# ls -l ../bin/ | grep bash
-rwxr-xr-x. 1 root root 964536 4月 1 2020 bash
lrwxrwxrwx. 1 root root 10 7月 20 00:02 bashbug -> bashbug-64
-rwxr-xr-x. 1 root root 6964 4月 1 2020 bashbug-64
lrwxrwxrwx. 1 root root 4 7月 20 00:02 sh -> bash
1.3Centos默认的解释器是bash
[root@hadoop100 ~]# echo $SHELL
/bin/bash
1.4 脚本的常用执行方式
第一种:采用bash或sh+脚本的相对路径或者绝对路径(不需要赋于脚本+x权限)
sh+脚本的相对路径
sh+脚本的绝对路径
bash+脚本的相对路径
bash+脚本的绝对路径
第二种:采用输入脚本的绝对路径或者相对路径执行脚本(必须具有可执行权限+x)
1、首先要赋予脚本+x权限
2、执行脚本
相对路径
绝对路径
注意:第一种执行方式,本质上是bash解释器帮你执行脚本,所以脚本本事不需要执行权限
第二种执行方式,本质上是脚本需要自己执行,所以需要执行权限
第三种:再脚本的路径前加上“.”或者source
使用“.”或者source执行脚本,是在当前的bash指令下执行,而使用sh或者bash都是相当于在子bash下执行脚本
开子shell与不开子shell的区别就在于,环境变量的继承关系,如在子shell中设置当前变量,父shell是不可见的。
2 变量(环境变量)
2.1 系统预定义变量
a、常用系统变量
$HOME $PWD $SHELL $USER等
b、查看系统变量的值
echo $HOME
c、显示当前Shell中所有的变量
evn | less
printenv | less
set | less (查看所有的) 按ctrl+D翻页查看
2.2自定义变量
(5)把变量提升为全局变量,可供其他Shell程序使用 可以使用 export 变量名
2.3特殊变量
1)、$n
基本语法
$n (功能描述 : n为数字,$0代表脚本名称,$1-$9代表第一到第九个参数,十以上的参数,需要使用
大括号包含,例如 ${10})
2)、$#
基本语法
$# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及加强脚本的健壮性)
3、$*、$@
基本语法
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
4、$?
基本语法
$? (功能描述:最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行;如果
这个变量的值为非0(具体是哪个数字,由命令自己来定),则证明上一个命令执行不正确)
3 运算符
基本语法
"$((运算表达式))"或者"$[运算表达式]"(在最开始的时候是使用expr 加参数的形式进行运算)
4 条件判断
(4)多条件判断(&& 表示前一条命令成功时,才执行后一条命令,|| 表示上一条命令执行失败后
才执行下一条命令)类似与java中的三目运算符,如果放在一个中括号中,需要使用-a
5 流程控制(重点)
5.1 if判断
基本语法
(1)单分支
if [ 条件判断式 ];then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
(2)多分支
if [ 条件判断式 ]
then
程序
elif [ 条件判断式 ]
then
程序
else
程序
fi
5.2 case语句
5.3 for循环
基本语法1
for (( 初始值;循环控制条件;变量变化))
do
程序代码
done
基本语法2
for 变量 in 值1 值2 值3...
do
程序代码
done
5.4 while循环
while [ 条件判断式 ]
do
程序代码
done
6 read读取控制台输入
7 函数
7.1 系统函数
7.1.1 basename
7.1.2 dirname
8 自定义函数
9 正则表达
正则表达式使用单个字符串来描述、匹配一系列符合某个语法规则的字符串,在很多文本编辑器中,正则表达式通常被用来检索、替换那些符合某个模式的文本,在Linux 中,grep,sed,awk等文本处理工具都支持通过正则表达式进行模式匹配。
9.1 常规匹配
一串不包含特殊字符的正则表达式匹配它自己
cat /etc/passwd | grep gavin
9.2 常用特殊字符
- 特殊字符: ^ 匹配一行的开头
- 特殊字符:$ 匹配一行的结束
- 特殊字符: ^$ 匹配空行 配合 grep -n 使用
- 特殊字符: . 匹配一个任意的字符
- 特殊字符: * 不单独使用,它和.字符连用,表示匹配上一个字符0次或者多次
- 特殊字符: .* 匹配任意字符串
- 字符区间:中括号是英文模式
10 文本处理工具
10.1 cut
10.2 awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理
注意: BEGIN在所有数据读取之前执行,END在所有数据执行之后执行