shell命令及脚本编写

一、shell脚本介绍
(1)在大数据环境包括所有的环境中,shell脚本通常都是后缀为.sh,有一些会没有后缀
(2)shell脚本标准的写法,文件开头的第一行#!/bin/bash这是一个解释器,标识了脚本用什么命令去执行(不标准的写法:没有#!/bin/bash)
(3)通常执行脚本的命令是通过 ./xxx.sh ,可以进行绝对路径执行/root/learn_shell/wc.sh或者相对路径./wc.sh
(4)或者是使用sh xxx.sh执行脚本,sh是从$PATH环境变量里面找的
(5)用./xxx.sh执行脚本需要赋予权限,执行chmod +x xxx.sh或者是chmod u+x xxx.sh,其中+x代表的是用户和用户组都是+x的权限,如果是只想对用户执行权限则u+x

[root@ruozedata001 learn_shell]# vi wc.sh
[root@ruozedata001 learn_shell]# chmod +x wc.sh
[root@ruozedata001 learn_shell]# ll
total 4
-rwxr-xr-x 1 root root 36 Aug 24 13:00 wc.sh    三组权限都有+x
[root@ruozedata001 learn_shell]# chmod -x wc.sh
[root@ruozedata001 learn_shell]# chmod u+x wc.sh
[root@ruozedata001 learn_shell]# ll
total 4
-rwxr--r-- 1 root root 36 Aug 24 13:00 wc.sh    用户有+x权限
[root@ruozedata001 learn_shell]# ./wc.sh
www.ruozedata.com
[root@ruozedata001 learn_shell]# sh -x wc.sh
+ echo www.ruozedata.com
www.ruozedata.com

二、shell脚本的使用
变量定义与引用、传递参数、数组、if、forwhile、分割、awk、sed

1.变量定义与引用
坑:=前后不可出现空格
变量名称一般都是大写
使用变量 习惯的使用{ }

[root@ruozedata001 learn_shell]# ./variable.sh
ruozedata
date
Sat Aug 24 13:56:31 CST 2019
[root@ruozedata001 learn_shell]# cat variable.sh
#!/bin/bash
RZ="ruozedata"
DATE1='date'
DATE2=`date`

echo $rz
echo ${date1}
echo ${date2}
[root@ruozedata001 learn_shell]# 
静态
k="v" 'v' v
动态
k=`v`

2.传递参数

[root@ruozedata001 learn_shell]# ./parameter.sh a b
a
b
2
a b
PID: 2400
[root@ruozedata001 learn_shell]# cat parameter.sh
#!/bin/bash
echo $1
echo $2
echo "$#"    传递参数的个数
echo "$*"     传递参数的列表作为字符串显示,显示所有参数
echo "PID: $$"   表示当前脚本运行的PID号

3、数组
元素用"空格"符号分割开,数组可以使用[1]来显示数组中元素下标位1的元素,使用[@]来显示所有元素,使用#“数组变量”[@]来显示数组中元素个数

[root@ruozedata001 learn_shell]# vi array.sh
[root@ruozedata001 learn_shell]# chmod u+x array.sh
[root@ruozedata001 learn_shell]# ./array.sh
rz jepson xingxing huhu
huhu
4
[root@ruozedata001 learn_shell]# cat array.sh
#!/bin/bash 
arr=(rz jepson xingxing huhu)
echo ${arr[@]}
echo ${arr[3]}
echo ${#arr[@]}
[root@ruozedata001 learn_shell]# 

4、if判断
需要注意
a. [ ] 前后空格
b. == 前后空格

[root@ruozedata001 learn_shell]# ./if.sh
abc=='abc'
[root@ruozedata001 learn_shell]# cat if.sh
#!/bin/bash
A="abc"
B="jepson"
if [ "${A}"== "${B}" ];then                      
             echo "${A}==${B}"
elif [ "${A}" == "abc" ];then
             echo "${A}=='abc'"
else 
             echo "!="
fi

5、for循环和while循环

[root@ruozedata001 learn_shell]# ./forwhile.sh
1
2
3
4
5
6
7
8
9
“----------”
1
2
3
4
5
6
7
8
9
[root@ruozedata001 learn_shell]# cat forwhile.sh
#!/bin/bash
for ((i=1;i<10;i++))
do 
       echo $i
done        
echo “----------”
j=1
while(($j<10))   
do
     echo $j
       let "j++"   
done
[root@ruozedata001 learn_shell]# 

6、分割符

[root@ruozedata001 learn_shell]# chmod u+x spilt.sh
[root@ruozedata001 learn_shell]# ./spilt.sh
rz
j
xx
hh
[root@ruozedata001 learn_shell]# cat spilt.sh
#!/bin/bash
s="rz,j,xx,hh"
OLD_IFS="$IFS"    
IFS=","    
arr=($s)  
IFS="OLD_IFS"  
for x in ${arr[*]}
do 
      echo $x
done

7、awk

[root@ruozedata001 learn_shell]# cat test.log | awk '{print $1}'    打印文件第一列内容
a
1
[root@ruozedata001 learn_shell]# cat test.log | awk '{print $1,$2}'   打印文件第一列跟第二列内容
a b
1 2
[root@ruozedata001 learn_shell]# cat test.log | awk '{print $1$2}'   打印文件第一列跟第二列内容,无空格
ab
12
[root@ruozedata001 learn_shell]# cat test.log | awk 'NR==1{print}'   打印文件第一行
a  b  c
[root@ruozedata001 learn_shell]# cat test.log | awk 'NR==1{print $1}'     打印文件第一行第一列
a
[root@ruozedata001 learn_shell]# cat test.log | awk 'NR>1{print}'     打印文件大于第一行的内容
1  2  3
[root@ruozedata001 learn_shell]# cat test.log | awk -F "," '{print $1}'   以F指定分隔符,打印文件第一列
a
1
[root@ruozedata001 learn_shell]# cat test.log     
a  b  c
1  2  3
[root@ruozedata001 learn_shell]# 

8、sed
sed 选项 ‘编辑指令’ 文件路径
-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项
i:插入 向匹配行前插入内容
d:删除 删除匹配的内容
s:替换 替换掉匹配的内容
p:打印 打印出匹配的内容,通常与-n选项和用
n:读取下一行,遇到n时会自动跳入下一行

[root@ruozedata001 learn_shell]# sed -i 's/a/aa/' test.log    sed使用-i的时候,会改变文件内容,不输出信息
[root@ruozedata001 learn_shell]# cat test.log
aa  b  c
1  2  3
[root@ruozedata001 learn_shell]# sed -i "s/a/aa'/" test.log
[root@ruozedata001 learn_shell]# cat test.log
aa'a  b  c
1  2  3
[root@ruozedata001 learn_shell]# sed -i "s/aa'/bbb/" test.log
[root@ruozedata001 learn_shell]# cat test.log
bbba  b  c
1  2  3
[root@ruozedata001 learn_shell]# sed -i "s/b/j/g" test.log    sed添加g参数时,才会全局替换,不然只替换文件中每行第一个参数
[root@ruozedata001 learn_shell]# cat test.log
jjja  j  c
1  2  3
[root@ruozedata001 learn_shell]# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值