shell脚本总结

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    显示复制过程


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值