Shell脚本常用命令

遍历目录文件

1
2
3
4
5
files=$(ls $dir)
for filename in $files
do
// 操作
done

时间日期

获取当前时间并格式化

1
time="$(date '+%Y-%m-%d %H:%M:%S')"

获取近几天的日期

1
2
3
4
5
6
dname1="$(date -d -1day +%Y%m%d)"	//昨天
dname1="$(date -d -2day +%Y%m%d)" //前天
dname2="$(date -d -3day +%Y%m%d)" //大前天
dname1="$(date -d 1day +%Y%m%d)" //明天
dname1="$(date -d 2day +%Y%m%d)" //后天
dname1="$(date -d 3day +%Y%m%d)" //大后天

Mac中的date命令格式为usage: date [-jnRu] [-d dst] [-r seconds] [-t west] [-v[+|-]val[ymwdHMS]] ... [-f fmt date | [[[mm]dd]HH]MM[[cc]yy][.ss]] [+format],所以上述例子应写成
$(date -v -1d +%Y-%m-%d)

路径

获取当前绝对路径

1
2
work_path=$(dirname $(readlink -f $0))
echo $work_path

远程

普通SSH

1
ssh root@192.168.2.2

带秘钥文件SSH

1
2
chmod 600 /key.dat
ssh -o port=8922 -i '/key.dat' root@192.168.2.2

SCP拉取文件

1
scp root@192.168.2.2:/* '本地目录'

链接&发送操作

数据库操作

1
2
3
4
5
mysql -uroot -p${password} <<EOF
use ${dbname};
INSERT INTO ${dbname}.sync_record_history(type, start_time, source, created_at)
VALUES ('$type', '$(date "+%Y-%m-%d %H:%M:%S")','$dir/$filename','$(date "+%Y-%m-%d %H:%M:%S")');
EOF

SSH远程操作

1
2
3
4
chmod 600 /key.dat
ssh root@192.168.2.2 <<EOF
// ...输出操作,但不能执行脚本
EOF