文章目录
- shell 脚本中,使用vim打开文件
非编辑模式下,光标放在数字上,使用 Ctrl+a 组合,可以使数字+1 - 可以用 :N 或者 NG 来使光标定位到第N行
- vim中移动第10~15 行的内容到第2行下:
10G 5dd 2G p
- vim 中光标移到一行的末尾:
$
- vim 中删除一行中光标后面的内容:
d
+$
1.快速移动光标
- 在shell命令行中:
Ctrl+a 可以使光标移到最前面
Ctrl+e 可以使光标移到最后面
同样在hive客户端也适用
2.删除N天前的日志文件
命令: find . -mtime +N -type f -name "*.log.*" -exec rm -f {} \;
简单解释: find . 查询
-mtime 规定时间的一个参数,固定格式;
+N : N是指N天前;
-type f :类型文件;
-name: 名称;
“.log.” :要删除的文件的后缀名称,如果是删除全部,可以写"*";
-exec rm -f {} \ :固定格式,递归删除前面条件约束下的文件;
3.chown 修改文件权限
修改文件权限,如果用户及用户组相同可以使用
chown username. file.txt
4.检查脚本中是否有语法错误
bash -n xxx.sh
如:
5.一串的命令执行()和{}的区别
-()和{}都是对一串的命令进行执行,但有所区别:
相同点:
()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开
不同点
()只是对一串命令重新开一个子shell进行执行,{}对一串命令在当前shell执行
()最后一个命令可以不用分号,{}最后一个命令要用分号
()里的第一个命令和左边括号不必有空格,{}的第一个命令和左括号之间必须要有一个空格
()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令
测试():
测试{}:
1.可以用${@:3}
把第3个参数及后面的参数当做一个参数
$ cat test.sh
echo $@
echo $*
echo $1
echo $2
echo ${@:3}
这个应用场景主要是javascript:void(0)
2.shell 中的shift用法
对于位置变量或命令行参数,其个数必须是确定的,或者当 Shell 程序不知道其个数时,可以把所有参数一起赋值给变量$*。
若用户要求 Shell 在不知道位置变量个数的情况下,还能逐个的把参数一一处理,也就是在 $1 后为 $2,在 $2 后面为 $3 等。在 shift 命令执行前变量 $1 的值在 shift 命令执行后就不可用了。
例如:
$ cat x_shift2.sh
if [ $# -eq 0 ]
then
echo "Usage:x_shift2.sh 参数"
exit 1
fi
sum=0
until [ $# -eq 0 ]
do
sum=`expr $sum + $1`
shift
done
echo "sum is: $sum"
执行上述程序:
sh ./x_shift2.sh 10 20 15
其显示结果为:
45
1.grep正则匹配字符串
用法: grep [选项]... PATTERN [FILE]...
-E, --extended-regexp PATTERN 是一个可扩展的正则表达式(缩写为 ERE)
-P, --perl-regexp PATTERN 是一个 Perl 正则表达式
-o, --only-matching show only the part of a line matching PATTERN
一般用Perl 正则表达式处理起来比较方便:
$ cat test.txt | grep -Po "comment=.*?,"
comment=xxxxxx,
时间类
批量修改文件名
下面的脚本稍微改以下就可以改为递归的:
#!/bin/bash
dst_path=$1
for file in `ls $dst_path`
do
if [ -d $1/$file ]
then echo `$0 $1/$file`
elif [ -f $1/$file ]
then mv $1/$file $1/${file}._mod
else
echo $1/${file} is unknow file type
fi
done;