shell编程常用基本功能

1.在shell编程之前

①:关于shell:shell通常以.sh结尾,但.sh结尾的并不一定是可执行脚本
②:shell脚本头文件一般以 #!/bin/bash开头
③:在完成shell文件的编写后,需要为脚本文件赋予权限才可执行
通常为 chmod +x xxx.sh 或者 chmod 775 xxx.sh

2.shell脚本Debug模式

通过-x参数进入Debug模式 即sh -x xxx.sh
可以查看程序中的变量及参数

3.shell脚本常用功能

①变量与变量的传递

#!/bin/bash 

#历史文件文件名
FILE_ALL='qk_chi_all'

#所有 qk_chi库 历史文件
FILE_QK_CHI=$2

#获取当前所有qk_chi库
PRESENT_QK_CHI=`sqoop-list-databases --connect jdbc:mysql://$URL --username $UNAME --password $PWD | grep -i $3`


-----------
- 变量名一般采用大写
- 变量的赋值左右不可以有空格
- ''包起来的数据代表字符串,想要表示'需要转义\'
- ``包起来的数据代表命令
上面的PRESENT_QK_CHI被执行 即执行对应的sqoop语句

②数组 (linux种数组为一维数组)

arr=(dingyi zhaoer zhangsan lisi wangwu)

echo ${arr[@]} //数组中所有元素
echo ${arr[*]} //数组中所有元素
echo ${arr[4]} //数组中第五个元素
echo ${#arr[@]} //数组的元素个数

[hadoop@hadoop data]$ ./test.sh 
dingyi zhaoer zhangsan lisi wangwu
dingyi zhaoer zhangsan lisi wangwu
wangwu
5

②if 条件判断

#!/bin/bash 
A="abc"
B="efgh"


if [ "${a}" == "$b" ];then //与fi成对出现
        echo "=="
else
        echo "!="
fi //与if成对出现
[hadoop@hadoop data]$ ./test.sh 
==

③循环

#!/bin/bash

j=0
for x in 1 2 3 4 5
do 
  echo $x
  let "j++"
  # let表示后面的值要进行运算
done
echo $j
echo "------------------"

for ((i=1;i<5;i++))
do
   echo $i
done
echo "===================="

x=1
y=1
while(($y<5))
do
   echo $y
   let "y++"
   let "x++"
done
echo "x: ${x}"
[hadoop@hadoop data]$ ./test.sh 
1
2
3
4
5
5
------------------
1
2
3
4
====================
1
2
3
4
x: 5

④分割

S="wangwu,zhangsan,lisi,dingyi"

OLD_IFS="$IFS"
IFS=","
arr=($S)
IFS="OLD_IFS"

for x in ${arr[*]}
do
        echo $x
done
[hadoop@hadoop data]$ ./test.sh 
wangwu
zhangsan
lisi
dingyi

--------------
这里记住这种固定写法即可
OLD_IFS="$IFS"
IFS=","-分隔符
arr=($S)-分割结果为数组
IFS="OLD_IFS"

⑤awk操作命令

基础数据
[hadoop@hadoop data]$ cat test.txt 
1 2 3
4 5 6
7 8 9;

- 打印第一列和第二列
cat test.txt |awk '{print $1,$2}'
1 2
4 5
7 8
cat test.txt |awk '{print $1 $2}'
12
45
78

-F ","
可以使用-F执行分隔符,不指定默认空格

[hadoop@hadoop data]$ cat test.txt |awk -F "," 'NR==3'
7,8,9
按照行号进行输出

⑥sed操作命令

[hadoop@hadoop data]$ vi test.log
a b c
1 2 3
替换a为aa
[hadoop@hadoop data]$ sed -i 's/a/aa/' test.log 
[hadoop@hadoop data]$ cat test.log 
aa b c
1 2 3


将aa替换为aa'
[hadoop@hadoop data]$ sed -i "s/aa/aa'/" test.log 
[hadoop@hadoop data]$ cat test.log 
aa' b c
1 2 3

将aa'替换为bbb【将/换为?用是一样的】
[hadoop@hadoop data]$ sed -i "s?aa'?bbb?" test.log 
[hadoop@hadoop data]$ cat test.log 
bbb b c
1 2 3



全局替换  g表示全局global
[hadoop@hadoop data]$ sed -i "s/b/w/g" test.log
[hadoop@hadoop data]$ cat test.log 
www w c
1 2 3


每行的行首前面加uuu
[hadoop@hadoop data]$ sed -i "s/^/uuu&/g" test.log
[hadoop@hadoop data]$ cat test.log 
uuuwww w c
uuu1 2 3


每行行尾后面加uuu
[hadoop@hadoop data]$ sed -i "s/$/&uuu/g" test.log

[hadoop@hadoop data]$ cat test.log 
uuuwww w cuuu
uuu1 2 3uuu
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值