一、Vim命令的简单使用请参考
二、Shell编程规范
1)shell文件行业规范默认后缀为.sh
2)shell首行为
#!/bin/bash
注意/bin/bash为当前脚本解释器,可以不写但不能写错了。
3)#表示注释
4)shell对大小写敏感,变量尽量全大写
三、变量
1、环境变量
全局生效
通过set命令查看
用户环境变量,当前用户生效
系统环境变量,所有用户生效
通过export声明变
2、位置变量
将脚本的参数传给脚本,多个参数使用空格隔开
$0: 获取脚本文件名称
$1、$2....$9 :执行脚本的参数
-----------------------------------------------------------------
用例
[hadoop@hadoop000 script]$ cat test.sh
#!/bin/bash
echo "$0"
echo "$2"
echo "$3"
echo "$1"
-------------------------------------------------------------------------
[hadoop@hadoop000 script]$ sh test.sh oneParm
test.sh
oneParm
3、预定义变量
由系统保留和维护的一组特殊变量
$0 : 获得当前脚本的名称
用例演示
###########
cat test.sh
#!/bin/bash
echo $0
############
[hadoop@hadoop000 script]$ sh test.sh
test.sh
---------------------------------------------------------------
$! : 后台运行的最后一个进程的PID
---------------------------------------------------------------
$? : 上一个命令退出的状态(0:成功,非0:失败)
---------------------------------------------------------------
$* : 当前shell参数集合(整体)
---------------------------------------------------------------
$$ : 表示当前进程ID号码
---------------------------------------------------------------
$# : 代表当前shell的参数个数
---------------------------------------------------------------
$@ : 当前shell参数集合(逐个读取)
4、自定义变量
变量命令格式:
-------------------------------
变量名=变量值
-------------------------------
注意:
1、等号两边不能有空格
2、变量名大小写敏感,官方建议大写
-------------------------------
变量取值:$变量名 或${变量名}
四、算数运算
常用运算符:
+ - * / %
语法格式
$((expression)) 或
$[expression] 或
expr expression
用例:
[hadoop@hadoop000 script]$ echo $((10+10))
20
[hadoop@hadoop000 script]$ echo $[10+10]
20
[hadoop@hadoop000 script]$ echo 10+10
10+10
五、比对符
数值常用比对符:
-eq 等于,equal
-------------------------------
-ne 不等于,not equal
-------------------------------
-gt 大于,greate than
-------------------------------
-ge 大于等于,greate than or equal
-------------------------------
-lt 小于,less than
-------------------------------
-le 小于等于,less than or equal
字符串常用比对符:
= 等于
-------------------------------
!= 不等于
-------------------------------
-z 长度为零,如: [ -z "$myvar" ]
-------------------------------
-n 长度为零,如: [ -z "$myvar" ]
六、文件判断
文件判断
-e 文件名,文件存在为真
-r 文件名,文件存在且可读为真
-w 文件名,文件存在且可写为真
-x 文件名,文件存在且可执行为真
-s 文件名,文件存在且有一个字符为真
-d 文件名,文件存在且为目录为真,目录ll显示为d
-f 文件名,文件存在且为普通文件为真,普通文件类型为-
-c 文件名,文件存在且为字符串型特殊文件为真,几乎不用使用到。ll /dev/ 可查看c类型文件
-b 文件名,文件存在且为块特殊文件为真,几乎不会使用到。ll /dev/ 可查看b类型文件
七、Date的使用
1、date 获取以及零时修改当前时间
[hadoop@hadoop000 script]$ date
Sun Apr 14 23:29:29 CST 2019
[hadoop@hadoop000 script]$ date -s "2019-04-10 02:20:57"
date: cannot set date: Operation not permitted
Wed Apr 10 02:20:57 CST 2019
2、修改date的输出格式
[hadoop@hadoop000 script]$ date '+%Y%m%d%H%M%S'
20190414233226
[hadoop@hadoop000 script]$ date +"%Y-%m-%d"
2019-04-14
3、Date加减运算
[hadoop@hadoop000 script]$ date +"%Y年%m月%d日"
2019年04月14日
[hadoop@hadoop000 script]$ date '+%Y%m%d%H%M%S' -d'-1 day'
20190413234358
[hadoop@hadoop000 script]$ date +"%Y年%m月%d日" -d'-1 day'
2019年04月13日
[hadoop@hadoop000 script]$ date +"%Y年%m月%d日" -d'-1 week'
2019年04月07日
[hadoop@hadoop000 script]$ date +"%Y年%m月%d日" -d'-1 year'
2018年04月14日
八、数组
语法结构
变量名=(元素1 元素2 元素3 元素4 元素5 元素6 )
注意 默认元素间是以空格分隔
用例1:
[hadoop@hadoop000 script]$ cat test.sh
#!/bin/bash
arr=(ruoze jepson xingxing wsk shiqi)
for i in ${arr[@]}
do
echo $i
done
--------------------------------------------------------------------------------------
[hadoop@hadoop000 script]$ sh test.sh
ruoze
jepson
xingxing
wsk
shiqi
用例2:字符串间使用逗分隔,OLD_IFS,IFS这些事固定写法,分隔字符串
[hadoop@hadoop000 script]$ cat test.sh
#!/bin/bash
S="ruoze,jepson,xingxing,wsk,shiqi"
OLD_IFS="$IFS"
IFS=","
arr=($S)
IFS="OLD_IFS"
for i in ${arr[@]}
do
echo $i
--------------------------------------------------------------------------------------
[hadoop@hadoop000 script]$ sh test.sh
ruoze
jepson
xingxing
wsk
shiqi
九、控制语句
1、 for循环
语法1:
for 变量 in 集合
do
逻辑
done
语法2:
for((初始变量;结束循环调节;变量))
do
逻辑
done
语法1用例:
[hadoop@hadoop000 script]$ cat test.sh
#!/bin/bash
for i in tony jet bob
do
echo $i
echo "hello $i"
done
--------------------------------------------------------------------------------------
[hadoop@hadoop000 script]$ sh test.sh
tony
hello tony
jet
hello jet
bob
hello bob
语法2用例(注意 {1..10} 可以用seq 10
取代):
[hadoop@hadoop000 script]$ cat test.sh
#!/bin/bash
for i in {1..10}
do
mkdir dir$i
done
--------------------------------------------------------------------------------------
[hadoop@hadoop000 script]$ sh test.sh
[hadoop@hadoop000 script]$ ll
total 44
drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir1
drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir10
drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir2
drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir3
drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir4
drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir5
drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir6
drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir7
drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir8
drwxrwxr-x 2 hadoop hadoop 4096 Apr 15 22:32 dir9
2、while循环
语法1:
while [条件]
do
逻辑
done
语法2:
while read -r line
do
逻辑
done
语法1用例:
[hadoop@hadoop000 script]$ cat test.sh
#!/bin/bash
i=0
sum=0
while [ $i -lt 10 ]
do
sum=$(($sum+$i))
i=$[$i+1]
done
echo $sum
--------------------------------------------------------------------------------------
[hadoop@hadoop000 script]$ sh test.sh
45
语法2用例:
[hadoop@hadoop000 script]$ cat test.sh
#!/bin/bash
while read -r line
do
echo $line
done < test.sh
--------------------------------------------------------------------------------------
[hadoop@hadoop000 script]$ sh test.sh
#!/bin/bash
while read -r line
do
echo $line
done < test.sh
语法2用例:
[hadoop@hadoop000 script]$ cat test.sh
#!/bin/bash
while read -r line
do
echo `echo $line | awk -F: '{print $1}'`:hello
done < /etc/passwd
--------------------------------------------------------------------------------------
[hadoop@hadoop000 script]$ sh test.sh
root:hello
bin:hello
daemon:hello
adm:hello
lp:hello
sync:hello
shutdown:hello
halt:hello
mail:hello
uucp:hello
operator:hello
games:hello
gopher:hello
ftp:hello
nobody:hello
dbus:hello
usbmuxd:hello
vcsa:hello
rpc:hello
rtkit:hello
avahi-autoipd:hello
abrt:hello
rpcuser:hello
nfsnobody:hello
haldaemon:hello
gdm:hello
ntp:hello
apache:hello
saslauth:hello
postfix:hello
pulse:hello
sshd:hello
tcpdump:hello
hadoop:hello
mysql:hello
3、if条件判断
语法1
if 条件
then
逻辑
fi
语法2
if 条件
then
逻辑
else
逻辑
fi
语法3
if 条件
then
逻辑
elif
then
逻辑
else
逻辑
fi
语法1用例:
[hadoop@hadoop000 script]$ cat test.sh
#!/bin/bash
if [ 2 -eq 2 ]
then
echo yes
else
echo no
fi
----------------------------------------------------
[hadoop@hadoop000 script]$ sh test.sh
yes
4、case 条件选择
语法
case $变量名称 in
条件1)
命令序列
;;
条件2)
命令序列
;;
条件3)
命令序列
;;
*)
esac
用例:
[hadoop@hadoop000 script]$ cat test.sh
#!/bin/bash
case $1 in
1)
echo "我是"$1
;;
2)
echo "我是"$1
;;
3)
echo "我是"$1
;;
*)
echo "我是"$1
;;
esac
-------------------------------------------------
[hadoop@hadoop000 script]$ sh test.sh jack
我是jack
十、函数
语法
function name{
方法体
}
-----------------------或者-----------------------------
name(){
方法体
}
用例:
[hadoop@hadoop000 script]$ cat test.sh
#!/bin/bash
sum(){
echo $(($1+$2))
}
sum 2 7
-----------------------------------------
[hadoop@hadoop000 script]$ sh test.sh
9
十一、awk 文件扫描
语法:
awk '{pattern + action}' {filenames}
用例1:
[hadoop@hadoop000 script]$ cat data.log
1,a,欢
2,b,迎
3,c,您
------------------------
[hadoop@hadoop000 script]$ cat data.log| awk -F "," 'NR==1'
1,a,欢
用例2:
[hadoop@hadoop000 script]$ cat data.log| awk -F "," 'NR>1'
2,b,迎
3,c,您
用例3:
[hadoop@hadoop000 script]$ awk -F "," '{print $1,$2}' data.log
1 a
2 b
3 c
用例4:
awk -F "," 'NR==2{print $2}' data.log
十二、sed 流编辑器(替换)
语法:
sed [options] 'command' file(s)
用例1:
[hadoop@hadoop000 script]$ cat data.log
1,a,欢
2,b,迎
3,c,您
------------------------------
[hadoop@hadoop000 script]$ sed -i 's/1/a/' data.log
[hadoop@hadoop000 script]$ cat data.log
a,a,欢
2,b,迎
3,c,您
用例2:
[hadoop@hadoop000 script]$ cat data.log
a,a,欢
2,b,迎
3,c,您
[hadoop@hadoop000 script]$ sed -i 's/a/aa/g' data.log
[hadoop@hadoop000 script]$ cat data.log
aa,aa,欢
2,b,迎
3,c,您
用例3:
[hadoop@hadoop000 script]$ cat data.log
aa,aa,欢
2,b,迎
3,c,您
[hadoop@hadoop000 script]$ sed -i 's/^/--&/g' data.log
[hadoop@hadoop000 script]$ cat data.log
--aa,aa,欢
--2,b,迎
--3,c,您
用例4:
[hadoop@hadoop000 script]$ cat data.log
--aa,aa,欢
--2,b,迎
--3,c,您
[hadoop@hadoop000 script]$ sed -i 's/$/&$$/g' data.log
[hadoop@hadoop000 script]$ cat data.log
--aa,aa,欢$$
--2,b,迎$$
--3,c,您$$
网友评论