Centos默认的解析器是bash
[hej@hadoop101 bin]$ echo $SHELL
/bin/bash
1)脚本格式
脚本以#!/bin/bash开头(指定解析器)
helloworld.sh
#!bin/bash
echo "helloword"
1)常用系统变量
$HOME、$PWD、$SHELL、$USER等
[hej@hadoop102 data]$ echo $HOME
/home/hej
[hej@hadoop102 data]$ echo $PWD
/home/hej/data
[hej@hadoop102 data]$ echo $SHELL
/bin/bash
[hej@hadoop102 data]$ echo $USER
hej
2)变量定义规则
(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。
(2)等号两侧不能有空格
(3)在bash中,变量默认类型都是字符串类型,无法直接进行数值运算。
(4)变量的值如果有空格,需要使用双引号或单引号括起来。
(3)撤销变量A
[hej@hadoop101 datas]$ unset A
(4)声明静态的变量B=2,不能unset
[hej@hadoop101 datas]$ readonly B=2
[hej@hadoop101 datas]$ echo $B
2
[hej@hadoop101 datas]$ B=9
-bash: B: readonly variable
(7)可把变量提升为全局环境变量,可供其他Shell程序使用
export 变量名
$n (
功能描述:
n为数字,
$0代表该脚本名称,$1-$9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如${10})
$# (
功能描述:
获取所有输入参数个数,常用于循环)
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
第5章 条件判断
1)基本语法
(1)test condition
(2)[ condition ](注意condition前后要有空格)
注意:条件非空即为true,[ atguigu ]返回true,[ ] 返回false。
2)常用判断条件
(1)两个整数之间比较
-eq 等于(equal) -ne 不等于(not equal)
-lt 小于(less than) -le 小于等于(less equal)
-gt 大于(greater than) -ge 大于等于(greater equal)
(2)按照文件权限进行判断
-r 有读的权限(read)
-w 有写的权限(write)
-x 有执行的权限(execute)
(3)按照文件类型进行判断
-e 文件存在(existence)
-f 文件存在并且是一个常规的文件(file)
-d 文件存在并且是一个目录(directory)
(4)多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
单
if [ ]
....
fi
或者
if [ ]
then
....
fi
多:
if [ ]
then
....
elif [ ]
then
....
else
....
fi
case $变量名 in
"值1")
.......
;;
"值2")
.......
;;
*)
.....
;;
esac
方式一:
for ((;;))
do
......
done
方式二:
for 变量 in 值1 值2....
do
......
done
while [ ]
do
......
done
第7章 read读取控制台输入
1)基本语法
read (选项) (参数)
选项:
-p:指定读取值时的提示符;
-t:指定读取值时等待的时间(秒)。
参数
变量:指定读取值的变量名
2)案例实操
提示7秒内,读取控制台输入的名称
[hej@hadoop101 datas]$ touch read.sh
[hej@hadoop101 datas]$ vim read.sh
#!/bin/bash
read -t 7 -p "Enter your name in 7 seconds :" NN
echo $NN
[hej@hadoop101 datas]$ ./read.sh
Enter your name in 7 seconds : hej
hej
8.系统函数
basename
1)基本语法
basename [string / pathname] [suffix]
(功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
截取该/home/hej/banzhang.txt路径的文件名称
[hej@hadoop101 datas]$ basename /home/hej/banzhang.txt
banzhang.txt
[hej@hadoop101 datas]$ basename /home/hej/banzhang.txt .txt
banzhang
dirname
1)基本语法
dirname 文件绝对路径
(功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分))
2)案例实操
获取banzhang.txt文件的路径
[hej@hadoop101 ~]$ dirname /home/hej/banzhang.txt
/home/hej
第9章 Shell工具(重点)
//cut
cut cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。
cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
1)基本用法
cut [选项参数] filename
说明:默认分隔符是制表符
2)选项参数说明
选项参数 功能
-f 列号,提取第几列
-d 分隔符,按照指定分隔符分割列,默认是制表符“\t”
-c 指定具体的字符
注:cut: 分界符必须是单个字符
//awk
awk
1)基本用法
awk [选项参数] ‘/pattern1/{action1} /pattern2/{action2}...’ filename
pattern:表示awk在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
2)选项参数说明
选项参数 功能
-F 指定输入文件折分隔符
-v 赋值一个用户定义变量
3)awk的内置变量
变量 说明
FILENAME 文件名
NR 已读的记录数(行号)
NF 浏览记录的域的个数(切割后,列的个数)
例:
root:x:0:0:root:/root:/bin/bash
(2)搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
[hej@hadoop101 datas]$ awk -F : '/^root/{print $7}' passwd
/bin/bash
(4)只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"dadage,/bin/zuishuai"。
[hej@hadoop101 datas]$ awk -F : 'BEGIN{print "user, shell"} {print $1","$7} END{print "dadage,/bin/zuishuai"}' passwd
user, shell
root,/bin/bash
bin,/sbin/nologin
。。。
hej,/bin/bash
dadage,/bin/zuishuai
注意:BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。
(5)将passwd文件中的用户id(第三列显示)增加数值1,并打印输出显示
[hej@hadoop101 datas]$ awk -v i=1 -F : '{print $3+i}' passwd 或者awk -F : '{print $3+1}' passwd
(6)统计passwd文件名,每行的行号,每行的列数
[hej@hadoop102 data]$ awk -F : '{print "filename:" FILENAME ",linenum:" NR ",col:" NF}' passwd
filename:passwd,linenum:1,col:7
filename:passwd,linenum:2,col:7
filename:passwd,linenum:3,col:7
filename:passwd,linenum:4,col:7
filename:passwd,linenum:5,col:7
filename:passwd,linenum:6,col:7
(2)查询ifconfig命令输出结果中的空行所在的行号
[hej@hadoop101 datas]$ ifconfig | awk '/^$/{print NR}'
9
18
26
(3)切割IP
[hej@hadoop101 datas]$ ifconfig ens33 | grep netmask | awk -F "inet" '{print $2}' | awk -F " " '{print $1}'
192.168.6.101
//sort
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出。
1)基本语法
Sort (选项) (参数)
选项 说明
-n 依照数值的大小排序
-r 以相反的顺序来排序
-t 设置排序时所用的分隔字符
-k 指定需要排序的列
参数:指定待排序的文件列表
//wc
wc命令用来统计文件信息。利用wc指令我们可以计算文件的行数,字节数、字符数等。
1)基本语法
wc [选项参数] filename
选项参数 功能
-l 统计文件行数
-w 统计文件的单词数
-m 统计文件的字符数
-c 统计文件的字节数
10.2 常用特殊字符
1)特殊字符:^
^ 匹配一行的开头,例如:
[hej@hadoop101 datas]$ cat /etc/passwd | grep ^a
会匹配出所有以a开头的行
2)特殊字符:$
$ 匹配一行的结束,例如
[hej@hadoop101 datas]$ cat /etc/passwd | grep t$
会匹配出所有以t结尾的行
思考:^$ 匹配什么?空行
3)特殊字符:.
. 匹配一个任意的字符,例如
[hej@hadoop101 datas]$ cat /etc/passwd | grep r..t
会匹配包含rabt,rbbt,rxdt,root等的所有行
4)特殊字符:*
* 不单独使用,他和上一个字符连用,表示匹配上一个字符0次或多次,例如
[hej@hadoop101 datas]$ cat /etc/passwd | grep ro*t
会匹配rt, rot, root, rooot, roooot等所有行
思考:.* 匹配什么?
[hej@hadoop101 datas]$ cat /etc/passwd | grep r.*t
只要有rt就行
5)特殊字符:[ ]
[ ] 表示匹配某个范围内的一个字符,例如
[6,8]------匹配6或者8
[0-9]------匹配一个0-9的数字
[0-9]*------匹配任意长度的数字字符串
[a-z]------匹配一个a-z之间的字符
[a-z]* ------匹配任意长度的字母字符串
[a-c, e-f]-匹配a-c或者e-f之间的任意字符
[hej@hadoop101 datas]$ cat /etc/passwd | grep r[a,b,c]*t
会匹配rt,rat, rbt, rabt, rbact,rabccbaaacbt等等所有行
6)特殊字符:\
\ 表示转义,并不会单独使用。
由于所有特殊字符都有其特定匹配模式,
当我们想匹配某一特殊字符本身时(例如,我想找出所有包含 '$' 的行),就会碰到困难。
此时我们就要将转义字符和特殊字符连用,来表示特殊字符本身,
例如
[hej@hadoop101 datas]$ cat /etc/passwd | grep a\$b
就会匹配所有包含 a$b 的行。
1)scp(secure copy)安全拷贝
(1)scp定义:
scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)
(2)基本语法
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
2)rsync远程同步工具
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。
(1)基本语法
rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
选项参数说明
选项 功能
-a 归档拷贝
-v 显示复制过程