一、shell 简单函数介绍
shell运算符
| 他的功能是把第一个命令command 1执行的结果作为command2的输入传给command 2
&&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行;换句话说,“如果这个命令执行成功&&那么执行这个命令”。
||则与&&相反。如果||左边的命令(command1)未执行成功,那么就执行||右边的命令(command2);或者换句话说,“如果这个命令执行失败了||那么就执行这个命令。
if常用判断
[ -a FILE ] 如果 FILE 存在则为真
[ -d FILE ] 如果 FILE 存在且是一个目录则返回为真
[ -e FILE ] 如果指定的文件或目录存在时返回为真
[ -f FILE ] 如果 FILE 存在且是一个普通文件则返回为真
[ -r FILE ] 如果 FILE 存在且是可读的则返回为真
[ -w FILE ] 如果 FILE 存在且是可写的则返回为真
[ -x FILE ] 如果 FILE 存在且是可执行的则返回为真
#aster节点进行时间同步:
ntpdate us.pool.ntp.org
#截取 / 之后
ok_name=${line##*/}
#截取 . 之前
tab_name=${ok_name%.*}
#修改hive数据库用户组,用户
切到hdfs用户,然后hdfs dfs -chown -R 用户:用户组 路径
##递归查询文件大小
du -a -h
#查看进程数量
ps -ef | grep test.jar | grep -v grep|wc -l
#查看被占用端口的PID: sudo lsof -i:8081
netstat -tln | grep 8081
#修改文件的字符集:iconv -f GB2312 -t UTF-8 -o demo.sh demo.sh
查看执行过的命令history
CPU64c 内存32--64
#修改linux用户组,用户
chown [-R] 账号名称 文件或目录
#显示行数
nu
#如果执行错误:need 'ssh' (command not found)
用:yum -y install ssh
shell脚本执行错误 $'\r':command not found
#方法一、
sed -i 's/\r//' 脚本名
#方法二、
yum -y install dos2unix
dos2unix 脚本名
--------日期
ETL_DATE=date +%Y%m%d
##本月月初
T_MON_FIRST_DAY=`date -d "$ETL_DATE" +"%Y%m01"`
##本月十五号
T_MON_15FIRST_DAY=`date -d "$T_MON_FIRST_DAY +15 day " + "%Y%m%d"`
##下个月月初
N_MON_FIRST_DAT=`date -d "$T_MON_FIRST_DAY +1 month" + "%Y%m%d"`
二、sed命令详解
## 如果想要真正修改 就需要sed -i ,sed 只是表面修改,真正的文件是没有修改的
sed '/123/ahello' 1.txt #向内容123后面添加hello,如果文件中有多行包括123,则每一行后面都会添加
sed '$ahello' 1.txt #在最后一行添加hello
sed '3ihello' 1.txt #在第三行之前插入hello
sed '/123/ihello' 1.txt #在包含123的行之前插入hello,如果有多行包含123,则包含123的每一行之前都会插入hello
sed '$ihello' 1.txt #在最后一行之前插入hello
sed '1chello' 1.txt #将文件1.txt的第一行替换为hello
sed '/123/chello' 1.txt #将包含123的行替换为hello
sed '$chello' 1.txt #将最后一行替换为hello
sed '4d' 1.txt #删除第四行
sed '1~2d' 1.txt #从第一行开始删除,每隔2行就删掉一行,即删除奇数行
sed '1,2d' 1.txt #删除1~2行
sed '1,2!d' 1.txt #删除1~2之外的所有行
sed '$d' 1.txt #删除最后一行
sed '/123/d' 1.txt #删除匹配123的行
sed '/123/,$d' 1.txt #删除从匹配123的行到最后一行
sed '/123/,+1d' 1.txt #删除匹配123的行及其后面一行
sed '/^$/d' 1.txt #删除空行
sed '/123\|abc/!d' 1.txt #删除不匹配123或abc的行,/123\|abc/ 表示匹配123或abc ,!表示取反
sed '1,3{/123/d}' 1.txt #删除1~3行中,匹配内容123的行,1,3表示匹配1~3行,{/123/d}表示删除匹配123的行
sed 's/123/hello/' 1.txt #将文件中的123替换为hello,默认只替换每行第一个123
sed 's/123/hello/g' 1.txt #将文本中所有的123都替换为hello
sed 's/123/hello/2' 1.txt #将每行中第二个匹配的123替换为hello
sed -n 's/123/hello/gpw 2.txt' 1.txt #将每行中所有匹配的123替换为hello,并将替换后的内容写入2.txt
sed '/#/s/,.*//g' 1.txt #匹配有#号的行,替换匹配行中逗号后的所有内容为空 (,.*)表示逗号后的所又内容
sed 's/..$//g' 1.txt #替换每行中的最后两个字符为空,每个点代表一个字符,$表示匹配末尾 (..$)表示匹配最后两个字符
sed 's/^#.*//' 1.txt #将1.txt文件中以#开头的行替换为空行,即注释的行 ( ^#)表示匹配以#开头,(.*)代表所有内容
sed 's/^#.*//;/^$/d' 1.txt #先替换1.txt文件中所有注释的空行为空行,然后删除空行,替换和删除操作中间用分号隔开
sed 's/^[0-9]/(&)/' 1.txt #将每一行中行首的数字加上一个小括号 (^[0-9])表示行首是数字,&符号代表匹配的内容
或者 sed 's/[0−9][0−9]/(\1)/' 1.txt #替换左侧特殊字符需钥转义,右侧不需要转义,\1代表匹配的内容
sed 's/$/&'haha'/' 1.txt # 在1.txt文件的每一行后面加上"haha"字段
sed -n '3p' 1.txt #打印文件中的第三行内容
sed -n '2~2p' 1.txt #从第二行开始,每隔两行打印一行,波浪号后面的2表示步长
sed -n '$p' 1.txt #打印文件的最后一行
sed -n '1,3p' 1.txt #打印1到3行
sed -n '3,$p' 1.txt #打印从第3行到最后一行的内容
sed -n '/you/p' 1.txt #逐行读取文件,打印匹配you的行
sed -n '/bob/,/too/p' 1.txt #打印从匹配内容bob到匹配内容too的行
sed -n "$=" 1.txt #打印1.txt文件最后一行的行号(即文件有多少行,和wc -l 功能类似)
sed -n '/error/=' 1.txt #打印匹配error的行的行号
sed -n '/error/{=;p}' 1.txt #打印匹配error的行的行号和内容(可用于查看日志中有error的行及其内容)
sed -n -e '1w 2.txt' -e '$w 2.txt' 1.txt #将1.txt的第1行和最后一行内容写入2.txt
sed -n -e '1w 2.txt' -e '$w 3.txt' 1.txt #将1.txt的第1行和最后一行分别写入2.txt和3.txt
sed -n '/abc\|123/w 2.txt' 1.txt #将1.txt中匹配abc或123的行的内容,写入到2.txt中
a='s/^ *>// #定义一个变量a保存sed指令,'s/^ *>//':表示匹配以0个或多空格开头紧跟一个'>'号的行,将匹配内容替换
s/\t*// #'s/\t*//':表示匹配以0个或多个制表符开头的行,将匹配内容替换
s/^>// #'s/^>//' :表示匹配以'>'开头的行,将匹配内容替换
s/^ *//' #'s/^ *//':表示匹配以0个或多个空格开头的行,将匹配内容替换
#echo $a
sed "$a" $1 #对用户给定的文本文件进行格式化处理
三、awk 命令详解
awk -F指定的是分隔符 -f指定的是脚本 -v指定的是参数
$1 指指定分隔符后,第一个字段,$3第三个字段, \t是制表符
一个或多个连续的空格或制表符看做一个定界符,即多个空格看做一个空格
awk -F":" '{print $1}' /etc/passwd
awk -F":" '{print $1 $3}' /etc/passwd //$1与$3相连输出,不分隔
awk -F":" '{print $1,$3}' /etc/passwd //多了一个逗号,$1与$3使用空格分隔
awk -F":" '{print $1 " " $3}' /etc/passwd //$1与$3之间手动添加空格分隔
awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd //自定义输出
awk -F: '{print NF}' /etc/passwd //显示每行有多少字段
awk -F: '{print $NF}' /etc/passwd //将每行第NF个字段的值打印出来
awk -F: 'NF==4 {print }' /etc/passwd //显示只有4个字段的行
awk -F: 'NF>2{print $0}' /etc/passwd //显示每行字段数量大于2的行
awk '{print NR,$0}' /etc/passwd //输出每行的行号
awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd //依次打印行号,字段数,最后字段值,制表符,每行内容
awk -F: 'NR==5{print}' /etc/passwd //显示第5行
awk -F: 'NR==5 || NR==6{print}' /etc/passwd //显示第5行和第6行
route -n|awk 'NR!=1{print}' //不显示第一行
IF语句
必须用在{}中,且比较内容用()扩起来
awk -F: '{if($1~/mail/) print $1}' /etc/passwd //简写
awk -F: '{if($1~/mail/) {print $1}}' /etc/passwd //全写
awk -F: '{if($1~/mail/) {print $1} else {print $2}}' /etc/passwd //if...else...
-f 脚本文件
awk -f script.awk file
BEGIN{
FS=":"
}
{print $1}
版权声明:本文为weixin_46153092原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。