Shell常用功能汇总
时间
# 如果是输入的日期按照取输入日期;如果没输入日期取当前时间
if [ -n "$1" ]; then
do_date=$1
else
do_date=$(date "+%Y%m%d" -d -1day)
fi
# 减去10天,如果用负数是往前数
$(date -d "10 day ago 20150401" +%Y%m%d)
时间转换
入参 | 出参 | 用法 | 说明 |
---|---|---|---|
String(Date) | Long | $(date -d "2022-12-12 10:10:10" +%s) -d 参数表示显示指定的字符串所表示的时间 +%s 表示输出10位数的时间戳 | String(Date):时间字符串(年月日:yyyy-MM-dd,yyyy/MM/dd, yyyyMMdd. 时分秒:HH:mm:ss) Long:10位数的时间戳 举例:(2022-12-12 10:10:10) -> (1670811010) |
Long | String(Date) | $(date -d @1670811010 "+%Y-%m-%d %H:%M:%S") | Long:10位数的时间戳 String(Date):时间字符串 举例:(1670811010)->(2022-12-12 10:10:10) |
Long | Date | $(date -d @1670811010) | Long:10位数的时间戳 Date:时间 举例:(1670811010)->(Mon Dec 12 10:10:10 CST 2022) |
当前时间加减时间
# 当前时间进行加减时间
$(date -d "${数字} ${时间单位}" "+${数据转换的格式}")
# ${数字}:
# 加减时间的数(加:用正数, 减:用负数)
# ${时间单位}:
# 年月日时分秒:year, month, day, hour, minute, second
# ${数据转换的格式}:
# %Y %m %d %H %M %S :(年月日时分秒:String(Date):时间字符串)
# %s :(Long:10位数的时间戳)
# 例子:当前时间的 前1天,时间格式 %Y-%m-%d %H:%M:%S (2022-12-11 15:13:38)
$(date -d "-1 day" "+%Y-%m-%d %H:%M:%S")
# 例子:当前时间的 前1天,时间格式:%s: 10位数的时间戳 (1670743364)
$(date -d "-1 day" "+%s")
指定时间加减时间
# 按照指定时间加减时间
$(date -d"${数字} ${时间单位} ago ${时间字符串}" "+${数据转换的格式}")
# ${数字}:
# 加减时间的数(减:用正数, 加:用负数)
# ${时间单位}:
# 年月日时分秒:year, month, day, hour, minute, second
# ${时间字符串}:
# 年月日:%Y-%m-%d,%Y/%m/%d, %Y%m%d. 时分秒:%H:%M:%S(例如:%Y-%m-%d %H:%M:%S)
# ${数据转换的格式}:
# %Y %m %d %H %M %S :(年月日时分秒:String(Date):时间字符串)
# %s :(Long:10位数的时间戳)
# 例子:2015-04-01往后10天,如果用负数是往后,时间格式 %Y-%m-%d %H:%M:%S (2015-04-11 00:00:00)
$(date -d"-10 day ago 2015-04-01" "+%Y-%m-%d %H:%M:%S")
# 例子:2015-04-01往后10天,如果用负数是往后,时间格式:%s: 10位数的时间戳 (1428681600)
$(date -d"-10 day ago 2015-04-01" "+%s")
获取当前应用的pid值
$(ps -ef | grep 应用名称 | grep -v grep | awk '{print $2}')
# 获取nginx的pid
$(ps -ef | grep nginx | grep -v grep | awk '{print $2}')
获取端口信息
# 获取 进程id
ps -ef | grep 进程名称
# 根据 进程id 获取 端口号
netstat -nap | grep 进程id
# 根据 端口号 获取 进程id
netstat -tunlp | grep 端口号
删除历史目录或文件
# ${path}目录下保留三天历史数据(目录)
find ${path} -type d -mtime +3 | xargs rm -rf
# ${path}目录下保留三天历史数据(文件)
find ${path} -type f -mtime +3 | xargs rm -rf
awk
选项参数 | 功能 |
---|---|
-F | 指定输入文件折分隔符 |
-v | 赋值一个用户定义变量 |
# 举例:按照 : 符号分割,获取第一个数据(最终打印:fff)
echo "fff:123" | awk -F: '{print $1}'
# 举例:按照 : 符号分割,获取 第1,第5 个数据,中间用 , 分割(最终打印:fff,3)
echo "fff:123:1:2:3:4" | awk -F: '{print $1","$5}'
cut
选项参数 | 功能 |
---|---|
-f | 列号,提取第几列 |
-d | 分隔符,按照指定分隔符分割列 |
# 举例:按照 : 符号分割,获取第一个数据(最终打印:fff)
echo "fff:123" | cut -d: -f 1
# 举例:按照 : 符号分割,获取 第1,第2,第3,第4 个数据(最终打印:fff:123:1:2)
echo "fff:123:1:2:3:4" | cut -d: -f 1,2,3,4
sed
选项参数说明
选项参数 | 功能 |
---|---|
-e | 直接在指令列模式上进行sed的动作编辑。 |
命令功能描述
命令 | 功能描述 |
---|---|
a | 新增,a的后面可以接字串,在下一行出现 |
d | 删除 |
s | 查找并替换 |
##### 新增(在第一行后面添加 【zzz:222】)
echo "fff:111" | sed -e '1a zzz:222'
# 最终打印
fff:111
zzz:222
##### 删除(删除一行数据中带有【fff】的行)
echo "fff:111" | sed '/fff/d'
# 最终打印:【fff:111】删掉了
##### 查找替换(将所有的【f】替换成【z】)
echo "fff:111" | sed 's/f/z/g'
# 最终打印
zzz:111
sort
选项 | 说明 |
---|---|
-n | 依照数值的大小排序 |
-r | 以相反的顺序来排序 |
-t | 设置排序时所用的分隔字符 |
-k | 指定需要排序的列 |
##### 按照【:】分割后的第三列倒序排序
sort -t : -nrk 3 sort.txt
# 初始数据:cat sort.txt
bb:40:5.4
bd:20:4.2
xz:50:2.3
cls:10:3.5
ss:30:1.6
# sort后:
bb:40:5.4
bd:20:4.2
cls:10:3.5
xz:50:2.3
ss:30:1.6